1 /**************************************************************************
2 * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 * Re-structured analysis task of the pt analysis on EMCal-triggered events:
17 * Analysis steps are moved to analysis components, which are grouped by a common
18 * event selection. The analysis task steers the event builder, runs each group,
19 * and collects the output of all groups.
21 * Author: Markus Fasel
23 #include "AliInputEventHandler.h"
24 #include "AliParticleContainer.h"
25 #include "AliJetContainer.h"
27 #include "AliEMCalTriggerBinningComponent.h"
28 #include "AliEMCalTriggerBinningFactory.h"
29 #include "AliEMCalTriggerEventData.h"
30 #include "AliEMCalTriggerTaskGroup.h"
31 #include "AliEMCalTriggerAnaTriggerDecision.h"
32 #include "AliEMCalHistoContainer.h"
33 #include "AliAnalysisTaskPtEMCalTriggerV1.h"
35 ClassImp(EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1)
37 namespace EMCalTriggerPtAnalysis {
39 //______________________________________________________________________________
40 AliAnalysisTaskPtEMCalTriggerV1::AliAnalysisTaskPtEMCalTriggerV1() :
41 AliAnalysisTaskEmcalJet(),
52 //______________________________________________________________________________
53 AliAnalysisTaskPtEMCalTriggerV1::AliAnalysisTaskPtEMCalTriggerV1(const char* name) :
54 AliAnalysisTaskEmcalJet(name, kTRUE),
63 fTaskGroups = new TObjArray;
64 fTaskGroups->SetOwner();
65 fBinning = new AliEMCalTriggerBinningComponent();
66 SetMakeGeneralHistograms(kTRUE);
69 //______________________________________________________________________________
70 AliAnalysisTaskPtEMCalTriggerV1::~AliAnalysisTaskPtEMCalTriggerV1() {
78 //______________________________________________________________________________
79 void AliAnalysisTaskPtEMCalTriggerV1::UserCreateOutputObjects() {
81 * Initialise all analysis components
83 AliAnalysisTaskEmcal::UserCreateOutputObjects();
84 SetCaloTriggerPatchInfoName("EmcalTriggers");
86 AliEMCalTriggerBinningFactory binmaker;
87 binmaker.Create(fBinning);
89 TIter groupIter(fTaskGroups);
90 AliEMCalTriggerTaskGroup *mygroup(NULL);
91 TList *outputList = new TList;
92 outputList->SetName(Form("histos%s", GetName()));
93 while((mygroup = dynamic_cast<AliEMCalTriggerTaskGroup *>(groupIter()))){
94 mygroup->SetGlobalBinning(fBinning);
95 TList *ltmp = mygroup->InitialiseAnalysisComponents();
96 // Collect output list and append it to the global output list
99 while((hist = listIter())) outputList->Add(hist);
101 fOutput->Add(outputList);
102 PostData(1, fOutput);
106 //______________________________________________________________________________
107 Bool_t AliAnalysisTaskPtEMCalTriggerV1::Run() {
110 * 1st build the event data shared among the tasks
111 * 2nd loop over task groups and run them
113 AliEMCalTriggerEventData *event = BuildEvent();
114 AliEMCalTriggerAnaTriggerDecision triggerDecision;
115 triggerDecision.Create(event);
116 triggerDecision.SetIsMinBias(fInputHandler->IsEventSelected() & AliVEvent::kINT7);
117 TIter groupIter(fTaskGroups);
118 AliEMCalTriggerTaskGroup *mygroup(NULL);
119 while((mygroup = dynamic_cast<AliEMCalTriggerTaskGroup *>(groupIter()))){
120 mygroup->SetTriggerDecision(&triggerDecision);
121 mygroup->Process(event);
126 PostData(1, fOutput);
130 //______________________________________________________________________________
131 void AliAnalysisTaskPtEMCalTriggerV1::SetBinning(const char* dimname, int nbins, double* binning) {
133 * Set binning for a give dimension
135 * @param dimname: name of the axis
136 * @param nbins: number of bins
137 * @param binning: the bin limits
139 fBinning->SetBinning(dimname, nbins, binning);
142 //______________________________________________________________________________
143 void AliAnalysisTaskPtEMCalTriggerV1::SetBinning(const char* dimname, const TArrayD &binning) {
145 * Set binning for a give dimension
147 * @param binning: the bin limits
149 fBinning->SetBinning(dimname, binning);
152 //______________________________________________________________________________
153 AliEMCalTriggerEventData* AliAnalysisTaskPtEMCalTriggerV1::BuildEvent() const {
155 * Build event structure. Take the information about the different containers
156 * from the base analysis task.
158 * @return: the resulting event structure
160 AliEMCalTriggerEventData *eventstruct = new AliEMCalTriggerEventData;
161 eventstruct->SetRecEvent(fInputEvent);
162 eventstruct->SetMCEvent(fMCEvent);
163 eventstruct->SetTriggerPatchContainer(fTriggerPatchInfo);
164 eventstruct->SetClusterContainer(fCaloClusters);
165 eventstruct->SetTrackContainer(fTracks);
166 if(fMCJetContainer.Length()){
167 AliJetContainer *jcmc = dynamic_cast<AliJetContainer *>(fJetCollArray.FindObject(fMCJetContainer.Data()));
168 eventstruct->SetParticleContainer(jcmc->GetParticleContainer()->GetArray());
169 eventstruct->SetMCJetContainer(jcmc);
171 if(fDataJetContainer.Length()){
172 AliJetContainer *jcdat = dynamic_cast<AliJetContainer *>(fJetCollArray.FindObject(fDataJetContainer.Data()));
173 eventstruct->SetDataJetContainer(jcdat);
178 //______________________________________________________________________________
179 void AliAnalysisTaskPtEMCalTriggerV1::AddAnalysisGroup(AliEMCalTriggerTaskGroup *taskGroup) {
181 * Add group of analysis components to the task
183 * @param taskGroup: Group of analysis components
185 fTaskGroups->Add(taskGroup);
188 } /* namespace EMCalTriggerPtAnalysis */