3 // Emcal physics selection task.
11 #include "AliAnalysisDataContainer.h"
12 #include "AliAnalysisDataSlot.h"
13 #include "AliAnalysisManager.h"
14 #include "AliEmcalPhysicsSelection.h"
15 #include "AliEmcalPhysicsSelectionTask.h"
16 #include "AliESDEvent.h"
17 #include "AliInputEventHandler.h"
20 ClassImp(AliEmcalPhysicsSelectionTask)
22 //__________________________________________________________________________________________________
23 AliEmcalPhysicsSelectionTask::AliEmcalPhysicsSelectionTask() :
24 AliPhysicsSelectionTask(),
31 // Default constructor.
34 //__________________________________________________________________________________________________
35 AliEmcalPhysicsSelectionTask::AliEmcalPhysicsSelectionTask(const char* opt) :
36 AliPhysicsSelectionTask(),
46 fPhysicsSelection = new AliEmcalPhysicsSelection;
48 AliInputEventHandler* handler = dynamic_cast<AliInputEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
50 handler->SetEventSelection(fPhysicsSelection);
51 AliInfo("Physics Event Selection enabled.");
53 AliError("No input event handler connected to analysis manager. No Physics Event Selection.");
55 // Define input and output slots here
56 DefineOutput(1, TList::Class());
57 fBranchNames = "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.,AliESDVZERO.,"
58 "AliESDZDC.,SPDVertex.,PrimaryVertex.,TPCVertex.,Tracks,SPDPileupVertices";
60 AliLog::SetClassDebugLevel("AliEmcalPhysicsSelectionTask", AliLog::kWarning);
63 //__________________________________________________________________________________________________
64 void AliEmcalPhysicsSelectionTask::UserCreateOutputObjects()
66 // User create outputs.
68 AliPhysicsSelectionTask::UserCreateOutputObjects();
69 fHAcc = new TH1D("hEvCount",";0=rej/1=acc;#",2,-0.5,1.5);
71 fHEvtTypes = new TH1D("hEvtTypes",";#",12,-0.5,11.5);
72 fHEvtTypes->GetXaxis()->SetBinLabel(1, "All");
73 fHEvtTypes->GetXaxis()->SetBinLabel(2, "MB");
74 fHEvtTypes->GetXaxis()->SetBinLabel(3, "FO");
75 fHEvtTypes->GetXaxis()->SetBinLabel(4, "SC");
76 fHEvtTypes->GetXaxis()->SetBinLabel(5, "CE");
77 fHEvtTypes->GetXaxis()->SetBinLabel(6, "EMC");
78 fHEvtTypes->GetXaxis()->SetBinLabel(7, "EJE");
79 fHEvtTypes->GetXaxis()->SetBinLabel(8, "EGA");
80 fHEvtTypes->GetXaxis()->SetBinLabel(9, "Good");
81 fHEvtTypes->GetXaxis()->SetBinLabel(10, "HC");
82 fHEvtTypes->GetXaxis()->SetBinLabel(11, "HT");
83 fHEvtTypes->GetXaxis()->SetBinLabel(12, "LED");
84 fOutput->Add(fHEvtTypes);
85 if (!fDoWriteHistos) {
86 fOutput->Remove(fPhysicsSelection);
90 //__________________________________________________________________________________________________
91 void AliEmcalPhysicsSelectionTask::UserExec(const Option_t *opt)
95 AliPhysicsSelectionTask::UserExec(opt);
99 UInt_t res = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
107 AliEmcalPhysicsSelection *ps=static_cast<AliEmcalPhysicsSelection *>(fPhysicsSelection);
109 if (res&AliVEvent::kAnyINT)
111 if (ps->IsFastOnly())
113 if (res&AliVEvent::kCentral)
115 if (res&AliVEvent::kSemiCentral)
117 if ((res&AliVEvent::kEMC1) || (res&AliVEvent::kEMC7))
119 if (res&AliVEvent::kEMCEJE)
121 if (res&AliVEvent::kEMCEGA)
123 if (res&AliEmcalPhysicsSelection::kEmcalOk)
125 if (res&AliEmcalPhysicsSelection::kEmcalHC)
127 if (res&AliEmcalPhysicsSelection::kEmcalHT)
128 fHEvtTypes->Fill(10);
129 if (ps->IsLedEvent())
130 fHEvtTypes->Fill(11);
133 //__________________________________________________________________________________________________
134 void AliEmcalPhysicsSelectionTask::Terminate(Option_t *)
136 // The Terminate() function is the last function to be called during
137 // a query. It always runs on the client, it can be used to present
138 // the results graphically or save the results to file.
140 AliInfo(Form("Called %d times, accepted %d events", fNCalled, fNAccepted));
145 fOutput = dynamic_cast<TList*> (GetOutputData(1));
147 AliError("fOutput not available");
151 AliAnalysisDataSlot *oslot = GetOutputSlot(1);
155 AliAnalysisDataContainer *ocont = oslot->GetContainer();
159 TFile *file = OpenFile(1);
163 TDirectory::TContext context(file);
164 if (AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
165 fPhysicsSelection = dynamic_cast<AliPhysicsSelection*> (fOutput->FindObject("AliPhysicsSelection"));
167 if (fPhysicsSelection) {
168 //fPhysicsSelection->Print();
169 fPhysicsSelection->SaveHistograms(Form("%sHists",ocont->GetName()));
170 AliInfo(Form("Writing result to %s",file->GetName()));
172 fOutput->Remove(fPhysicsSelection);