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>
18 #include <AliTriggerAnalysis.h>
20 ClassImp(AliTriggerTask)
22 AliTriggerTask::AliTriggerTask(const char* opt) :
23 AliAnalysisTask("AliTriggerTask", ""),
35 // Constructor. Initialization of pointers
38 // Define input and output slots here
39 DefineInput(0, TChain::Class());
40 DefineOutput(0, TList::Class());
44 static AliTriggerAnalysis::Trigger triggerList[] = { AliTriggerAnalysis::kAcceptAll, AliTriggerAnalysis::kFPANY, AliTriggerAnalysis::kMB1, AliTriggerAnalysis::kMB2, AliTriggerAnalysis::kMB3, AliTriggerAnalysis::kSPDGFO, AliTriggerAnalysis::kV0A, AliTriggerAnalysis::kV0C, AliTriggerAnalysis::kZDC, AliTriggerAnalysis::kZDCA, AliTriggerAnalysis::kZDCC, AliTriggerAnalysis::kFMDA, AliTriggerAnalysis::kFMDC };
45 fTriggerList = triggerList;
47 fStats = new TH1*[fNTriggers];
49 fTrigger = new AliTriggerAnalysis;
50 fTrigger->EnableHistograms();
52 AliLog::SetClassDebugLevel("AliTriggerTask", AliLog::kWarning);
55 AliTriggerTask::~AliTriggerTask()
61 // histograms are in the output list and deleted when the output
62 // list is deleted by the TSelector dtor
70 //________________________________________________________________________
71 void AliTriggerTask::ConnectInputData(Option_t *)
76 Printf("AliTriggerTask::ConnectInputData called");
78 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
81 Printf("ERROR: Could not get ESDInputHandler");
83 fESD = esdH->GetEvent();
85 TString branches("AliESDHeader Vertex AliMultiplicity ALIESDVZERO ALIESDZDC FMD");
87 // Enable only the needed branches
88 esdH->SetActiveBranches(branches);
92 void AliTriggerTask::CreateOutputObjects()
94 // create result objects and add to output list
96 Printf("AliTriggerTask::CreateOutputObjects");
101 if (fStartTime == fEndTime)
102 AliWarning("Start and endtime not set. Automatic binning will be used. This does not work in parallel systems");
105 if (fEndTime - fStartTime > 0)
106 nBins = fEndTime - fStartTime;
107 for (Int_t i=0; i<fNTriggers; i++)
109 fStats[i] = new TH1F(Form("fStats_%d", i), Form("%s;time;counts", AliTriggerAnalysis::GetTriggerName(fTriggerList[i])), nBins, 0, fEndTime - fStartTime);
110 fOutput->Add(fStats[i]);
113 fOutput->Add(fTrigger);
116 void AliTriggerTask::Exec(Option_t*)
120 // post the data already here
121 PostData(0, fOutput);
125 AliError("ESD branch not available");
129 // check event type (should be PHYSICS = 7)
130 AliESDHeader* esdHeader = fESD->GetHeader();
133 Printf("ERROR: esdHeader could not be retrieved");
137 UInt_t eventType = esdHeader->GetEventType();
140 Printf("Skipping event because it is of type %d", eventType);
144 //Printf("Trigger classes: %s:", fESD->GetFiredTriggerClasses().Data());
146 fTrigger->FillHistograms(fESD);
148 UInt_t timeStamp = fESD->GetTimeStamp() - fStartTime;
149 //Printf("%d", timeStamp);
151 for (Int_t i = 0; i < fNTriggers; i++)
153 Bool_t triggered = fTrigger->IsOfflineTriggerFired(fESD, fTriggerList[i]);
155 fStats[i]->Fill(timeStamp);
156 //Printf("%s: %d", AliTriggerAnalysis::GetTriggerName(fTriggerList[i]), triggered);
160 void AliTriggerTask::Terminate(Option_t *)
162 // The Terminate() function is the last function to be called during
163 // a query. It always runs on the client, it can be used to present
164 // the results graphically or save the results to file.
166 fOutput = dynamic_cast<TList*> (GetOutputData(0));
168 Printf("ERROR: fOutput not available");
172 for (Int_t i=0; i<fNTriggers; i++)
173 fStats[i] = dynamic_cast<TH1*> (fOutput->FindObject(Form("fStats_%d", i)));
174 fTrigger = dynamic_cast<AliTriggerAnalysis*> (fOutput->FindObject("AliTriggerAnalysis"));
177 TFile* fout = new TFile("trigger.root", "RECREATE");
179 for (Int_t i=0; i<fNTriggers; i++)
183 fTrigger->WriteHistograms();
188 Int_t nX = (Int_t) TMath::Sqrt(fNTriggers);
191 while (nX * nY < fNTriggers)
199 TCanvas* c = new TCanvas("c", "c", 800, 800);
202 Printf("+++++++++ TRIGGER STATS:");
206 base = (Int_t) fStats[0]->Integral();
208 Int_t length = fEndTime - fStartTime;
210 for (Int_t i=0; i<fNTriggers; i++)
215 Printf("%s: %d triggers | %f %% of all triggered | Rate: %f Hz", AliTriggerAnalysis::GetTriggerName(fTriggerList[i]), (UInt_t) fStats[i]->Integral(), 100.0 * fStats[i]->Integral() / base, (length > 0) ? (fStats[i]->Integral() / length) : -1);
218 Printf("Writting result to trigger.root");