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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef G4ImportanceProcess_hh
00042 #define G4ImportanceProcess_hh G4ImportanceProcess_hh
00043
00044 #include "G4VProcess.hh"
00045 #include "G4VTrackTerminator.hh"
00046
00047 class G4SamplingPostStepAction;
00048 class G4VImportanceAlgorithm;
00049 class G4VIStore;
00050
00051 class G4Step;
00052 class G4Navigator;
00053 class G4TransportationManager;
00054 class G4PathFinder;
00055 class G4VTouchable;
00056
00057 #include "G4FieldTrack.hh"
00058 #include "G4TouchableHandle.hh"
00059
00060
00061 class G4ImportanceProcess : public G4VProcess, public G4VTrackTerminator
00062 {
00063
00064 public:
00065
00066 G4ImportanceProcess(const G4VImportanceAlgorithm &aImportanceAlgorithm,
00067 const G4VIStore &aIstore,
00068 const G4VTrackTerminator *TrackTerminator,
00069 const G4String &aName = "ImportanceProcess", G4bool para = false);
00070
00071
00072 virtual ~G4ImportanceProcess();
00073
00074
00075
00076
00077
00078
00079
00080 void SetParallelWorld(G4String parallelWorldName);
00081 void SetParallelWorld(G4VPhysicalVolume* parallelWorld);
00082
00083
00084
00085
00086
00087 void StartTracking(G4Track*);
00088
00089
00090 virtual G4double
00091 PostStepGetPhysicalInteractionLength(const G4Track& aTrack,
00092 G4double previousStepSize,
00093 G4ForceCondition* condition);
00094
00095 virtual G4VParticleChange *PostStepDoIt(const G4Track&, const G4Step&);
00096
00097
00098 virtual void KillTrack() const;
00099
00100
00101 virtual const G4String &GetName() const;
00102
00103
00104 public:
00105
00106
00107
00108 virtual G4double
00109 AlongStepGetPhysicalInteractionLength(const G4Track&,
00110 G4double ,
00111 G4double ,
00112 G4double& ,
00113 G4GPILSelection*);
00114 virtual G4double
00115 AtRestGetPhysicalInteractionLength(const G4Track& ,
00116 G4ForceCondition*);
00117
00118 virtual G4VParticleChange*
00119 AtRestDoIt(const G4Track&, const G4Step&);
00120
00121
00122 virtual G4VParticleChange*
00123 AlongStepDoIt(const G4Track&, const G4Step&);
00124
00125 private:
00126
00127 G4ImportanceProcess(const G4ImportanceProcess &);
00128 G4ImportanceProcess &operator=(const G4ImportanceProcess &);
00129
00130 private:
00131
00132 void CopyStep(const G4Step & step);
00133
00134 G4Step * fGhostStep;
00135 G4StepPoint * fGhostPreStepPoint;
00136 G4StepPoint * fGhostPostStepPoint;
00137
00138 G4ParticleChange *fParticleChange;
00139 const G4VImportanceAlgorithm &fImportanceAlgorithm;
00140 const G4VIStore &fIStore;
00141 G4SamplingPostStepAction *fPostStepAction;
00142
00143 G4TransportationManager* fTransportationManager;
00144 G4PathFinder* fPathFinder;
00145
00146
00147
00148
00149 G4String fGhostWorldName;
00150 G4VPhysicalVolume* fGhostWorld;
00151 G4Navigator* fGhostNavigator;
00152 G4int fNavigatorID;
00153 G4TouchableHandle fOldGhostTouchable;
00154 G4TouchableHandle fNewGhostTouchable;
00155 G4FieldTrack fFieldTrack;
00156 G4double fGhostSafety;
00157 G4bool fOnBoundary;
00158
00159 G4bool paraflag;
00160
00161 };
00162
00163 #endif