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 #ifndef G4WeightCutOffProcess_hh
00039 #define G4WeightCutOffProcess_hh G4WeightCutOffProcess_hh
00040
00041 #include "G4VProcess.hh"
00042 #include "G4VTrackTerminator.hh"
00043 #include "G4GeometryCell.hh"
00044
00045
00046 class G4VIStore;
00047
00048 class G4Step;
00049 class G4Navigator;
00050 class G4TransportationManager;
00051 class G4PathFinder;
00052 class G4VTouchable;
00053
00054 #include "G4FieldTrack.hh"
00055 #include "G4TouchableHandle.hh"
00056
00057
00058
00059 class G4WeightCutOffProcess : public G4VProcess
00060 {
00061
00062 public:
00063
00064 G4WeightCutOffProcess(G4double wsurvival,
00065 G4double wlimit,
00066 G4double isource,
00067 G4VIStore *istore,
00068
00069 const G4String &aName = "WeightCutOffProcess", G4bool para = false);
00070
00071
00072 virtual ~G4WeightCutOffProcess();
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 virtual G4double
00090 PostStepGetPhysicalInteractionLength(const G4Track& aTrack,
00091 G4double previousStepSize,
00092 G4ForceCondition* condition);
00093
00094
00095 virtual G4VParticleChange * PostStepDoIt(const G4Track&,
00096 const G4Step&);
00097
00098
00099 const G4String &GetName() const;
00100
00101 public:
00102
00103
00104
00105 virtual G4double
00106 AlongStepGetPhysicalInteractionLength(const G4Track&,
00107 G4double ,
00108 G4double ,
00109 G4double& ,
00110 G4GPILSelection*);
00111
00112 virtual G4double
00113 AtRestGetPhysicalInteractionLength(const G4Track& ,
00114 G4ForceCondition*);
00115
00116 virtual G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&);
00117 virtual G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&);
00118
00119 private:
00120
00121 void CopyStep(const G4Step & step);
00122
00123 G4Step * fGhostStep;
00124 G4StepPoint * fGhostPreStepPoint;
00125 G4StepPoint * fGhostPostStepPoint;
00126
00127 G4WeightCutOffProcess(const G4WeightCutOffProcess &);
00128 G4WeightCutOffProcess &operator=(const G4WeightCutOffProcess &);
00129
00130 G4ParticleChange *fParticleChange;
00131 G4double fWeightSurvival;
00132 G4double fWeightLimit;
00133 G4double fSourceImportance;
00134 G4VIStore *fIStore;
00135
00136
00137
00138 G4TransportationManager* fTransportationManager;
00139 G4PathFinder* fPathFinder;
00140
00141
00142
00143
00144 G4String fGhostWorldName;
00145 G4VPhysicalVolume* fGhostWorld;
00146 G4Navigator* fGhostNavigator;
00147 G4int fNavigatorID;
00148 G4TouchableHandle fOldGhostTouchable;
00149 G4TouchableHandle fNewGhostTouchable;
00150 G4FieldTrack fFieldTrack;
00151 G4double fGhostSafety;
00152 G4bool fOnBoundary;
00153
00154 G4bool paraflag;
00155
00156 };
00157
00158 #endif