19#include "BDSAcceleratorModel.hh"
20#include "BDSGlobalConstants.hh"
21#include "BDSLinkEventAction.hh"
22#include "BDSLinkTrackingAction.hh"
23#include "BDSPhysicsUtilities.hh"
24#include "BDSTrajectory.hh"
25#include "BDSTrajectoryOptions.hh"
26#include "BDSTrajectoryPrimary.hh"
27#include "BDSUtilities.hh"
29#include "G4TrackingManager.hh"
39 G4int verboseSteppingEventStartIn,
40 G4int verboseSteppingEventStopIn,
41 G4bool verboseSteppingPrimaryOnlyIn,
42 G4int verboseSteppingLevelIn):
43 interactive(!batchMode),
44 eventAction(eventActionIn),
45 verboseSteppingEventStart(verboseSteppingEventStartIn),
46 verboseSteppingEventStop(verboseSteppingEventStopIn),
47 verboseSteppingPrimaryOnly(verboseSteppingPrimaryOnlyIn),
48 verboseSteppingLevel(verboseSteppingLevelIn)
50 trajectoryStorageOptions = {
false,
true,
true,
false,
false,
false,
false,
false,
false};
55 G4int eventIndex =
eventAction->CurrentEventIndex();
56 G4bool verboseSteppingThisEvent =
BDS::VerboseThisEvent(eventIndex, verboseSteppingEventStart, verboseSteppingEventStop);
57 G4bool primaryParticle = track->GetParentID() == 0;
59 if (primaryParticle && verboseSteppingThisEvent)
60 {fpTrackingManager->GetSteppingManager()->SetVerboseLevel(verboseSteppingLevel);}
61 else if (!primaryParticle && verboseSteppingThisEvent && !verboseSteppingPrimaryOnly)
62 {fpTrackingManager->GetSteppingManager()->SetVerboseLevel(verboseSteppingLevel);}
72 trajectoryStorageOptions);
73 fpTrackingManager->SetStoreTrajectory(1);
74 fpTrackingManager->SetTrajectory(traj);
77 {fpTrackingManager->SetStoreTrajectory(0);}
86 fpTrackingManager->SetStoreTrajectory(1);
87 fpTrackingManager->SetTrajectory(traj);
94 fpTrackingManager->GetSteppingManager()->SetVerboseLevel(0);
96 if (track->GetParentID() == 0)
98 G4LogicalVolume* lv = track->GetVolume()->GetLogicalVolume();
99 std::set<G4LogicalVolume*>* collimators = BDSAcceleratorModel::Instance()->
VolumeSet(
"collimators");
100 if (collimators->find(lv) != collimators->end())
std::set< G4LogicalVolume * > * VolumeSet(const G4String &name)
Returns pointer to a set of logical volumes. If no set by that name exits, create it.
Process information at the event level for Link to trackers.
void SetPrimaryAbsorbedInCollimator(G4bool stoppedIn)
Flag that the primary was absorbed in a collimator - can be done externally to this class.
BDSLinkEventAction * eventAction
Cache of event action to communicate whether a primary stopped in a collimator or not.
BDSLinkTrackingAction()=delete
No default constructor required.
virtual void PostUserTrackingAction(const G4Track *track)
Detect whether track is a primary and if so whether it ended in a collimator.
virtual void PreUserTrackingAction(const G4Track *track)
Used to decide whether or not to store trajectories.
Trajectory information for only the primary.
Trajectory information from track including last scatter etc.
G4bool VerboseThisEvent(G4int eventIndex, G4int eventStart, G4int eventStop)
Logic of whether this event should be verbose or not. Code here so it's not duplicated.