]> git.uio.no Git - u/mrichter/AliRoot.git/blob - AliGeant4/AliStackingAction.cxx
Changes to read also Altro like data.
[u/mrichter/AliRoot.git] / AliGeant4 / AliStackingAction.cxx
1 // $Id$
2 // Category: event
3 //
4 // Author: I. Hrivnacova
5 //
6 // Class AliStackingAction
7 // -----------------------
8 // See the class description in the header file.
9
10 #include "AliStackingAction.h"
11 #include "AliTrackingAction.h"
12 #include "AliGlobals.h"
13
14 #include <G4Track.hh>
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>
24
25 //_____________________________________________________________________________
26 AliStackingAction::AliStackingAction()
27   : AliVerbose("stackingAction"),
28     fStage(0), 
29     fSavePrimaries(true),
30     fTrackingAction(0)
31 {
32 // 
33   fPrimaryStack = new G4TrackStack();
34 }
35
36 //_____________________________________________________________________________
37 AliStackingAction::AliStackingAction(const AliStackingAction& right) 
38   : AliVerbose("stackingAction") {
39 //
40   AliGlobals::Exception("AliStackingAction is protected from copying.");
41 }
42
43 //_____________________________________________________________________________
44 AliStackingAction::~AliStackingAction() {
45 // 
46   delete fPrimaryStack;
47 }
48
49 // operators
50
51 //_____________________________________________________________________________
52 AliStackingAction& 
53 AliStackingAction::operator=(const AliStackingAction &right)
54 {
55   // check assignement to self
56   if (this == &right) return *this;
57   
58   AliGlobals::Exception("AliStackingAction is protected from assigning.");
59
60   return *this;
61 }
62
63 // public methods
64
65 //_____________________________________________________________________________
66 G4ClassificationOfNewTrack 
67 AliStackingAction::ClassifyNewTrack(const G4Track* track)
68 {
69 // Classifies the new track.
70 // ---
71
72   G4ClassificationOfNewTrack classification;
73   if (fStage == 0) { 
74     // move all primaries to PrimaryStack
75     G4Track* nonconstTrack = (G4Track*)track;
76     G4StackedTrack* newTrack = new G4StackedTrack(nonconstTrack);
77     fPrimaryStack->PushToStack(newTrack);  
78     classification = fPostpone;
79
80     // save primary particle info
81     // (secondary particles are stored 
82     //  by AlTrackingAction::PreUserTrackingAction() method)
83     if (fSavePrimaries)
84       fTrackingAction->SaveTrack(track);
85   }  
86   else {
87      // exclude neutrinos
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()) {
95
96         return fKill;    
97      }  
98
99      G4int parentID = track->GetParentID();
100      if (parentID ==0) { 
101         return fUrgent; 
102      }
103      else { 
104         return fWaiting; 
105      }
106   }
107   return classification;
108 }
109
110 //_____________________________________________________________________________
111 void AliStackingAction::NewStage()
112 {
113 // Called by G4 kernel at the new stage of stacking.
114 // ---
115
116   fStage++;
117   
118   if (VerboseLevel() > 1) {
119     G4cout << "AliStackingAction::NewStage " << fStage 
120            << " has been started." << G4endl;
121   }
122
123   G4int nofUrgent = stackManager->GetNUrgentTrack();
124   if (nofUrgent == 0)
125   {
126     G4int nofPrimary = fPrimaryStack->GetNTrack();
127     if (nofPrimary>0)
128     { 
129        G4StackedTrack* stackedTrack
130          = fPrimaryStack->PopFromStack();
131        G4Track* primaryTrack
132          = stackedTrack->GetTrack();
133        delete stackedTrack;
134        stackManager->PushOneTrack(primaryTrack);
135      }
136   }
137 }
138     
139 //_____________________________________________________________________________
140 void AliStackingAction::PrepareNewEvent()
141 {
142 // Called by G4 kernel at the beginning of event.
143 // ---
144
145   fStage = 0;
146   //stackManager->ClearPostponeStack();
147   stackManager->ResetPostponeStack();
148   fTrackingAction = AliTrackingAction::Instance();
149   if (fTrackingAction)
150     fSavePrimaries = fTrackingAction->GetSavePrimaries();
151   else   
152     fSavePrimaries = false;
153 }
154
155