AliPhysics  5be3bab (5be3bab)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskCaloTrackCorrelation.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-1999, 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 #include <cstdlib>
17 
18 // --- Root ---
19 #include <TROOT.h>
20 #include <TInterpreter.h>
21 #include <TClonesArray.h>
22 //#include <Riostream.h>
23 //#include <TObjectTable.h>
24 
25 // --- Analysis ---
28 #include "AliCaloTrackReader.h"
29 #include "AliPDG.h"
30 #include "AliAnalysisManager.h"
31 #include "AliInputEventHandler.h"
32 #include "AliLog.h"
33 
37 
38 //________________________________________________________________________
40 //________________________________________________________________________
43  fAna(0x0),
44  fOutputContainer(0x0),
45  fConfigName(""),
46  fCuts(0x0),
47  fFirstEvent(0),
48  fLastEvent(0),
49  fStoreEventSummary(0)
50 {
51 }
52 
53 //________________________________________________________________________________________
55 //________________________________________________________________________________________
57  AliAnalysisTaskSE(name),
58  fAna(0x0),
59  fOutputContainer(0x0),
60  fConfigName(""),
61  fCuts(0x0),
62  fFirstEvent(0),
63  fLastEvent(0),
64  fStoreEventSummary(0)
65 {
66  DefineOutput(1, TList::Class());
67  DefineOutput(2, TList::Class()); // will contain cuts or local params
68 }
69 
70 //_________________________________________________________________________
72 //_________________________________________________________________________
74 {
75  if (AliAnalysisManager::GetAnalysisManager()->IsProofMode()) return;
76 
77  if (fOutputContainer)
78  {
79  fOutputContainer->Clear() ;
80  delete fOutputContainer ;
81  }
82 
83  if (fAna) delete fAna;
84 }
85 
86 //_________________________________________________________________
89 //_________________________________________________________________
91 {
92  AliDebug(1,"Begin");
93 
94  // Get list of aod arrays, add each aod array to analysis frame
95  TList * list = fAna->FillAndGetAODBranchList(); //Loop the analysis and create the list of branches
96 
97  AliDebug(1,Form("n AOD branches %d",list->GetEntries()));
98 
99  // Put the delta AODs in output file, std or delta
100  if((fAna->GetReader())->WriteDeltaAODToFile())
101  {
102  TString deltaAODName = (fAna->GetReader())->GetDeltaAODFileName();
103  for(Int_t iaod = 0; iaod < list->GetEntries(); iaod++)
104  {
105  TClonesArray * array = (TClonesArray*) list->At(iaod);
106  if(deltaAODName!="") AddAODBranch("TClonesArray", &array, deltaAODName);//Put it in DeltaAOD file
107  else AddAODBranch("TClonesArray", &array);//Put it in standard AOD file
108  }
109  }
110 
111  // Histograms container
112  OpenFile(1);
114 
115  AliDebug(1,Form("n histograms %d",fOutputContainer->GetEntries()));
116 
117  fOutputContainer->SetOwner(kTRUE);
118 
119  AliDebug(1,"End");
120 
121  PostData(1,fOutputContainer);
122 }
123 
124 //___________________________________________________
127 //___________________________________________________
129 {
130  Init();
131 }
132 
133 //______________________________________________
135 //______________________________________________
137 {
138  AliDebug(1,"Begin");
139 
140  if( fDebug >= 0 )
141  (AliAnalysisManager::GetAnalysisManager())->AddClassDebug(this->ClassName(),fDebug);
142 
143  // Call configuration file if specified
144 
145  if (fConfigName.Length())
146  {
147  AliInfo(Form("### Configuration file is %s.C ###", fConfigName.Data()));
148  gROOT->LoadMacro(fConfigName+".C");
149  fAna = (AliAnaCaloTrackCorrMaker*) gInterpreter->ProcessLine("ConfigAnalysis()");
150  }
151 
152  if(!fAna)
153  {
154  AliFatal("Analysis maker pointer not initialized, no analysis specified, STOP!");
155  return; // coverity
156  }
157 
158  // Add different generator particles to PDG Data Base
159  // to avoid problems when reading MC generator particles
160  AliPDG::AddParticlesToPdgDataBase();
161 
162  // Set in the reader the name of the task in case is needed
163  (fAna->GetReader())->SetTaskName(GetName());
164 
165  // Initialise analysis
166  fAna->Init();
167 
168  // Delta AOD
169  if((fAna->GetReader())->GetDeltaAODFileName()!="")
170  AliAnalysisManager::GetAnalysisManager()->RegisterExtraFile((fAna->GetReader())->GetDeltaAODFileName());
171 
172  // Selected Trigger
173  if(fAna->GetReader()->IsEventTriggerAtSEOn()) fAna->GetReader()->SetEventTriggerMask(GetCollisionCandidates());
174 
175  AliDebug(1,"End");
176 }
177 
178 //______________________________________________________________________
180 //______________________________________________________________________
182 {
183  if ( !fAna->IsEventProcessed() ) return;
184 
185  if ( (fLastEvent > 0 && Entry() > fLastEvent ) ||
186  (fFirstEvent > 0 && Entry() < fFirstEvent) ) return ;
187 
188  AliDebug(1,Form("Begin event %d", (Int_t) Entry()));
189 
190  // Get the type of data, check if type is correct
191  Int_t datatype = fAna->GetReader()->GetDataType();
192  if(datatype != AliCaloTrackReader::kESD && datatype != AliCaloTrackReader::kAOD &&
193  datatype != AliCaloTrackReader::kMC)
194  {
195  AliError("Wrong type of data");
196  return ;
197  }
198 
199  fAna->GetReader()->SetInputOutputMCEvent(InputEvent(), AODEvent(), MCEvent());
200 
201  // Process event
202  fAna->ProcessEvent((Int_t) Entry(), CurrentFileName());
203 
204  PostData(1, fOutputContainer);
205 
206  AliDebug(1,"End");
207 
208  //gObjectTable->Print();
209 }
210 
211 //_______________________________________________________________________
213 //_______________________________________________________________________
215 {
216  // Get merged histograms from the output container
217  // Propagate histagrams to maker
218  fAna->Terminate((TList*)GetOutputData(1));
219 
220  // Create cuts/param objects and publish to slot
222  fCuts ->SetOwner(kTRUE);
223 
224  // Post Data
225  PostData(2, fCuts);
226 }
227 
228 //__________________________________________________________
230 //__________________________________________________________
232 {
233  if ( !fStoreEventSummary ) return ;
234 
235  AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
236 
237  AliInputEventHandler *inputH = dynamic_cast<AliInputEventHandler*>(am->GetInputEventHandler());
238 
239  if (!inputH) return;
240 
241  TH2F *histStat = dynamic_cast<TH2F*>(inputH->GetStatistics());
242  TH2F *histBin0 = dynamic_cast<TH2F*>(inputH->GetStatistics("BIN0"));
243 
244  if ( histStat )
245  {
246  if ( histStat == histBin0 ) histBin0 = 0 ;
247 
248  histStat = (TH2F*) histStat->Clone(Form("%s_%s",histStat->GetName(),"CaloTrackCorr"));
249 
250  fOutputContainer->Add(histStat);
251  }
252 
253  if ( histBin0 )
254  {
255  histBin0 = (TH2F*) histBin0->Clone(Form("%s_%s",histBin0->GetName(),"CaloTrackCorr"));
256 
257  fOutputContainer->Add(histBin0);
258  }
259 }
260 
Definition: External.C:236
Int_t fFirstEvent
! Analyze all the events from this one, for testing.
virtual void SetInputOutputMCEvent(AliVEvent *, AliAODEvent *, AliMCEvent *)
TList * list
TDirectory file where lists per trigger are stored in train ouput.
Bool_t fStoreEventSummary
Store in output histograms list 2 histograms with event summary, off by default.
virtual void Init()
Analysis configuration, if provided, and initialization.
virtual void UserExec(Option_t *option)
Execute analysis for current event.
void SetEventTriggerMask(UInt_t evtTrig=AliVEvent::kAny)
virtual void Terminate(Option_t *option)
Terminate analysis. Do some plots (plotting not used so far).
int Int_t
Definition: External.C:63
void ProcessEvent(Int_t iEntry, const char *currentFileName)
virtual void FinishTaskOutput()
Put in the output some standard event summary histograms.
Main class conecting the CaloTrackCorrelations package and Analysis Frame.
Bool_t IsEventTriggerAtSEOn() const
const char Option_t
Definition: External.C:48
virtual Int_t GetDataType() const
AliCaloTrackReader * GetReader()
Int_t fLastEvent
! Analyze all the events until this one, for testing.
AliAnaCaloTrackCorrMaker * fAna
Pointer to the manager class.
TList * OpenFile(const char *fname)
Definition: DrawAnaELoss.C:65
Steering class of package CaloTrackCorrelartions.