69 delete fpEnergySplitter;
85 fNewTouchableH = fOldTouchableH;
135 G4ThreeVector preStepPosition, postStepPosition, direction, finalPostStepPosition;
143 fOldTouchableH = fInitialTouchableH;
144 fNewTouchableH = fOldTouchableH;
153 direction = (finalPostStepPosition - preStepPosition).unit();
157 postStepPosition = preStepPosition;
160 for (iStep = 0; iStep < numberVoxelsInStep; iStep++) {
162 G4double stepLength = 0.0, energyLoss = 0.0;
164 *fSplitPreStepPoint = *fSplitPostStepPoint;
165 fOldTouchableH = fNewTouchableH;
167 preStepPosition = postStepPosition;
176 postStepPosition = preStepPosition + stepLength * direction;
177 fSplitPostStepPoint->
SetPosition(postStepPosition);
182 if (iStep < numberVoxelsInStep - 1) {
184 G4int nextVoxelId = -1;
185 fpEnergySplitter->
GetVoxelID(iStep + 1, nextVoxelId);
188 G4VTouchable* fNewTouchablePtr = CreateTouchableForSubStep(nextVoxelId, postStepPosition);
199 eLossFraction = (totalEnergyDeposit > 0.0) ? energyLoss / totalEnergyDeposit : 1.0;
205 ptrSD->
Hit(fSplitStep);
228 EVolume curVolumeType = ptrNavHistory->GetTopVolumeType();
230 ptrNavHistory->BackLevel();
239 ptrNavHistory->NewLevel(curPhysicalVol,
kParameterised, newVoxelNum);
242 G4cout <<
" Current volume type is not Parameterised. " <<
G4endl;
244 "G4ScoreSplittingProcess::CreateTouchableForSubStep",
"ErrorRegularParamaterisation",
246 "Score Splitting Process is used for Regular Structure - but did not find one here.");
248 return ptrTouchableHistory;
251void G4ScoreSplittingProcess::CopyStepStart(
const G4Step& step)
267 G4cout <<
"In mass geometry ------------------------------------------------" <<
G4endl;
275 G4cout <<
"NoProcessAssigned";
279 G4cout <<
" PostStepPoint : ";
291 G4cout <<
"NoProcessAssigned";
296 G4cout <<
"In ghost geometry ------------------------------------------------" <<
G4endl;
306 G4cout <<
"NoProcessAssigned";
310 G4cout <<
" PostStepPoint : ";
323 G4cout <<
"NoProcessAssigned";
365 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)
G4TouchableHistory * CreateTouchableHistory() const
const std::vector< std::pair< G4int, G4double > > & GetStepLengths()
static G4RegularNavigationHelper * Instance()
G4double AlongStepGetPhysicalInteractionLength(const G4Track &, G4double, G4double, G4double &, G4GPILSelection *) override
void StartTracking(G4Track *) override
G4VParticleChange * AlongStepDoIt(const G4Track &, const G4Step &) override
void Verbose(const G4Step &) const
~G4ScoreSplittingProcess() override
G4double AtRestGetPhysicalInteractionLength(const G4Track &, G4ForceCondition *) override
G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &) override
G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition) override
G4ScoreSplittingProcess(const G4String &processName="ScoreSplittingProc", G4ProcessType theType=fParameterisation)
G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &) override
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)
virtual const G4NavigationHistory * GetHistory() const
virtual G4int GetReplicaNumber(G4int depth=0) const
G4VPhysicalVolume * GetVolume() const
const G4TouchableHandle & GetNextTouchableHandle() const
const G4TouchableHandle & GetTouchableHandle() const
const G4ThreeVector & GetMomentumDirection() const
const G4Step * GetStep() const
static G4TransportationManager * GetTransportationManager()
G4Navigator * GetNavigatorForTracking() const
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)