]> git.uio.no Git - u/mrichter/AliRoot.git/blob - AliGeant4/AliEventAction.cxx
two levels of verbose introduced; AliHeader.h include added
[u/mrichter/AliRoot.git] / AliGeant4 / AliEventAction.cxx
1 // $Id$
2 // Category: event
3 //
4 // See the class description in the header file.
5
6 #include <G4Timer.hh>
7    // in order to avoid the odd dependency for the
8    // times system function this include must be the first
9
10 #include "AliEventAction.h"
11 #include "AliEventActionMessenger.h"
12 #include "AliTrackingAction.h"
13 #include "AliGlobals.h"
14 #include "AliRun.h"
15 #include "AliHeader.h"
16
17 #include <G4Event.hh>
18 #include <G4TrajectoryContainer.hh>
19 #include <G4Trajectory.hh>
20 #include <G4VVisManager.hh>
21 #include <G4UImanager.hh>
22
23 AliEventAction::AliEventAction()
24   : fVerboseLevel(1), 
25     fDrawFlag("CHARGED")
26 {
27 //
28   fMessenger = new AliEventActionMessenger(this);
29   fTimer = new G4Timer();
30 }
31
32 AliEventAction::AliEventAction(const AliEventAction& right) {
33 //
34   AliGlobals::Exception("AliEventAction is protected from copying.");
35 }
36
37 AliEventAction::~AliEventAction() {
38 //
39   delete fMessenger;
40   delete fTimer;
41 }
42
43 // operators
44
45 AliEventAction& AliEventAction::operator=(const AliEventAction &right)
46 {
47   // check assignement to self
48   if (this == &right) return *this;
49   
50   AliGlobals::Exception("AliEventAction is protected from assigning.");
51
52   return *this;
53 }
54
55 // private methods
56
57 void AliEventAction::DisplayEvent(const G4Event* event) const
58 {
59 // Draws trajectories.
60 // ---
61
62   // trajectories processing
63   G4TrajectoryContainer* trajectoryContainer 
64     = event->GetTrajectoryContainer();
65
66   G4int nofTrajectories = 0;
67   if (trajectoryContainer)
68   { nofTrajectories = trajectoryContainer->entries(); }
69   
70   if (fVerboseLevel>0 && nofTrajectories>0) {
71     G4cout << "    " << nofTrajectories; 
72     G4cout << " trajectories stored." << G4endl;
73   }  
74
75   G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance();
76   if(pVVisManager && nofTrajectories>0)
77   {
78     G4UImanager::GetUIpointer()->ApplyCommand("/vis~/draw/current");
79
80     for (G4int i=0; i<nofTrajectories; i++)
81     { 
82       G4VTrajectory* vtrajectory = (*(event->GetTrajectoryContainer()))[i];
83       G4Trajectory* trajectory = dynamic_cast<G4Trajectory*>(vtrajectory);
84       if (!trajectory) {
85         AliGlobals::Exception(
86           "AliEventAction::DisplayEvent: Unknown trajectory type.");
87       }
88       if ( (fDrawFlag == "ALL") ||
89           ((fDrawFlag == "CHARGED") && (trajectory->GetCharge() != 0.))){
90          trajectory->DrawTrajectory(50); 
91             // the argument number defines the size of the step points
92             // use 2000 to make step points well visible
93       } 
94     }      
95     G4UImanager::GetUIpointer()->ApplyCommand("/vis~/show/view");
96   }  
97 }
98
99 // public methods
100
101 void AliEventAction::BeginOfEventAction(const G4Event* event)
102 {
103 // Called by G4 kernel at the beginning of event.
104 // ---
105
106   G4int eventID = event->GetEventID();
107
108   // reset the tracks counters
109   AliTrackingAction::Instance()->PrepareNewEvent();   
110
111   if (fVerboseLevel>0)
112     G4cout << ">>> Event " << event->GetEventID() << G4endl;
113
114   fTimer->Start();
115 }
116
117 void AliEventAction::EndOfEventAction(const G4Event* event)
118 {
119 // Called by G4 kernel at the end of event.
120 // ---
121
122   // finish the last primary track of the current event
123   AliTrackingAction* trackingAction = AliTrackingAction::Instance();
124   trackingAction->FinishPrimaryTrack();   
125
126   // verbose output 
127   if (fVerboseLevel>0) {
128     G4cout << G4endl;
129     G4cout << ">>> End of Event " << event->GetEventID() << G4endl;
130   }
131
132   if (fVerboseLevel>1) {
133     //G4int nofPrimaryTracks = trackingAction->GetNofPrimaryTracks();
134     G4int nofPrimaryTracks = gAlice->GetHeader()->GetNprimary();
135     G4int nofSavedTracks = gAlice->GetNtrack();
136     G4int nofAllTracks = trackingAction->GetNofTracks();
137     
138     G4cout  << "    " << nofPrimaryTracks << 
139                " primary tracks processed." << G4endl;
140     G4cout  << "    " << nofSavedTracks << 
141                " tracks saved." << G4endl;
142     G4cout  << "    " << nofAllTracks << 
143                " all tracks processed." << G4endl;
144   }            
145
146   // display event
147   DisplayEvent(event);
148
149   // aliroot finish event
150   gAlice->FinishEvent();    
151
152   if (fVerboseLevel>1) {
153     // print time
154     fTimer->Stop();
155     G4cout << "Time of this event: " << *fTimer << G4endl;
156   }  
157  }