4 // Author: I. Hrivnacova
6 // Class AliStackingAction
7 // -----------------------
8 // See the class description in the header file.
10 #include "AliStackingAction.h"
11 #include "AliTrackingAction.h"
12 #include "AliGlobals.h"
15 #include <G4TrackStack.hh>
16 #include <G4StackedTrack.hh>
17 #include <G4StackManager.hh>
18 #include <G4NeutrinoE.hh>
19 #include <G4NeutrinoMu.hh>
20 #include <G4NeutrinoTau.hh>
21 #include <G4AntiNeutrinoE.hh>
22 #include <G4AntiNeutrinoMu.hh>
23 #include <G4AntiNeutrinoTau.hh>
25 //_____________________________________________________________________________
26 AliStackingAction::AliStackingAction()
34 fPrimaryStack = new G4TrackStack();
37 //_____________________________________________________________________________
38 AliStackingAction::AliStackingAction(const AliStackingAction& right)
41 AliGlobals::Exception("AliStackingAction is protected from copying.");
44 //_____________________________________________________________________________
45 AliStackingAction::~AliStackingAction() {
52 //_____________________________________________________________________________
54 AliStackingAction::operator=(const AliStackingAction &right)
56 // check assignement to self
57 if (this == &right) return *this;
59 AliGlobals::Exception("AliStackingAction is protected from assigning.");
66 //_____________________________________________________________________________
67 G4ClassificationOfNewTrack
68 AliStackingAction::ClassifyNewTrack(const G4Track* track)
70 // Classifies the new track.
73 G4ClassificationOfNewTrack classification;
75 // move all primaries to PrimaryStack
76 G4Track* nonconstTrack = (G4Track*)track;
77 G4StackedTrack* newTrack = new G4StackedTrack(nonconstTrack);
78 fPrimaryStack->PushToStack(newTrack);
79 classification = fPostpone;
81 // save primary particle info
82 // (secondary particles are stored
83 // by AlTrackingAction::PreUserTrackingAction() method)
85 fTrackingAction->SaveTrack(track);
89 G4ParticleDefinition* particle = track->GetDefinition();
90 if( particle == G4NeutrinoE::NeutrinoEDefinition() ||
91 particle == G4NeutrinoMu::NeutrinoMuDefinition() ||
92 particle == G4NeutrinoTau::NeutrinoTauDefinition() ||
93 particle == G4AntiNeutrinoE::AntiNeutrinoEDefinition() ||
94 particle == G4AntiNeutrinoMu::AntiNeutrinoMuDefinition() ||
95 particle == G4AntiNeutrinoTau::AntiNeutrinoTauDefinition()) {
100 G4int parentID = track->GetParentID();
108 return classification;
111 //_____________________________________________________________________________
112 void AliStackingAction::NewStage()
114 // Called by G4 kernel at the new stage of stacking.
120 G4cout << "AliStackingAction::NewStage " << fStage
121 << " has been started." << G4endl;
124 G4int nofUrgent = stackManager->GetNUrgentTrack();
127 G4int nofPrimary = fPrimaryStack->GetNTrack();
130 G4StackedTrack* stackedTrack
131 = fPrimaryStack->PopFromStack();
132 G4Track* primaryTrack
133 = stackedTrack->GetTrack();
135 stackManager->PushOneTrack(primaryTrack);
140 //_____________________________________________________________________________
141 void AliStackingAction::PrepareNewEvent()
143 // Called by G4 kernel at the beginning of event.
147 //stackManager->ClearPostponeStack();
148 stackManager->ResetPostponeStack();
149 fTrackingAction = AliTrackingAction::Instance();
151 fSavePrimaries = fTrackingAction->GetSavePrimaries();
153 fSavePrimaries = false;