4 // See the class description in the header file.
6 #include "AliStackingAction.h"
7 #include "AliStackingActionMessenger.h"
8 #include "AliTrackingAction.h"
9 #include "AliGlobals.h"
12 #include <G4TrackStack.hh>
13 #include <G4StackedTrack.hh>
14 #include <G4StackManager.hh>
15 #include <G4NeutrinoE.hh>
16 #include <G4NeutrinoMu.hh>
17 #include <G4NeutrinoTau.hh>
18 #include <G4AntiNeutrinoE.hh>
19 #include <G4AntiNeutrinoMu.hh>
20 #include <G4AntiNeutrinoTau.hh>
22 AliStackingAction::AliStackingAction()
29 fPrimaryStack = new G4TrackStack();
30 fMessenger = new AliStackingActionMessenger(this);
33 AliStackingAction::AliStackingAction(const AliStackingAction& right) {
35 AliGlobals::Exception("AliStackingAction is protected from copying.");
38 AliStackingAction::~AliStackingAction() {
47 AliStackingAction::operator=(const AliStackingAction &right)
49 // check assignement to self
50 if (this == &right) return *this;
52 AliGlobals::Exception("AliStackingAction is protected from assigning.");
59 G4ClassificationOfNewTrack
60 AliStackingAction::ClassifyNewTrack(const G4Track* track)
62 // Classifies the new track.
65 G4ClassificationOfNewTrack classification;
67 // move all primaries to PrimaryStack
68 G4Track* nonconstTrack = (G4Track*)track;
69 G4StackedTrack* newTrack = new G4StackedTrack(nonconstTrack);
70 fPrimaryStack->PushToStack(newTrack);
71 classification = fPostpone;
73 // save primary particle info
74 // (secondary particles are stored
75 // by AlTrackingAction::PreUserTrackingAction() method)
77 fTrackingAction->SaveTrack(track);
81 G4ParticleDefinition* particle = track->GetDefinition();
82 if( particle == G4NeutrinoE::NeutrinoEDefinition() ||
83 particle == G4NeutrinoMu::NeutrinoMuDefinition() ||
84 particle == G4NeutrinoTau::NeutrinoTauDefinition() ||
85 particle == G4AntiNeutrinoE::AntiNeutrinoEDefinition() ||
86 particle == G4AntiNeutrinoMu::AntiNeutrinoMuDefinition() ||
87 particle == G4AntiNeutrinoTau::AntiNeutrinoTauDefinition()) {
92 G4int parentID = track->GetParentID();
100 return classification;
103 void AliStackingAction::NewStage()
105 // Called by G4 kernel at the new stage of stacking.
111 G4cout << "AliStackingAction::NewStage " << fStage
112 << " has been started." << G4endl;
115 G4int nofUrgent = stackManager->GetNUrgentTrack();
118 G4int nofPrimary = fPrimaryStack->GetNTrack();
121 G4StackedTrack* stackedTrack
122 = fPrimaryStack->PopFromStack();
123 G4Track* primaryTrack
124 = stackedTrack->GetTrack();
126 stackManager->PushOneTrack(primaryTrack);
131 void AliStackingAction::ClearPrimaryStack()
133 // Clears the primary stack.
136 stackManager->ClearPostponeStack();
139 void AliStackingAction::PrepareNewEvent()
141 // Called by G4 kernel at the beginning of event.
146 fTrackingAction = AliTrackingAction::Instance();
147 fSavePrimaries = fTrackingAction->GetSavePrimaries();