]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/Tracks/AliAnalysisTaskPtEMCalTriggerV1.cxx
A few more fixes, mainly dealing with the track analysis component
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / Tracks / AliAnalysisTaskPtEMCalTriggerV1.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15 /*
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.
20  *
21  *   Author: Markus Fasel
22  */
23 #include "AliInputEventHandler.h"
24 #include "AliParticleContainer.h"
25 #include "AliJetContainer.h"
26
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"
34
35 ClassImp(EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1)
36
37 namespace EMCalTriggerPtAnalysis {
38
39 //______________________________________________________________________________
40 AliAnalysisTaskPtEMCalTriggerV1::AliAnalysisTaskPtEMCalTriggerV1() :
41     AliAnalysisTaskEmcalJet(),
42     fTaskGroups(NULL),
43     fBinning(NULL),
44     fMCJetContainer(),
45     fDataJetContainer()
46 {
47   /*
48    * Dummy constructor
49    */
50 }
51
52 //______________________________________________________________________________
53 AliAnalysisTaskPtEMCalTriggerV1::AliAnalysisTaskPtEMCalTriggerV1(const char* name) :
54     AliAnalysisTaskEmcalJet(name, kTRUE),
55     fTaskGroups(NULL),
56     fBinning(NULL),
57     fMCJetContainer(),
58     fDataJetContainer()
59 {
60   /*
61    * Main Constructor
62    */
63   fTaskGroups = new TObjArray;
64   fTaskGroups->SetOwner();
65   fBinning = new AliEMCalTriggerBinningComponent();
66   SetMakeGeneralHistograms(kTRUE);
67 }
68
69 //______________________________________________________________________________
70 AliAnalysisTaskPtEMCalTriggerV1::~AliAnalysisTaskPtEMCalTriggerV1() {
71   /*
72    * Destructor
73    */
74   delete fTaskGroups;
75   delete fBinning;
76 }
77
78 //______________________________________________________________________________
79 void AliAnalysisTaskPtEMCalTriggerV1::UserCreateOutputObjects() {
80   /*
81    * Initialise all analysis components
82    */
83   AliAnalysisTaskEmcal::UserCreateOutputObjects();
84   SetCaloTriggerPatchInfoName("EmcalTriggers");
85
86   AliEMCalTriggerBinningFactory binmaker;
87   binmaker.Create(fBinning);
88
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
97     TIter listIter(ltmp);
98     TObject *hist(NULL);
99     while((hist = listIter())) outputList->Add(hist);
100   }
101   fOutput->Add(outputList);
102   PostData(1, fOutput);
103
104 }
105
106 //______________________________________________________________________________
107 Bool_t AliAnalysisTaskPtEMCalTriggerV1::Run() {
108   /*
109    * Run the analysis:
110    * 1st build the event data shared among the tasks
111    * 2nd loop over task groups and run them
112    */
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);
122   }
123
124   delete event;
125
126   PostData(1, fOutput);
127   return kTRUE;
128 }
129
130 //______________________________________________________________________________
131 void AliAnalysisTaskPtEMCalTriggerV1::SetBinning(const char* dimname, int nbins, double* binning) {
132   /*
133    * Set binning for a give dimension
134    *
135    * @param dimname: name of the axis
136    * @param nbins: number of bins
137    * @param binning: the bin limits
138    */
139   fBinning->SetBinning(dimname, nbins, binning);
140 }
141
142 //______________________________________________________________________________
143 void AliAnalysisTaskPtEMCalTriggerV1::SetBinning(const char* dimname, const TArrayD &binning) {
144   /*
145    * Set binning for a give dimension
146    *
147    * @param binning: the bin limits
148    */
149   fBinning->SetBinning(dimname, binning);
150 }
151
152 //______________________________________________________________________________
153 AliEMCalTriggerEventData* AliAnalysisTaskPtEMCalTriggerV1::BuildEvent() const {
154   /*
155    * Build event structure. Take the information about the different containers
156    * from the base analysis task.
157    *
158    * @return: the resulting event structure
159    */
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);
170   }
171   if(fDataJetContainer.Length()){
172     AliJetContainer *jcdat = dynamic_cast<AliJetContainer *>(fJetCollArray.FindObject(fDataJetContainer.Data()));
173     eventstruct->SetDataJetContainer(jcdat);
174   }
175   return eventstruct;
176 }
177
178 //______________________________________________________________________________
179 void AliAnalysisTaskPtEMCalTriggerV1::AddAnalysisGroup(AliEMCalTriggerTaskGroup *taskGroup) {
180   /*
181    * Add group of analysis components to the task
182    *
183    * @param taskGroup: Group of analysis components
184    */
185   fTaskGroups->Add(taskGroup);
186 }
187
188 } /* namespace EMCalTriggerPtAnalysis */