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()
27 : AliVerbose("stackingAction"),
33 fPrimaryStack = new G4TrackStack();
36 //_____________________________________________________________________________
37 AliStackingAction::AliStackingAction(const AliStackingAction& right)
38 : AliVerbose("stackingAction") {
40 AliGlobals::Exception("AliStackingAction is protected from copying.");
43 //_____________________________________________________________________________
44 AliStackingAction::~AliStackingAction() {
51 //_____________________________________________________________________________
53 AliStackingAction::operator=(const AliStackingAction &right)
55 // check assignement to self
56 if (this == &right) return *this;
58 AliGlobals::Exception("AliStackingAction is protected from assigning.");
65 //_____________________________________________________________________________
66 G4ClassificationOfNewTrack
67 AliStackingAction::ClassifyNewTrack(const G4Track* track)
69 // Classifies the new track.
72 G4ClassificationOfNewTrack classification;
74 // move all primaries to PrimaryStack
75 G4Track* nonconstTrack = (G4Track*)track;
76 G4StackedTrack* newTrack = new G4StackedTrack(nonconstTrack);
77 fPrimaryStack->PushToStack(newTrack);
78 classification = fPostpone;
80 // save primary particle info
81 // (secondary particles are stored
82 // by AlTrackingAction::PreUserTrackingAction() method)
84 fTrackingAction->SaveTrack(track);
88 G4ParticleDefinition* particle = track->GetDefinition();
89 if( particle == G4NeutrinoE::NeutrinoEDefinition() ||
90 particle == G4NeutrinoMu::NeutrinoMuDefinition() ||
91 particle == G4NeutrinoTau::NeutrinoTauDefinition() ||
92 particle == G4AntiNeutrinoE::AntiNeutrinoEDefinition() ||
93 particle == G4AntiNeutrinoMu::AntiNeutrinoMuDefinition() ||
94 particle == G4AntiNeutrinoTau::AntiNeutrinoTauDefinition()) {
99 G4int parentID = track->GetParentID();
107 return classification;
110 //_____________________________________________________________________________
111 void AliStackingAction::NewStage()
113 // Called by G4 kernel at the new stage of stacking.
118 if (VerboseLevel() > 1) {
119 G4cout << "AliStackingAction::NewStage " << fStage
120 << " has been started." << G4endl;
123 G4int nofUrgent = stackManager->GetNUrgentTrack();
126 G4int nofPrimary = fPrimaryStack->GetNTrack();
129 G4StackedTrack* stackedTrack
130 = fPrimaryStack->PopFromStack();
131 G4Track* primaryTrack
132 = stackedTrack->GetTrack();
134 stackManager->PushOneTrack(primaryTrack);
139 //_____________________________________________________________________________
140 void AliStackingAction::PrepareNewEvent()
142 // Called by G4 kernel at the beginning of event.
146 //stackManager->ClearPostponeStack();
147 stackManager->ResetPostponeStack();
148 fTrackingAction = AliTrackingAction::Instance();
150 fSavePrimaries = fTrackingAction->GetSavePrimaries();
152 fSavePrimaries = false;