3 // Physics selection task.
12 #include "AliAnalysisDataContainer.h"
13 #include "AliAnalysisDataSlot.h"
14 #include "AliAnalysisManager.h"
15 #include "AliEmcalPhysicsSelection.h"
16 #include "AliEmcalPhysicsSelectionTask.h"
17 #include "AliESDEvent.h"
18 #include "AliInputEventHandler.h"
21 ClassImp(AliEmcalPhysicsSelectionTask)
23 //__________________________________________________________________________________________________
24 AliEmcalPhysicsSelectionTask::AliEmcalPhysicsSelectionTask() :
25 AliPhysicsSelectionTask(),
32 // Default constructor.
35 //__________________________________________________________________________________________________
36 AliEmcalPhysicsSelectionTask::AliEmcalPhysicsSelectionTask(const char* opt) :
37 AliPhysicsSelectionTask(),
47 fPhysicsSelection = new AliEmcalPhysicsSelection;
49 AliInputEventHandler* handler = dynamic_cast<AliInputEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
51 handler->SetEventSelection(fPhysicsSelection);
52 AliInfo("Physics Event Selection enabled.");
54 AliError("No input event handler connected to analysis manager. No Physics Event Selection.");
56 // Define input and output slots here
57 DefineOutput(1, TList::Class());
58 fBranchNames = "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.,AliESDVZERO.,"
59 "AliESDZDC.,SPDVertex.,PrimaryVertex.,TPCVertex.,Tracks,SPDPileupVertices";
61 AliLog::SetClassDebugLevel("AliEmcalPhysicsSelectionTask", AliLog::kWarning);
64 //__________________________________________________________________________________________________
65 void AliEmcalPhysicsSelectionTask::UserCreateOutputObjects()
67 // User create outputs.
69 AliPhysicsSelectionTask::UserCreateOutputObjects();
70 fHAcc = new TH1D("hEvCount",";0=rej/1=acc;#",2,-0.5,1.5);
72 fHEvtTypes = new TH1D("hEvtTypes",";#",10,-0.5,9.5);
73 fHEvtTypes->GetXaxis()->SetBinLabel(1,"All");
74 fHEvtTypes->GetXaxis()->SetBinLabel(2,"MB");
75 fHEvtTypes->GetXaxis()->SetBinLabel(3,"FO");
76 fHEvtTypes->GetXaxis()->SetBinLabel(4,"EMC");
77 fHEvtTypes->GetXaxis()->SetBinLabel(5,"EJE");
78 fHEvtTypes->GetXaxis()->SetBinLabel(6,"EGA");
79 fHEvtTypes->GetXaxis()->SetBinLabel(7,"Good");
80 fHEvtTypes->GetXaxis()->SetBinLabel(8,"HC");
81 fHEvtTypes->GetXaxis()->SetBinLabel(9,"HT");
82 fHEvtTypes->GetXaxis()->SetBinLabel(10,"LED");
83 fOutput->Add(fHEvtTypes);
84 if (!fDoWriteHistos) {
85 fOutput->Remove(fPhysicsSelection);
89 //__________________________________________________________________________________________________
90 void AliEmcalPhysicsSelectionTask::UserExec(const Option_t *opt)
94 AliESDEvent *esdEv = dynamic_cast<AliESDEvent*>(InputEvent());
96 AliError("Task works only on ESD events, returning");
100 AliPhysicsSelectionTask::UserExec(opt);
104 UInt_t res = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
112 AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
113 am->LoadBranch("AliESDHeader.");
114 AliESDHeader *header = esdEv->GetHeader();
115 TString title(header->GetTitle());
116 if (title.Length()>0) {
117 UInt_t offline = header->GetUniqueID();
119 AliWarning(Form("Stored offline trigger not equal computed: %ud %ud", offline, res));
123 AliEmcalPhysicsSelection *ps=static_cast<AliEmcalPhysicsSelection *>(fPhysicsSelection);
125 if (res&AliVEvent::kAnyINT)
127 if (ps->IsFastOnly())
129 if ((res&AliVEvent::kEMC1) || (res&AliVEvent::kEMC7))
131 if (res&AliVEvent::kEMCEJE)
133 if (res&AliVEvent::kEMCEGA)
135 if (ps->IsGoodEvent())
137 if (res&AliEmcalPhysicsSelection::kEmcalHC)
139 if (res&AliEmcalPhysicsSelection::kEmcalHT)
141 if (ps->IsLedEvent())
145 //__________________________________________________________________________________________________
146 void AliEmcalPhysicsSelectionTask::Terminate(Option_t *)
148 // The Terminate() function is the last function to be called during
149 // a query. It always runs on the client, it can be used to present
150 // the results graphically or save the results to file.
152 AliInfo(Form("Called %d times, accepted %d events", fNCalled, fNAccepted));
157 fOutput = dynamic_cast<TList*> (GetOutputData(1));
159 AliError("fOutput not available");
163 AliAnalysisDataSlot *oslot = GetOutputSlot(1);
167 AliAnalysisDataContainer *ocont = oslot->GetContainer();
171 TFile *file = OpenFile(1);
175 TDirectory::TContext context(file);
176 if (AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
177 fPhysicsSelection = dynamic_cast<AliPhysicsSelection*> (fOutput->FindObject("AliPhysicsSelection"));
179 if (fPhysicsSelection) {
180 //fPhysicsSelection->Print();
181 fPhysicsSelection->SaveHistograms(Form("%sHists",ocont->GetName()));
182 AliInfo(Form("Writing result to %s",file->GetName()));
184 fOutput->Remove(fPhysicsSelection);