1 /* $Id: AliTriggerTask.cxx 35782 2009-10-22 11:54:31Z jgrosseo $ */
3 #include "AliTriggerTask.h"
13 #include <AliESDEvent.h>
14 #include <AliHeader.h>
15 #include <AliAnalysisManager.h>
16 #include <AliESDInputHandler.h>
17 #include <AliESDHeader.h>
19 ClassImp(AliTriggerTask)
21 AliTriggerTask::AliTriggerTask(const char* opt) :
22 AliAnalysisTask("AliTriggerTask", ""),
33 // Constructor. Initialization of pointers
36 // Define input and output slots here
37 DefineInput(0, TChain::Class());
38 DefineOutput(0, TList::Class());
42 static AliPWG0Helper::Trigger triggerList[] = { AliPWG0Helper::kAcceptAll, AliPWG0Helper::kMB1, AliPWG0Helper::kMB2, AliPWG0Helper::kMB3, AliPWG0Helper::kSPDGFO, AliPWG0Helper::kV0A, AliPWG0Helper::kV0C, AliPWG0Helper::kZDC, AliPWG0Helper::kZDCA, AliPWG0Helper::kZDCC };
43 fTriggerList = triggerList;
45 fStats = new TH1*[fNTriggers];
47 AliLog::SetClassDebugLevel("AliTriggerTask", AliLog::kWarning);
50 AliTriggerTask::~AliTriggerTask()
56 // histograms are in the output list and deleted when the output
57 // list is deleted by the TSelector dtor
65 //________________________________________________________________________
66 void AliTriggerTask::ConnectInputData(Option_t *)
71 Printf("AliTriggerTask::ConnectInputData called");
73 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
76 Printf("ERROR: Could not get ESDInputHandler");
78 fESD = esdH->GetEvent();
80 TString branches("AliESDHeader Vertex AliMultiplicity ALIESDVZERO ALIESDZDC FMD");
82 // Enable only the needed branches
83 esdH->SetActiveBranches(branches);
87 void AliTriggerTask::CreateOutputObjects()
89 // create result objects and add to output list
91 Printf("AliTriggerTask::CreateOutputObjects");
96 if (fStartTime == fEndTime)
97 AliWarning("Start and endtime not set. Automatic binning will be used. This does not work in parallel systems");
100 if (fEndTime - fStartTime > 0)
101 nBins = fEndTime - fStartTime;
102 for (Int_t i=0; i<fNTriggers; i++)
104 fStats[i] = new TH1F(Form("fStats_%d", i), Form("%s;time;counts", AliPWG0Helper::GetTriggerName(fTriggerList[i])), nBins, 0, fEndTime - fStartTime);
105 fOutput->Add(fStats[i]);
109 void AliTriggerTask::Exec(Option_t*)
113 // post the data already here
114 PostData(0, fOutput);
118 AliError("ESD branch not available");
122 // check event type (should be PHYSICS = 7)
123 AliESDHeader* esdHeader = fESD->GetHeader();
126 Printf("ERROR: esdHeader could not be retrieved");
130 UInt_t eventType = esdHeader->GetEventType();
133 Printf("Skipping event because it is of type %d", eventType);
137 //Printf("Trigger classes: %s:", fESD->GetFiredTriggerClasses().Data());
139 UInt_t timeStamp = fESD->GetTimeStamp() - fStartTime;
140 //Printf("%d", timeStamp);
142 for (Int_t i = 0; i < fNTriggers; i++)
144 Bool_t triggered = AliPWG0Helper::IsEventTriggered(fESD, (AliPWG0Helper::Trigger) (fTriggerList[i] | AliPWG0Helper::kOfflineFlag));
146 fStats[i]->Fill(timeStamp);
147 //Printf("%s: %d", AliPWG0Helper::GetTriggerName(fTriggerList[i]), triggered);
151 void AliTriggerTask::Terminate(Option_t *)
153 // The Terminate() function is the last function to be called during
154 // a query. It always runs on the client, it can be used to present
155 // the results graphically or save the results to file.
157 fOutput = dynamic_cast<TList*> (GetOutputData(0));
159 Printf("ERROR: fOutput not available");
163 for (Int_t i=0; i<fNTriggers; i++)
164 fStats[i] = dynamic_cast<TH1*> (fOutput->FindObject(Form("fStats_%d", i)));
167 TFile* fout = new TFile("trigger.root", "RECREATE");
169 for (Int_t i=0; i<fNTriggers; i++)
176 Int_t nX = (Int_t) TMath::Sqrt(fNTriggers);
179 while (nX * nY < fNTriggers)
187 TCanvas* c = new TCanvas("c", "c", 800, 800);
190 Printf("+++++++++ TRIGGER STATS:");
192 for (Int_t i=0; i<fNTriggers; i++)
197 Printf("%s: %d triggers", AliPWG0Helper::GetTriggerName(fTriggerList[i]), (UInt_t) fStats[i]->Integral());
200 Printf("Writting result to trigger.root");