4 // See the class description in the header file.
6 #include "AliEventAction.h"
7 #include "AliEventActionMessenger.h"
9 #include "AliTrackingAction.h"
10 #include "AliSensitiveDetector.h"
11 #include "AliGlobals.h"
13 #include "TG4GeometryManager.h"
16 #include <G4TrajectoryContainer.hh>
17 #include <G4Trajectory.hh>
18 #include <G4VVisManager.hh>
19 #include <G4UImanager.hh>
20 #include <G4LogicalVolumeStore.hh>
21 #include <G4VSensitiveDetector.hh>
23 AliEventAction::AliEventAction()
28 fMessenger = new AliEventActionMessenger(this);
31 AliEventAction::AliEventAction(const AliEventAction& right) {
33 AliGlobals::Exception("AliEventAction is protected from copying.");
36 AliEventAction::~AliEventAction() {
43 AliEventAction& AliEventAction::operator=(const AliEventAction &right)
45 // check assignement to self
46 if (this == &right) return *this;
48 AliGlobals::Exception("AliEventAction is protected from assigning.");
55 void AliEventAction::DisplayEvent(const G4Event* event) const
57 // Draws trajectories.
61 // trajectories processing
62 G4TrajectoryContainer* trajectoryContainer
63 = event->GetTrajectoryContainer();
65 G4int nofTrajectories = 0;
66 if (trajectoryContainer)
67 { nofTrajectories = trajectoryContainer->entries(); }
69 if (fVerboseLevel>0) {
70 G4cout << " " << nofTrajectories;
71 G4cout << " trajectories stored." << endl;
74 G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance();
75 if(pVVisManager && nofTrajectories>0)
77 G4UImanager::GetUIpointer()->ApplyCommand("/vis~/draw/current");
79 for (G4int i=0; i<nofTrajectories; i++)
81 G4VTrajectory* vtrajectory = (*(event->GetTrajectoryContainer()))[i];
82 G4Trajectory* trajectory = dynamic_cast<G4Trajectory*>(vtrajectory);
84 AliGlobals::Exception(
85 "AliEventAction::DisplayEvent: Unknown trajectory type.");
87 else if ( (fDrawFlag == "ALL") ||
88 ((fDrawFlag == "CHARGED") && (trajectory->GetCharge() != 0.))){
89 trajectory->DrawTrajectory(2000);
92 G4UImanager::GetUIpointer()->ApplyCommand("/vis~/show/view");
98 void AliEventAction::BeginOfEventAction(const G4Event* event)
100 // Called by G4 kernel at the beginning of event.
103 G4int eventID = event->GetEventID();
105 // reset the counters (primary tracks, saved tracks)
106 AliTrackingAction* trackingAction
107 = AliTrackingAction::Instance();
108 trackingAction->PrepareNewEvent();
111 G4cout << ">>> Event " << event->GetEventID() << endl;
114 void AliEventAction::EndOfEventAction(const G4Event* event)
116 // Called by G4 kernel at the end of event.
119 // save the last primary track store of
121 AliTrackingAction* trackingAction
122 = AliTrackingAction::Instance();
123 trackingAction->SaveAndDestroyTrack();
125 if (fVerboseLevel>0) {
126 G4int nofPrimaryTracks = trackingAction->GetNofPrimaryTracks();
127 G4cout << " " << nofPrimaryTracks <<
128 " primary tracks processed." << endl;
135 // store event header data
136 gAlice->GetHeader()->SetEvent(event->GetEventID());
137 gAlice->GetHeader()->SetNvertex(event->GetNumberOfPrimaryVertex());
138 gAlice->GetHeader()->SetNprimary(trackingAction->GetNofPrimaryTracks());
139 gAlice->GetHeader()->SetNtrack(trackingAction->GetNofSavedTracks());
141 gAlice->FinishEvent();