00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef G4EnergySplitter_h
00027 #define G4EnergySplitter_h 1
00028
00030
00031
00032
00033
00034
00035
00036
00038 #include "globals.hh"
00039 class G4PhantomParameterisation;
00040 class G4EnergyLossForExtrapolator;
00041 class G4VPhysicalVolume;
00042 class G4Material;
00043 class G4Step;
00044 #include <vector>
00045
00046 class G4EnergySplitter
00047 {
00048 public:
00049 G4EnergySplitter();
00050 virtual ~G4EnergySplitter();
00051
00052 G4int SplitEnergyInVolumes(const G4Step* aStep );
00053
00054 void GetLastVoxelID( G4int& voxelID);
00055 void GetFirstVoxelID( G4int& voxelID);
00056 void GetVoxelID( G4int stepNo, G4int& voxelID );
00057 inline void GetVoxelIDAndLength( G4int stepNo, G4int& voxelID, G4double& stepLength );
00058 inline void GetLengthAndEnergyDeposited( G4int stepNo, G4int& voxelID, G4double& stepLength, G4double &energyLoss);
00059 inline void GetLengthAndInitialEnergy( G4double &preStepEnergy, G4int stepNo, G4int& voxelID, G4double& stepLength, G4double &initialEnergy);
00060
00061 inline void SetNIterations( G4int niter );
00062
00063 inline G4Material* GetVoxelMaterial( G4int stepNo );
00064
00065 private:
00066 void GetStepLength( G4int stepNo, G4double& stepLength );
00067
00068 void GetPhantomParam(G4bool mustExist);
00069 G4bool IsPhantomVolume( G4VPhysicalVolume* pv );
00070
00071 G4EnergyLossForExtrapolator* theElossExt;
00072
00073 G4int theNIterations;
00074
00075 std::vector<G4double> theEnergies;
00076
00077 G4PhantomParameterisation* thePhantomParam;
00078
00079 };
00080
00081 #include "G4EnergySplitter.icc"
00082
00083 #endif