54 fOldTouchableH(), fNewTouchableH(), fInitialTouchableH(), fFinalTouchableH()
75 delete fpEnergySplitter;
93 fNewTouchableH = fOldTouchableH;
147 G4ThreeVector preStepPosition, postStepPosition, direction, finalPostStepPosition;
155 fOldTouchableH = fInitialTouchableH;
156 fNewTouchableH= fOldTouchableH;
165 direction= (finalPostStepPosition - preStepPosition).unit();
169 postStepPosition= preStepPosition;
172 for ( iStep=0; iStep < numberVoxelsInStep; iStep++ ){
174 G4double stepLength=0.0, energyLoss= 0.0;
176 *fSplitPreStepPoint = *fSplitPostStepPoint;
177 fOldTouchableH = fNewTouchableH;
179 preStepPosition= postStepPosition;
180 fSplitPreStepPoint->
SetPosition( preStepPosition );
188 postStepPosition= preStepPosition + stepLength * direction;
189 fSplitPostStepPoint->
SetPosition(postStepPosition);
194 if( iStep < numberVoxelsInStep -1 ){
196 G4int nextVoxelId= -1;
197 fpEnergySplitter->
GetVoxelID( iStep+1, nextVoxelId );
201 CreateTouchableForSubStep( nextVoxelId, postStepPosition );
212 eLossFraction= (totalEnergyDeposit>0.0) ? energyLoss / totalEnergyDeposit : 1.0 ;
218 ptrSD->
Hit(fSplitStep);
235 GetNavigatorForTracking()->CreateTouchableHistory(oldTouchableHistory->
GetHistory());
257 G4cout <<
" Current volume type is not Parameterised. " <<
G4endl;
258 G4Exception(
"G4ScoreSplittingProcess::CreateTouchableForSubStep",
260 "Score Splitting Process is used for Regular Structure - but did not find one here.");
262 return ptrTouchableHistory;
265void G4ScoreSplittingProcess::CopyStepStart(
const G4Step & step)
281 G4cout <<
"In mass geometry ------------------------------------------------" <<
G4endl;
284 G4cout <<
" PreStepPoint : "
289 {
G4cout <<
"NoProcessAssigned"; }
292 G4cout <<
" PostStepPoint : ";
296 {
G4cout <<
"OutOfWorld"; }
301 {
G4cout <<
"NoProcessAssigned"; }
305 G4cout <<
"In ghost geometry ------------------------------------------------" <<
G4endl;
307 <<
" TotalEnergyDeposit : "
309 G4cout <<
" PreStepPoint : "
316 {
G4cout <<
"NoProcessAssigned"; }
319 G4cout <<
" PostStepPoint : ";
327 {
G4cout <<
"OutOfWorld"; }
332 {
G4cout <<
"NoProcessAssigned"; }
380 return &dummyParticleChange;
G4double condition(const G4ErrorSymMatrix &m)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
@ NotCandidateForSelection
G4ReferenceCountedHandle< G4VTouchable > G4TouchableHandle
G4GLOB_DLL std::ostream G4cout
void GetLengthAndEnergyDeposited(G4int stepNo, G4int &voxelID, G4double &stepLength, G4double &energyLoss)
G4Material * GetVoxelMaterial(G4int stepNo)
G4int SplitEnergyInVolumes(const G4Step *aStep)
void GetVoxelID(G4int stepNo, G4int &voxelID)
G4VSensitiveDetector * GetSensitiveDetector() const
void SetMaterial(G4Material *pMaterial)
EVolume GetTopVolumeType() const
void NewLevel(G4VPhysicalVolume *pNewMother, EVolume vType=kNormal, G4int nReplica=-1)
G4VPhysicalVolume * GetTopVolume() const
const std::vector< std::pair< G4int, G4double > > & GetStepLengths()
static G4RegularNavigationHelper * Instance()
G4double AtRestGetPhysicalInteractionLength(const G4Track &, G4ForceCondition *)
void StartTracking(G4Track *)
G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
virtual ~G4ScoreSplittingProcess()
void Verbose(const G4Step &) const
G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double, G4double, G4double &, G4GPILSelection *)
G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &)
G4ScoreSplittingProcess(const G4String &processName="ScoreSplittingProc", G4ProcessType theType=fParameterisation)
void SetSensitiveDetector(G4VSensitiveDetector *)
G4StepStatus GetStepStatus() const
const G4VTouchable * GetTouchable() const
void SetStepStatus(const G4StepStatus aValue)
const G4VProcess * GetProcessDefinedStep() const
void SetTouchableHandle(const G4TouchableHandle &apValue)
const G4ThreeVector & GetPosition() const
G4VPhysicalVolume * GetPhysicalVolume() const
void SetPosition(const G4ThreeVector &aValue)
G4SteppingControl GetControlFlag() const
G4Track * GetTrack() const
void SetStepLength(G4double value)
void SetNonIonizingEnergyDeposit(G4double value)
G4StepPoint * GetPreStepPoint() const
G4double GetNonIonizingEnergyDeposit() const
G4double GetStepLength() const
G4double GetTotalEnergyDeposit() const
void SetControlFlag(G4SteppingControl StepControlFlag)
void SetTotalEnergyDeposit(G4double value)
G4StepPoint * GetPostStepPoint() const
void SetTrack(G4Track *value)
const G4NavigationHistory * GetHistory() const
G4VPhysicalVolume * GetVolume() const
const G4TouchableHandle & GetNextTouchableHandle() const
const G4TouchableHandle & GetTouchableHandle() const
const G4ThreeVector & GetMomentumDirection() const
const G4Step * GetStep() const
static G4TransportationManager * GetTransportationManager()
virtual G4VSolid * ComputeSolid(const G4int, G4VPhysicalVolume *)
virtual void ComputeTransformation(const G4int, G4VPhysicalVolume *) const =0
virtual void Initialize(const G4Track &)
void ProposeSteppingControl(G4SteppingControl StepControlFlag)
virtual G4bool IsRegularStructure() const =0
G4LogicalVolume * GetLogicalVolume() const
const G4String & GetName() const
virtual G4VPVParameterisation * GetParameterisation() const =0
G4VParticleChange * pParticleChange
const G4String & GetProcessName() const
G4bool Hit(G4Step *aStep)
virtual void ComputeDimensions(G4VPVParameterisation *p, const G4int n, const G4VPhysicalVolume *pRep)
virtual G4int GetReplicaNumber(G4int depth=0) const