1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: Dmitri Peressounko (RRC KI) *
6 * Permission to use, copy, modify and distribute this software and its *
7 * documentation strictly for non-commercial purposes is hereby granted *
8 * without fee, provided that the above copyright notice appears in all *
9 * copies and that both the copyright notice and this permission notice *
10 * appear in the supporting documentation. The authors make no claims *
11 * about the suitability of this software for any purpose. It is *
12 * provided "as is" without express or implied warranty. *
13 **************************************************************************/
15 ////////////////////////////////////////////////
16 //---------------------------------------------
17 // Class used to do analysis on conversion + calorimeter pairs
18 // A lot of code cut-and-pasted from AliV0Reader and GammaConversion classes
20 //---------------------------------------------
21 ////////////////////////////////////////////////
29 #include "AliAnalysisManager.h"
30 #include "AliAnalysisTaskCaloConv.h"
33 #include "AliESDEvent.h"
34 #include "AliESDpid.h"
35 #include "AliESDtrackCuts.h"
36 #include "AliCFContainer.h" // for CF
37 #include "AliESDCaloCluster.h"
38 #include "AliPHOSGeoUtils.h"
39 #include "AliEMCALGeoUtils.h"
40 #include "AliCFContainer.h"
41 #include "AliMCEventHandler.h"
42 #include "AliMCEvent.h"
44 #include "AliKFParticle.h"
45 #include "AliKFVertex.h"
47 class AliESDInputHandler;
51 ClassImp(AliAnalysisTaskCaloConv)
54 AliAnalysisTaskCaloConv::AliAnalysisTaskCaloConv():
59 fOutputContainer(NULL),
60 fCFOutputContainer(NULL),
65 fTriggerCINT1B(kFALSE),
66 fMinOpeningAngleGhostCut(0.),
74 fnSigmaAboveElectronLine(5.),
75 fnSigmaBelowElectronLine(-3.),
76 fnSigmaAbovePionLine(0.),
77 fpnSigmaAbovePionLine(1.),
83 fchi2CutConversion(30.)
85 // Default constructor
87 for(Int_t i=0;i<nBin;i++){
93 AliAnalysisTaskCaloConv::AliAnalysisTaskCaloConv(const char* name):
94 AliAnalysisTaskSE(name),
98 fOutputContainer(NULL),
99 fCFOutputContainer(NULL),
104 fTriggerCINT1B(kFALSE),
105 fMinOpeningAngleGhostCut(0.),
113 fnSigmaAboveElectronLine(5.),
114 fnSigmaBelowElectronLine(-3.),
115 fnSigmaAbovePionLine(0.),
116 fpnSigmaAbovePionLine(1.),
122 fchi2CutConversion(30.)
124 // Common I/O in slot 0
125 DefineInput (0, TChain::Class());
126 DefineOutput(0, TTree::Class());
128 // Your private output
129 DefineOutput(1, TList::Class());
130 DefineOutput(2, TList::Class()); // for CF
133 for(Int_t i=0;i<nBin;i++){
138 fESDpid = new AliESDpid;
140 //_____________________________________________________
141 AliAnalysisTaskCaloConv::~AliAnalysisTaskCaloConv()
143 // Remove all pointers
145 if(fOutputContainer){
146 fOutputContainer->Clear() ;
147 delete fOutputContainer ;
149 if(fCFOutputContainer){
150 fCFOutputContainer->Clear() ;
151 delete fCFOutputContainer ;
164 for(Int_t ivtx=0; ivtx<10; ivtx++){
165 if(fPHOSEvents[ivtx]){
166 delete fPHOSEvents[ivtx] ;
167 fPHOSEvents[ivtx]=0x0 ;
169 if(fEMCALEvents[ivtx]){
170 delete fEMCALEvents[ivtx] ;
171 fEMCALEvents[ivtx]=0x0 ;
173 if(fConvEvents[ivtx]){
174 delete fConvEvents[ivtx] ;
175 fConvEvents[ivtx]=0x0 ;
180 //_____________________________________________________
181 void AliAnalysisTaskCaloConv::Init()
184 // AliLog::SetGlobalLogLevel(AliLog::kError);
186 //_____________________________________________________
187 void AliAnalysisTaskCaloConv::UserExec(Option_t */*option*/)
189 // Execute analysis for current event
190 // First select conversion and calorimeter photons
191 // then construct inv. mass distributions
193 //First try to find Stack information.
194 if(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()){
195 if(static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent())
196 fStack = static_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())->MCEvent()->Stack();
200 fESDEvent=(AliESDEvent*)InputEvent();
201 // //Take Only events with proper trigger
202 // if(fTriggerCINT1B){
203 // if(!fESDEvent->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL")) return;
206 //Init geometry if not done yet
209 //Select conversion and calorimeter photons
210 //Conversion photons should go first since they are used in calibration in SelectCALOPhotons()
211 SelectConvPhotons() ;
212 SelectPHOSPhotons() ;
213 SelectEMCALPhotons() ;
215 //Fill MC histograms if MC is present
218 PostData(1, fOutputContainer);
220 //____________________________________________________________
221 void AliAnalysisTaskCaloConv::ConnectInputData(Option_t *option){
222 // see header file for documentation
224 AliAnalysisTaskSE::ConnectInputData(option);
227 //____________________________________________________________
228 void AliAnalysisTaskCaloConv::UserCreateOutputObjects()
230 // Create the output container
231 if(fOutputContainer != NULL){
232 delete fOutputContainer;
233 fOutputContainer = NULL;
235 fOutputContainer = new TList();
236 fOutputContainer->SetOwner(kTRUE);
238 if(fCFOutputContainer != NULL){
239 delete fCFOutputContainer;
240 fCFOutputContainer = NULL;
242 fCFOutputContainer = new TList();
243 fCFOutputContainer->SetOwner(kTRUE);
245 //===========Correction Framework ======================
247 Int_t iBin[3]={500,40,100};
248 fConvCFCont = new AliCFContainer("ConvContainer","container for converted photons", 23,3,iBin);
249 fConvCFCont->SetBinLimits(0,0.,50.);
250 fConvCFCont->SetBinLimits(1,-2.,2.) ;
251 fConvCFCont->SetBinLimits(2,0.,1.);
252 fCFOutputContainer->Add(fConvCFCont) ;
254 fPHOSCFCont = new AliCFContainer("PHOSContainer","container for PHOS photons", 10,2,iBin);
255 fPHOSCFCont->SetBinLimits(0,0.,50.);
256 fPHOSCFCont->SetBinLimits(1,-2.,2.) ;
257 fCFOutputContainer->Add(fPHOSCFCont) ;
259 fEMCALCFCont = new AliCFContainer("EMCALContainer","container for EMCAL photons", 10,2,iBin);
260 fEMCALCFCont->SetBinLimits(0,0.,50.);
261 fEMCALCFCont->SetBinLimits(1,-2.,2.) ;
262 fCFOutputContainer->Add(fEMCALCFCont) ;
264 fPi0CFCont = new AliCFContainer("Pi0Container","container for EMCAL photons", 10,2,iBin);
265 fPi0CFCont->SetBinLimits(0,0.,50.);
266 fPi0CFCont->SetBinLimits(1,-2.,2.) ;
267 fCFOutputContainer->Add(fPi0CFCont) ;
269 //========================================================
272 //Adding the histograms to the output container
273 Int_t firstRun= 114700 ;
274 Int_t lastRun = 128000 ;
275 Int_t nRuns =lastRun-firstRun+1 ;
278 fOutputContainer->Add(new TH2F("hRunTrigger","Triggers fired",nRuns,float(firstRun),float(lastRun),2,0.,2.)) ;
279 fOutputContainer->Add(new TH1F("hRunEvents","Events per run",nRuns,float(firstRun),float(lastRun))) ;
280 fOutputContainer->Add(new TH1F("hRunConvs","Conversion photons per run",nRuns,float(firstRun),float(lastRun))) ;
281 fOutputContainer->Add(new TH1F("hRunPHOS","PHOS photons per run",nRuns,float(firstRun),float(lastRun))) ;
282 fOutputContainer->Add(new TH1F("hRunEMCAL","EMCAL photons per run",nRuns,float(firstRun),float(lastRun))) ;
283 fOutputContainer->Add(new TH1F("hVtxBin","Vtx distribution",10,0.,10.)) ;
284 fOutputContainer->Add(new TH1F("hEvents","Events processed",1,0.,1.)) ;
287 fOutputContainer->Add(new TH3F("PHOS_beyond","PHOS clusters not in PHOS",200,-300.,300.,200,-500.,0.,200,-100.,100.)) ;
291 //Calibration of PHOS
292 fOutputContainer->Add(new TH3F("PHOS_mod1_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
293 fOutputContainer->Add(new TH3F("PHOS_mod2_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
294 fOutputContainer->Add(new TH3F("PHOS_mod3_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
295 fOutputContainer->Add(new TH3F("PHOS_mod4_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
296 fOutputContainer->Add(new TH3F("PHOS_mod5_th1","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
298 fOutputContainer->Add(new TH3F("PHOS_mod1_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
299 fOutputContainer->Add(new TH3F("PHOS_mod2_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
300 fOutputContainer->Add(new TH3F("PHOS_mod3_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
301 fOutputContainer->Add(new TH3F("PHOS_mod4_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
302 fOutputContainer->Add(new TH3F("PHOS_mod5_th2","Inv.Mass distr. per channel",64,0.,64,56,0.,56,200,0.,1.)) ;
305 //Vary Conversion cuts
306 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_OnFly","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
307 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Offline","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
308 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
309 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
310 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
311 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
312 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
313 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
314 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
315 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
316 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
317 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
318 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_chi","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
319 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_chi","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
320 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
321 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
322 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_On_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
323 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Off_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
325 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_OnFly","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
326 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Offline","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
327 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
328 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
329 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
330 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
331 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
332 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
333 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
334 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
335 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
336 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
337 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_chi","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
338 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_chi","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
339 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
340 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
341 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_On_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
342 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Off_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
344 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_OnFly","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
345 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Offline","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
346 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
347 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
348 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
349 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
350 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
351 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
352 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
353 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
354 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
355 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
356 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_chi","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
357 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_chi","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
358 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
359 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
360 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_On_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
361 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_Off_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
363 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_OnFly","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
364 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Offline","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
365 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
366 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Kink","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
367 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
368 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_dEdx","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
369 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
370 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Prob","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
371 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
372 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_R120","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
373 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
374 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Z","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
375 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_chi","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
376 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_chi","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
377 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
378 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Eta","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
379 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_On_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
380 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_Off_Wcut","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
382 //PHOS PID variations
383 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
384 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
385 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
386 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
387 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
389 //PHOS PID module-by-module
390 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
391 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
392 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
393 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
394 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
395 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
396 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
397 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
398 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
399 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
400 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
401 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
402 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
403 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
404 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
405 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
406 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
407 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
408 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
409 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
410 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
411 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
412 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
413 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
414 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
416 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
417 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
418 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
419 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
420 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
422 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod1_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
423 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod2_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
424 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod3_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
425 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod4_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
426 fOutputContainer->Add(new TH2F("PHOS_Re_mvsPt_mod5_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
428 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
429 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
430 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
431 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
432 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
433 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
434 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
435 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
436 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
437 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_Disp","Mass vs pt, disp cut",400,0.,1.,npt,0.,ptmax)) ;
438 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
439 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
440 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
441 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
442 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_TOF","Mass vs pt, TOF cut",400,0.,1.,npt,0.,ptmax)) ;
443 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
444 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
445 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
446 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
447 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_Neutral","Mass vs pt, Neutral cut",400,0.,1.,npt,0.,ptmax)) ;
448 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod1_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
449 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod2_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
450 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod3_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
451 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod4_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
452 fOutputContainer->Add(new TH2F("PHOS_Mi_mvsPt_mod5_DispNeutral","Mass vs pt, Disp & neutral cut",400,0.,1.,npt,0.,ptmax)) ;
454 //Single photon spectrum
456 fOutputContainer->Add(new TH1F("Single_conv","Single photon spectrum",npt,0.,ptmax)) ;
457 fOutputContainer->Add(new TH1F("Single_conv_OnFly","Single photon spectrum",npt,0.,ptmax)) ;
458 fOutputContainer->Add(new TH1F("Single_conv_Offline","Single photon spectrum",npt,0.,ptmax)) ;
459 fOutputContainer->Add(new TH1F("Single_conv_On_Kink","Single photon spectrum",npt,0.,ptmax)) ;
460 fOutputContainer->Add(new TH1F("Single_conv_Off_Kink","Single photon spectrum",npt,0.,ptmax)) ;
461 fOutputContainer->Add(new TH1F("Single_conv_On_dEdx","Single photon spectrum",npt,0.,ptmax)) ;
462 fOutputContainer->Add(new TH1F("Single_conv_Off_dEdx","Single photon spectrum",npt,0.,ptmax)) ;
463 fOutputContainer->Add(new TH1F("Single_conv_On_Prob","Single photon spectrum",npt,0.,ptmax)) ;
464 fOutputContainer->Add(new TH1F("Single_conv_Off_Prob","Single photon spectrum",npt,0.,ptmax)) ;
465 fOutputContainer->Add(new TH1F("Single_conv_On_R120","Single photon spectrum",npt,0.,ptmax)) ;
466 fOutputContainer->Add(new TH1F("Single_conv_Off_R120","Single photon spectrum",npt,0.,ptmax)) ;
467 fOutputContainer->Add(new TH1F("Single_conv_On_Z","Single photon spectrum",npt,0.,ptmax)) ;
468 fOutputContainer->Add(new TH1F("Single_conv_Off_Z","Single photon spectrum",npt,0.,ptmax)) ;
469 fOutputContainer->Add(new TH1F("Single_conv_On_chi","Single photon spectrum",npt,0.,ptmax)) ;
470 fOutputContainer->Add(new TH1F("Single_conv_Off_chi","Single photon spectrum",npt,0.,ptmax)) ;
471 fOutputContainer->Add(new TH1F("Single_conv_On_Eta","Single photon spectrum",npt,0.,ptmax)) ;
472 fOutputContainer->Add(new TH1F("Single_conv_Off_Eta","Single photon spectrum",npt,0.,ptmax)) ;
473 fOutputContainer->Add(new TH1F("Single_conv_On_Wcut","Single photon spectrum",npt,0.,ptmax)) ;
474 fOutputContainer->Add(new TH1F("Single_conv_Off_Wcut","Single photon spectrum",npt,0.,ptmax)) ;
477 fOutputContainer->Add(new TH1F("PHOS_single_mod1_all","Single photon spectrum",npt,0.,ptmax)) ;
478 fOutputContainer->Add(new TH1F("PHOS_single_mod2_all","Single photon spectrum",npt,0.,ptmax)) ;
479 fOutputContainer->Add(new TH1F("PHOS_single_mod3_all","Single photon spectrum",npt,0.,ptmax)) ;
480 fOutputContainer->Add(new TH1F("PHOS_single_mod4_all","Single photon spectrum",npt,0.,ptmax)) ;
481 fOutputContainer->Add(new TH1F("PHOS_single_mod5_all","Single photon spectrum",npt,0.,ptmax)) ;
483 fOutputContainer->Add(new TH1F("PHOS_single_mod1_disp","Single photon spectrum",npt,0.,ptmax)) ;
484 fOutputContainer->Add(new TH1F("PHOS_single_mod2_disp","Single photon spectrum",npt,0.,ptmax)) ;
485 fOutputContainer->Add(new TH1F("PHOS_single_mod3_disp","Single photon spectrum",npt,0.,ptmax)) ;
486 fOutputContainer->Add(new TH1F("PHOS_single_mod4_disp","Single photon spectrum",npt,0.,ptmax)) ;
487 fOutputContainer->Add(new TH1F("PHOS_single_mod5_disp","Single photon spectrum",npt,0.,ptmax)) ;
489 fOutputContainer->Add(new TH1F("PHOS_single_mod1_neutral","Single photon spectrum",npt,0.,ptmax)) ;
490 fOutputContainer->Add(new TH1F("PHOS_single_mod2_neutral","Single photon spectrum",npt,0.,ptmax)) ;
491 fOutputContainer->Add(new TH1F("PHOS_single_mod3_neutral","Single photon spectrum",npt,0.,ptmax)) ;
492 fOutputContainer->Add(new TH1F("PHOS_single_mod4_neutral","Single photon spectrum",npt,0.,ptmax)) ;
493 fOutputContainer->Add(new TH1F("PHOS_single_mod5_neutral","Single photon spectrum",npt,0.,ptmax)) ;
495 fOutputContainer->Add(new TH1F("PHOS_single_mod1_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
496 fOutputContainer->Add(new TH1F("PHOS_single_mod2_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
497 fOutputContainer->Add(new TH1F("PHOS_single_mod3_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
498 fOutputContainer->Add(new TH1F("PHOS_single_mod4_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
499 fOutputContainer->Add(new TH1F("PHOS_single_mod5_dispneutral","Single photon spectrum",npt,0.,ptmax)) ;
501 fOutputContainer->Add(new TH1F("PHOS_single_mod1_dist1","Single photon spectrum",npt,0.,ptmax)) ;
502 fOutputContainer->Add(new TH1F("PHOS_single_mod2_dist1","Single photon spectrum",npt,0.,ptmax)) ;
503 fOutputContainer->Add(new TH1F("PHOS_single_mod3_dist1","Single photon spectrum",npt,0.,ptmax)) ;
504 fOutputContainer->Add(new TH1F("PHOS_single_mod4_dist1","Single photon spectrum",npt,0.,ptmax)) ;
505 fOutputContainer->Add(new TH1F("PHOS_single_mod5_dist1","Single photon spectrum",npt,0.,ptmax)) ;
507 fOutputContainer->Add(new TH1F("PHOS_single_mod1_dist2","Single photon spectrum",npt,0.,ptmax)) ;
508 fOutputContainer->Add(new TH1F("PHOS_single_mod2_dist2","Single photon spectrum",npt,0.,ptmax)) ;
509 fOutputContainer->Add(new TH1F("PHOS_single_mod3_dist2","Single photon spectrum",npt,0.,ptmax)) ;
510 fOutputContainer->Add(new TH1F("PHOS_single_mod4_dist2","Single photon spectrum",npt,0.,ptmax)) ;
511 fOutputContainer->Add(new TH1F("PHOS_single_mod5_dist2","Single photon spectrum",npt,0.,ptmax)) ;
513 fOutputContainer->Add(new TH3F("EMCAL_Ep_0","PHOS E/p ratio",24,0.,24,48,0.,48,200,0.,2.)) ;
514 fOutputContainer->Add(new TH3F("EMCAL_Ep_1","PHOS E/p ratio",24,0.,24,48,0.,48,200,0.,2.)) ;
515 fOutputContainer->Add(new TH3F("EMCAL_Ep_2","PHOS E/p ratio",24,0.,24,48,0.,48,200,0.,2.)) ;
516 fOutputContainer->Add(new TH3F("EMCAL_Ep_3","PHOS E/p ratio",24,0.,24,48,0.,48,200,0.,2.)) ;
517 fOutputContainer->Add(new TH3F("EMCAL_EpPE","PHOS E/p vs E vs p",200,0.,2.,npt,0.,ptmax,npt,0.,ptmax)) ;
519 fOutputContainer->Add(new TH3F("EMCAL_beyond","EMCAL clusters not in EMCAL",200,-300.,300.,200,-500.,0.,200,-100.,100.)) ;
521 fOutputContainer->Add(new TH3F("EMCAL_mod0_th1","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
522 fOutputContainer->Add(new TH3F("EMCAL_mod1_th1","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
523 fOutputContainer->Add(new TH3F("EMCAL_mod2_th1","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
524 fOutputContainer->Add(new TH3F("EMCAL_mod3_th1","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
526 fOutputContainer->Add(new TH3F("EMCAL_mod0_th2","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
527 fOutputContainer->Add(new TH3F("EMCAL_mod1_th2","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
528 fOutputContainer->Add(new TH3F("EMCAL_mod2_th2","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
529 fOutputContainer->Add(new TH3F("EMCAL_mod3_th2","Inv.Mass distr. per channel",24,0.,24,48,0.,48,200,0.,1.)) ;
531 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
532 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
533 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
534 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_single","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
536 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
537 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
538 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
539 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
540 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
541 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
542 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
543 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
544 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
545 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
546 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
547 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
548 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
549 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
550 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
551 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
552 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
553 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
554 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
555 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
556 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
557 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
558 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
559 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
560 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod0_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
561 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod1_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
562 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod2_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
563 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod3_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
564 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod4_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
565 fOutputContainer->Add(new TH2F("EMCAL_Re_mvsPt_mod5_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
567 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
568 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
569 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
570 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
571 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
572 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_all","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
573 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
574 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
575 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
576 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
577 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
578 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_Disp","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
579 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
580 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
581 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
582 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
583 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
584 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_TOF","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
585 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
586 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
587 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
588 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
589 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
590 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_Neutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
591 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod0_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
592 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod1_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
593 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod2_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
594 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod3_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
595 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod4_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
596 fOutputContainer->Add(new TH2F("EMCAL_Mi_mvsPt_mod5_DispNeutral","Mass vs pt",400,0.,1.,npt,0.,ptmax)) ;
599 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_unitEta","Primary #pi^{0}",npt,0.,ptmax)) ;
600 fOutputContainer->Add(new TH1F("hMC_CaloConv_allPi0","Primary #pi^{0}",npt,0.,ptmax)) ;
601 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0PHOSacc","#pi^{0} decayed in PHOS acc",npt,0.,ptmax)) ;
602 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0EMCALacc","#pi^{0} decayed in EMCAL acc",npt,0.,ptmax)) ;
603 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_PHOS_conv","#pi^{0} decayed in PHOS acc asnd conv. photon",npt,0.,ptmax)) ;
604 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_EMCAL_conv","#pi^{0} decayed in EMCAL acc asnd conv. photon",npt,0.,ptmax)) ;
605 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_bothphot_conv","#pi^{0} both photons converted",npt,0.,ptmax)) ;
606 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0__convPhotInCalo","#pi^{0} photon in calo converted",npt,0.,ptmax)) ;
607 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_PHOSacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
608 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_EMCALacc","#pi^{0} photon converted and V0 found",npt,0.,ptmax)) ;
609 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_PHOSclu","#pi^{0} V0 and cluster in PHOS found",npt,0.,ptmax)) ;
610 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_EMCALclu_ptRec","#pi^{0} V0 and cluster in EMCAL found (rec pt)",npt,0.,ptmax)) ;
611 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_PHOSclu_ptRec","#pi^{0} V0 and cluster in PHOS found(rec pt)",npt,0.,ptmax)) ;
612 fOutputContainer->Add(new TH1F("hMC_CaloConv_pi0_v0_EMCALclu","#pi^{0} V0 and cluster in EMCAL found",npt,0.,ptmax)) ;
613 fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_v0_PHOSclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
614 fOutputContainer->Add(new TH2F("hMC_CaloConv_pi0_v0_EMCALclu_mvsPt","m vs pt for rec pi0s",400,0.,1.,npt,0.,ptmax)) ;
616 fOutputContainer->Add(new TH1F("hMC_CaloConv_phot","Primary photons",npt,0.,ptmax)) ;
617 fOutputContainer->Add(new TH1F("hMC_CaloConv_gammaPHOSacc","Photons in PHOS acc",npt,0.,ptmax)) ;
618 fOutputContainer->Add(new TH1F("hMC_CaloConv_gammaEMCALacc","Photons in EMCAL acc",npt,0.,ptmax)) ;
619 fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_conv","Converted photons",npt,0.,ptmax)) ;
620 fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_v0","Converted photons with V0",npt,0.,ptmax)) ;
621 fOutputContainer->Add(new TH2F("hMC_CaloConv_gamma_v0_devsE","Converted photons with V0",200,-1.,1.,npt,0.,ptmax)) ;
622 fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_PHOSclu","Photons with cluster in PHOS",npt,0.,ptmax)) ;
623 fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_EMCALclu","Photons with cluster in EMCAL",npt,0.,ptmax)) ;
624 fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_PHOSclu_recE","Photons with cluster in PHOS",npt,0.,ptmax)) ;
625 fOutputContainer->Add(new TH1F("hMC_CaloConv_gamma_EMCALclu_recE","Photons with cluster in EMCAL",npt,0.,ptmax)) ;
626 fOutputContainer->Add(new TH2F("hMC_CaloConv_gamma_PHOSclu_devsE","Photons with cluster in PHOS",200,-1.,1.,npt,0.,ptmax)) ;
627 fOutputContainer->Add(new TH2F("hMC_CaloConv_gamma_EMCALclu_devsE","Photons with cluster in EMCAL",200,-1.,1.,npt,0.,ptmax)) ;
630 fOutputContainer->Add(new TH3F("All_chi2_eta_pt","MC chi2 vs eta vs phi",100,0.,100.,200,-2.,2.,npt,0.,ptmax)) ;
631 fOutputContainer->Add(new TH2F("All_w_vs_m","MC w vs m",300,0.,TMath::Pi(),400,0.,1.)) ;
632 fOutputContainer->Add(new TH3F("MC_V0_pt_eta_phi","MC pt vs eta vs phi",npt,0.,ptmax,200,-2.,2.,200,0.,TMath::TwoPi())) ;
633 fOutputContainer->Add(new TH3F("MC_V0_m_eta_pt","MC m vs eta vs phi",400,0.,1.,200,-2.,2.,npt,0.,ptmax)) ;
634 fOutputContainer->Add(new TH3F("MC_V0_chi2_eta_pt","MC chi2 vs eta vs phi",100,0.,100.,200,-2.,2.,npt,0.,ptmax)) ;
635 fOutputContainer->Add(new TH2F("MC_V0_w_vs_m","MC w vs m",300,0.,TMath::Pi(),400,0.,1.)) ;
637 fOutputContainer->SetName(GetName());
639 //______________________________________________________________________
640 void AliAnalysisTaskCaloConv::InitGeometry()
642 //If not done yet, create Geometry for PHOS and EMCAL
643 //and read misalignment matrixes from ESD/AOD (AOD not implemented yet)
646 if(fPHOSgeom && fEMCALgeom){ //already initialized
650 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(InputEvent()) ;
652 AliFatal("Can not read geometry matrixes from ESD/AOD: NO ESD") ;
653 if(!fPHOSgeom){//reading PHOS matrixes
654 fPHOSgeom = new AliPHOSGeoUtils("IHEP","");
655 for(Int_t mod=0; mod<5; mod++){
657 const TGeoHMatrix* m=esd->GetPHOSMatrix(mod) ;
659 fPHOSgeom->SetMisalMatrix(m, mod) ;
664 fEMCALgeom = new AliEMCALGeoUtils("EMCAL_FIRSTYEAR");
665 for(Int_t mod=0; mod < (fEMCALgeom->GetEMCGeometry())->GetNumberOfSuperModules(); mod++){ //<---Gustavo, could you check???
667 const TGeoHMatrix* m=esd->GetEMCALMatrix(mod) ;
669 fEMCALgeom->SetMisalMatrix(m, mod) ;
674 //________________________________________________________________
675 void AliAnalysisTaskCaloConv::SelectPHOSPhotons(){
677 // Loop over all CaloClusters
679 fPHOSEvent->Clear() ;
681 fPHOSEvent = new TClonesArray("TLorentzVector",10) ;
687 vtx[0] = fESDEvent->GetPrimaryVertex()->GetX();
688 vtx[1] = fESDEvent->GetPrimaryVertex()->GetY();
689 vtx[2] = fESDEvent->GetPrimaryVertex()->GetZ();
690 for (Int_t i=0; i<fESDEvent->GetNumberOfCaloClusters(); i++) {
691 AliESDCaloCluster * clu = fESDEvent->GetCaloCluster(i);
695 clu ->GetMomentum(p ,vtx);
696 Bool_t isNeutral = kTRUE ;
697 Bool_t isDispOK = kTRUE ;
698 Bool_t isTOFOK = kTRUE ;
701 isNeutral = clu->GetEmcCpvDistance()>5. ; //To be improved
703 Double_t l0=clu->GetM02(),l1=clu->GetM20() ;
704 if(l1>= 0 && l0>= 0 && l1 < 0.1 && l0 < 0.1) isDispOK=kFALSE ;
705 if(l1>= 0 && l0 > 0.5 && l1 < 0.1 && l0 < 1.5) isDispOK=kTRUE ;
706 if(l1>= 0 && l0 > 2.0 && l1 < 0.1 && l0 < 2.7) isDispOK=kFALSE ;
707 if(l1>= 0 && l0 > 2.7 && l1 < 0.1 && l0 < 4.0) isDispOK=kFALSE ;
708 if(l1 > 0.1 && l1 < 0.7 && l0 > 0.7 && l0 < 2.1) isDispOK=kTRUE ;
709 if(l1 > 0.1 && l1 < 0.3 && l0 > 3.0 && l0 < 5.0) isDispOK=kFALSE ;
710 if(l1 > 0.3 && l1 < 0.7 && l0 > 2.5 && l0 < 4.0) isDispOK=kFALSE ;
711 if(l1 > 0.7 && l1 < 1.3 && l0 > 1.0 && l0 < 1.6) isDispOK=kTRUE ;
712 if(l1 > 0.7 && l1 < 1.3 && l0 > 1.6 && l0 < 3.5) isDispOK=kTRUE ;
713 if(l1 > 1.3 && l1 < 3.5 && l0 > 1.3 && l0 < 3.5) isDispOK=kTRUE ;
715 Float_t xyz[3] = {0,0,0};
716 clu->GetPosition(xyz); //Global position in ALICE system
717 TVector3 global(xyz) ;
719 if(!fPHOSgeom->GlobalPos2RelId(global,relid)){
720 FillHistogram("PHOS_beyond",xyz[0],xyz[1],xyz[2]) ;
721 printf("PHOS_beyond: x=%f, y=%f, z=%f \n",xyz[0],xyz[1],xyz[2]) ;
728 p.SetBit(kCaloPIDdisp,isDispOK) ;
729 p.SetBit(kCaloPIDtof,isTOFOK) ;
730 p.SetBit(kCaloPIDneutral,isNeutral) ;
731 p.SetBit(BIT(16+iMod),kTRUE) ;
732 new((*fPHOSEvent)[inPHOS]) TLorentzVector(p) ;
736 //Single photon spectra
737 Double_t pt= p.Pt() ;
738 TString skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_all" ;
739 FillHistogram(skey,pt) ;
741 skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_disp" ;
742 FillHistogram(skey,pt) ;
745 skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_neutral" ;
746 FillHistogram(skey,pt) ;
748 if(isNeutral && isDispOK){
749 skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_dispneutral" ;
750 FillHistogram(skey,pt) ;
752 //Distance to bad channel
753 if(clu->GetDistanceToBadChannel()>2.2){
754 skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_dist1" ;
755 FillHistogram(skey,pt) ;
757 if(clu->GetDistanceToBadChannel()>4.4){
758 skey="PHOS_single_"; skey+="mod" ; skey+=iMod ; skey+="_dist2" ;
759 FillHistogram(skey,pt) ;
762 //Fill histogams for calibration
763 if(clu->E()<fPi0Thresh1 ) continue;
764 for(Int_t iconv=0;iconv<fConvEvent->GetEntriesFast();iconv++){
765 TLorentzVector *gammaConv=static_cast<TLorentzVector*>(fConvEvent->At(iconv)) ;
767 skey="PHOS_"; skey+="mod" ; skey+=iMod ; skey+="_th1" ;
768 FillHistogram(skey,iX-0.5, iZ-0.5,pi0.M());
770 skey="PHOS_"; skey+="mod"; skey+=iMod ; skey+="_th2" ;
771 FillHistogram(skey,iX-0.5, iZ-0.5,pi0.M());
776 //____________________________________________________________
777 void AliAnalysisTaskCaloConv::SelectEMCALPhotons(){
779 // Loop over all CaloClusters
781 fEMCALEvent->Clear() ;
783 fEMCALEvent = new TClonesArray("TLorentzVector",10) ;
784 Int_t inEMCAL = 0 ; //, inEMCALRecal=0;
789 vtx[0] = fESDEvent->GetPrimaryVertex()->GetX();
790 vtx[1] = fESDEvent->GetPrimaryVertex()->GetY();
791 vtx[2] = fESDEvent->GetPrimaryVertex()->GetZ();
792 Int_t nEMCAL=0 ; //For QA
793 for (Int_t i=0; i<fESDEvent->GetNumberOfCaloClusters(); i++) {
794 AliESDCaloCluster * clu = fESDEvent->GetCaloCluster(i);
798 TLorentzVector pRecal ;
799 clu ->GetMomentum(p ,vtx);
800 Bool_t isNeutral = kTRUE ;
801 Bool_t isDispOK = kTRUE ;
802 Bool_t isTOFOK = kTRUE ;
807 isNeutral = clu->GetEmcCpvDistance()>10. ; //To be improved
808 if(clu->GetTOF()>550.e-9 && clu->GetTOF()<750.e-9)
812 Float_t phi = p.Phi();
813 if(phi < 0) phi+=TMath::TwoPi();
815 fEMCALgeom->GetAbsCellIdFromEtaPhi(p.Eta(),phi, absId);
816 iMod=fEMCALgeom->GetSuperModuleNumber(absId) ;
817 Int_t imod = -1, iTower = -1, iIphi = -1, iIeta = -1, iphi = -1, ieta = -1;
818 fEMCALgeom->GetCellIndex(absId,imod,iTower,iIphi,iIeta);
819 fEMCALgeom->GetCellPhiEtaIndexInSModule(imod,iTower, iIphi, iIeta,iphi,ieta);
820 if(imod<0 || imod>5){
821 printf("EMCAL: Beyond the geometry!\n") ;
822 printf("phi=%f, eta=%f, absId=%d, SM=%d \n",p.Eta(),phi, absId, imod) ;
828 p.SetBit(kCaloPIDdisp,isDispOK) ;
829 p.SetBit(kCaloPIDtof,isTOFOK) ;
830 p.SetBit(kCaloPIDneutral,isNeutral) ;
831 p.SetBit(BIT(17+imod),kTRUE) ;
832 new((*fEMCALEvent)[inEMCAL]) TLorentzVector(p) ;
835 //Fill histograms for recalibration
836 if(clu->E()<fPi0Thresh1) continue ;
837 for(Int_t iconv=0;iconv<fConvEvent->GetEntriesFast();iconv++){
838 TLorentzVector *gammaConv=static_cast<TLorentzVector*>(fConvEvent->At(iconv)) ;
840 TString skey="EMCAL_"; skey+="mod" ; skey+=iMod ; skey+="_th1" ;
841 FillHistogram(skey,iX-0.5, iZ-0.5,pi0.M());
842 if(clu->E()>fPi0Thresh2){
843 skey="EMCAL_"; skey+="mod"; skey+=iMod ; skey+="_th2" ;
844 FillHistogram(skey,iX-0.5, iZ-0.5,pi0.M());
850 //______________________________________________________________________
851 void AliAnalysisTaskCaloConv::SelectConvPhotons(){
852 //Fill list of conversion photons
853 //that is scan v0s and select photon-like
856 const Double_t cutSigmaMass=0.0001; //Constraint on photon mass
857 const Bool_t useImprovedVertex=kTRUE ; //Use verted with converted photon?
858 // const Double_t zrSlope = TMath::Tan(2*TMath::ATan(TMath::Exp(-fetaCut)));
859 const Double_t zrSlope = TMath::Tan(2*TMath::ATan(TMath::Exp(-1.2)));
860 const Double_t zOffset = 7.;
863 fConvEvent = new TClonesArray("TLorentzVector",10) ;
865 fConvEvent->Clear() ;
867 //No primary vertex in event => scip
868 if(fESDEvent->GetPrimaryVertex()->GetNContributors()<=0) {
873 for(Int_t iv0=0; iv0<fESDEvent->GetNumberOfV0s();iv0++){
874 AliESDv0 * v0 = fESDEvent->GetV0(iv0) ;
876 AliESDtrack * pos = fESDEvent->GetTrack(v0->GetPindex()) ;
877 AliESDtrack * neg = fESDEvent->GetTrack(v0->GetNindex()) ;
878 const AliExternalTrackParam * paramPos = v0->GetParamP() ;
879 const AliExternalTrackParam * paramNeg = v0->GetParamN() ;
880 if(pos->GetSign() <0){//change tracks
882 neg=fESDEvent->GetTrack(v0->GetPindex()) ;
884 paramNeg=v0->GetParamP() ;
886 AliKFParticle negKF(*paramNeg,11);
887 AliKFParticle posKF(*paramPos,-11);
888 AliKFParticle photKF(negKF,posKF) ;
889 photKF.SetMassConstraint(0,cutSigmaMass);
890 TLorentzVector photLV;
891 photLV.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
893 if(useImprovedVertex){
894 AliKFVertex primaryVertexImproved(*(fESDEvent->GetPrimaryVertex()));
895 primaryVertexImproved+=photKF;
896 photKF.SetProductionVertex(primaryVertexImproved);
900 photKF.GetMass(m,width);
902 //Parameters for correction function
903 Double_t a[3]={photLV.Pt(),photLV.Eta(),m} ;
904 fConvCFCont->Fill(a,0) ;
907 Bool_t isOnFly=kTRUE ;
909 if (v0->GetOnFlyStatus()){
910 fConvCFCont->Fill(a,1) ;
914 fConvCFCont->Fill(a,2) ;
917 //remove like sign pairs
918 if(pos->GetSign() == neg->GetSign()){
922 fConvCFCont->Fill(a,3) ;
924 fConvCFCont->Fill(a,4) ;
927 if( !(pos->GetStatus() & AliESDtrack::kTPCrefit) ||
928 !(neg->GetStatus() & AliESDtrack::kTPCrefit) ){
932 fConvCFCont->Fill(a,5) ;
934 fConvCFCont->Fill(a,6) ;
936 Bool_t isKink=kFALSE ;
937 if( neg->GetKinkIndex(0) > 0 ||
938 pos->GetKinkIndex(0) > 0) {
943 fConvCFCont->Fill(a,7) ;
945 fConvCFCont->Fill(a,8) ;
949 if( fESDpid->NumberOfSigmasTPC(pos,AliPID::kElectron)<fnSigmaBelowElectronLine ||
950 fESDpid->NumberOfSigmasTPC(pos,AliPID::kElectron)>fnSigmaAboveElectronLine ||
951 fESDpid->NumberOfSigmasTPC(neg,AliPID::kElectron)<fnSigmaBelowElectronLine ||
952 fESDpid->NumberOfSigmasTPC(neg,AliPID::kElectron)>fnSigmaAboveElectronLine ){
955 if( pos->P()>fpnSigmaAbovePionLine){
956 if(fESDpid->NumberOfSigmasTPC(pos,AliPID::kElectron)>fnSigmaBelowElectronLine &&
957 fESDpid->NumberOfSigmasTPC(pos,AliPID::kElectron)<fnSigmaAboveElectronLine&&
958 fESDpid->NumberOfSigmasTPC(pos,AliPID::kPion)<fnSigmaAbovePionLine){
962 if( neg->P()>fpnSigmaAbovePionLine){
963 if(fESDpid->NumberOfSigmasTPC(neg,AliPID::kElectron)>fnSigmaBelowElectronLine &&
964 fESDpid->NumberOfSigmasTPC(neg,AliPID::kElectron)<fnSigmaAboveElectronLine&&
965 fESDpid->NumberOfSigmasTPC(neg,AliPID::kPion)<fnSigmaAbovePionLine){
970 //Check the pid probability
971 Bool_t isProb=kTRUE ;
972 Double_t posProbArray[10];
973 Double_t negProbArray[10];
974 neg->GetTPCpid(negProbArray);
975 pos->GetTPCpid(posProbArray);
976 if(negProbArray[AliPID::kElectron]<fprobCut || posProbArray[AliPID::kElectron]<fprobCut){
979 if(!isKink && isProb){
981 fConvCFCont->Fill(a,9) ;
983 fConvCFCont->Fill(a,10) ;
986 Double_t v0x,v0y,v0z;
987 v0->GetXYZ(v0x,v0y,v0z) ;
988 Double_t r=TMath::Sqrt(v0x*v0x + v0y*v0y) ;
989 if(r>fmaxR){ // cuts on distance from collision point
992 Bool_t isStrictR=kFALSE ;
996 fConvCFCont->Fill(a,11) ;
998 fConvCFCont->Fill(a,12) ;
1001 if((TMath::Abs(v0z)*zrSlope)-zOffset > r ){ // cuts out regions where we do not reconstruct
1005 fConvCFCont->Fill(a,13) ;
1007 fConvCFCont->Fill(a,14) ;
1009 if(TMath::Abs(v0z) > fmaxZ ){ // cuts out regions where we do not reconstruct
1012 Bool_t isStrictZ=kFALSE ;
1013 const Double_t strictZcut=0.9 ;
1014 if((TMath::Abs(v0z)*zrSlope)-zOffset < strictZcut*r || TMath::Abs(v0z) < strictZcut*fmaxZ)
1018 fConvCFCont->Fill(a,15) ;
1020 fConvCFCont->Fill(a,16) ;
1023 if(photKF.GetNDF()<=0){
1027 fConvCFCont->Fill(a,17) ;
1029 fConvCFCont->Fill(a,18) ;
1031 Double_t chi2V0 = photKF.GetChi2()/photKF.GetNDF();
1032 FillHistogram("All_chi2_eta_pt",chi2V0,photLV.Eta(),photLV.Pt()) ;
1034 if(chi2V0 > fchi2CutConversion || chi2V0 <=0){
1037 Bool_t isStrictChi=kFALSE ;
1038 if(chi2V0 < 0.7*fchi2CutConversion && chi2V0 >0){
1043 fConvCFCont->Fill(a,19) ;
1045 fConvCFCont->Fill(a,20) ;
1047 const Double_t wideEtaCut=1.2 ;
1048 if(TMath::Abs(photLV.Eta())> wideEtaCut){
1051 Bool_t isWideEta=kTRUE ;
1052 if(TMath::Abs(photLV.Eta())< fetaCut){
1057 if(photLV.Pt()<fptCut){
1061 fConvCFCont->Fill(a,21) ;
1063 fConvCFCont->Fill(a,22) ;
1066 Double_t w=PlanarityAngle(paramPos,paramNeg) ;
1067 Bool_t isPlanarityCut = (0.08-0.22*w > m || 0.15*(w-2.4)>m) ;
1068 FillHistogram("All_w_vs_m",w,m) ;
1070 photLV.SetBit(kConvOnFly,isOnFly) ;
1071 photLV.SetBit(kConvKink,isKink) ;
1072 photLV.SetBit(kConvdEdx,isdEdx) ;
1073 photLV.SetBit(kConvProb,isProb) ;
1074 photLV.SetBit(kConvR,isStrictR) ;
1075 photLV.SetBit(kConvZR,isStrictZ) ;
1076 photLV.SetBit(kConvNDF,isStrictChi) ;
1077 photLV.SetBit(kConvEta,isWideEta) ;
1078 photLV.SetBit(kConvPlan,isPlanarityCut) ;
1080 new((*fConvEvent)[inConv]) TLorentzVector(photLV) ;
1083 //Single photon spectrum
1084 Double_t pt=photLV.Pt() ;
1087 if(!isKink && isdEdx && isProb && !isWideEta)
1088 FillHistogram("Single_conv_OnFly",pt) ;
1089 if(isdEdx && isProb && !isWideEta)
1090 FillHistogram("Single_conv_On_Kink",pt) ;
1091 if(!isKink && isProb && !isWideEta)
1092 FillHistogram("Single_conv_On_dEdx",pt) ;
1093 if(!isKink && isdEdx && !isWideEta)
1094 FillHistogram("Single_conv_On_Prob",pt) ;
1095 if(!isKink && isdEdx && isProb && !isWideEta && isStrictR)
1096 FillHistogram("Single_conv_On_R120",pt) ;
1097 if(!isKink && isdEdx && isProb && !isWideEta && isStrictZ)
1098 FillHistogram("Single_conv_On_Z",pt) ;
1099 if(!isKink && isdEdx && isProb && !isWideEta && isStrictChi)
1100 FillHistogram("Single_conv_On_chi",pt) ;
1101 if(!isKink && isdEdx && isProb)
1102 FillHistogram("Single_conv_On_Eta",pt) ;
1103 if(!isKink && isdEdx && isProb && !isWideEta && isPlanarityCut)
1104 FillHistogram("Single_conv_On_Wcut",pt) ;
1107 if(!isKink && isdEdx && isProb && !isWideEta)
1108 FillHistogram("Single_conv_Offline",pt) ;
1109 if(isdEdx && isProb && !isWideEta)
1110 FillHistogram("Single_conv_Off_Kink",pt) ;
1111 if(!isKink && isProb && !isWideEta)
1112 FillHistogram("Single_conv_Off_dEdx",pt) ;
1113 if(!isKink && isdEdx && !isWideEta)
1114 FillHistogram("Single_conv_Off_Prob",pt) ;
1115 if(!isKink && isdEdx && isProb && !isWideEta && isStrictR)
1116 FillHistogram("Single_conv_Off_R120",pt) ;
1117 if(!isKink && isdEdx && isProb && !isWideEta && isStrictZ)
1118 FillHistogram("Single_conv_Off_Z",pt) ;
1119 if(!isKink && isdEdx && isProb && !isWideEta && isStrictChi)
1120 FillHistogram("Single_conv_Off_chi",pt) ;
1121 if(!isKink && isdEdx && isProb)
1122 FillHistogram("Single_conv_Off_Eta",pt) ;
1123 if(!isKink && isdEdx && isProb && !isWideEta && isPlanarityCut)
1124 FillHistogram("Single_conv_Off_Wcut",pt) ;
1127 //Fill MC information
1129 TParticle * negativeMC = fStack->Particle(TMath::Abs(neg->GetLabel()));
1130 TParticle * positiveMC = fStack->Particle(TMath::Abs(pos->GetLabel()));
1132 if(negativeMC && positiveMC){
1133 if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
1137 if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
1140 if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){
1144 TParticle * v0Gamma = fStack->Particle(negativeMC->GetMother(0));
1146 if(negativeMC->GetUniqueID() != 5 || positiveMC->GetUniqueID() !=5){ // id 5 is conversion
1149 if(v0Gamma->GetPdgCode() == 22){
1150 FillHistogram("MC_V0_pt_eta_phi",v0Gamma->Pt(),v0Gamma->Eta(),v0Gamma->Phi()) ;
1151 FillHistogram("MC_V0_m_eta_pt",m,v0Gamma->Eta(),v0Gamma->Pt()) ;
1152 FillHistogram("MC_V0_chi2_eta_pt",chi2V0,v0Gamma->Eta(),v0Gamma->Pt()) ;
1153 FillHistogram("MC_V0_w_vs_m",w,m) ;
1158 //______________________________________________________________________
1159 void AliAnalysisTaskCaloConv::FillRealMixed(){
1160 // Fills real (same event) and Mixed (different events) inv.mass dsitributions
1161 // Moves current event to the list of stored events at the end
1164 vtx[0] = fESDEvent->GetPrimaryVertex()->GetX();
1165 vtx[1] = fESDEvent->GetPrimaryVertex()->GetY();
1166 vtx[2] = fESDEvent->GetPrimaryVertex()->GetZ();
1169 Int_t zvtx = (Int_t)((vtx[2]+10.)/2.) ;
1173 Double_t run = fESDEvent->GetRunNumber()+0.5;
1174 TString trigClasses = fESDEvent->GetFiredTriggerClasses();
1175 if(trigClasses.Contains("CINT1B-ABCE-NOPF-ALL"))
1176 FillHistogram("hRunTrigger",run,0.5) ;
1178 FillHistogram("hRunTrigger",run,1.5) ;
1180 FillHistogram("hEvents",0.5) ;
1181 FillHistogram("hVtxBin",zvtx-0.5) ;
1182 FillHistogram("hRunEvents",run) ;
1184 //check if containers for mixed events exist
1185 //create new if necessary
1186 if(!fPHOSEvents[zvtx]) fPHOSEvents[zvtx]=new TList() ;
1187 if(!fEMCALEvents[zvtx]) fEMCALEvents[zvtx]=new TList() ;
1188 if(!fConvEvents[zvtx]) fConvEvents[zvtx]=new TList() ;
1190 Int_t nPHOS=fPHOSEvent->GetEntriesFast() ;
1191 Int_t nEMCAL=fEMCALEvent->GetEntriesFast() ;
1192 Int_t nConv = fConvEvent->GetEntriesFast() ;
1193 //Some QA histograms
1194 FillHistogram("hRunConvs",run,double(nConv)) ;
1195 FillHistogram("hRunPHOS", run,double(nPHOS)) ;
1196 FillHistogram("hRunEMCAL",run,double(nEMCAL)) ;
1198 //Fill Real distributions
1199 for(Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
1200 TLorentzVector * cal = static_cast<TLorentzVector*>(fPHOSEvent->At(iPHOS)) ;
1201 for(Int_t iConv = 0; iConv<nConv; iConv++){
1202 TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
1203 TLorentzVector pi=*cal + *cnv ;
1204 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1205 //Non-linearity check
1206 FillHistogram("PHOS_Re_mvsPt_all",pi.M(),pi.Pt()) ;
1207 if(cal->TestBit(kCaloPIDdisp))
1208 FillHistogram("PHOS_Re_mvsPt_Disp",pi.M(),pi.Pt()) ;
1209 if(cal->TestBit(kCaloPIDtof))
1210 FillHistogram("PHOS_Re_mvsPt_TOF",pi.M(),pi.Pt()) ;
1211 if(cal->TestBit(kCaloPIDneutral))
1212 FillHistogram("PHOS_Re_mvsPt_Neutral",pi.M(),pi.Pt()) ;
1213 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp))
1214 FillHistogram("PHOS_Re_mvsPt_DispNeutral",pi.M(),pi.Pt()) ;
1216 //Vary Conversion cuts
1217 if(cnv->TestBit(kConvOnFly)){
1219 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1220 FillHistogram("PHOS_Re_mvsPt_OnFly",pi.M(),pi.Pt()) ;
1221 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1222 FillHistogram("PHOS_Re_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
1223 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1224 FillHistogram("PHOS_Re_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
1225 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1226 FillHistogram("PHOS_Re_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
1227 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1228 FillHistogram("PHOS_Re_mvsPt_On_R120",pi.M(),pi.Pt()) ;
1229 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1230 FillHistogram("PHOS_Re_mvsPt_On_Z",pi.M(),pi.Pt()) ;
1231 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1232 FillHistogram("PHOS_Re_mvsPt_On_chi",pi.M(),pi.Pt()) ;
1233 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1234 FillHistogram("PHOS_Re_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
1235 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1236 FillHistogram("PHOS_Re_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
1240 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1241 FillHistogram("PHOS_Re_mvsPt_Offline",pi.M(),pi.Pt()) ;
1242 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1243 FillHistogram("PHOS_Re_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
1244 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1245 FillHistogram("PHOS_Re_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
1246 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1247 FillHistogram("PHOS_Re_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
1248 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1249 FillHistogram("PHOS_Re_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
1250 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1251 FillHistogram("PHOS_Re_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
1252 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1253 FillHistogram("PHOS_Re_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
1254 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1255 FillHistogram("PHOS_Re_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
1256 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1257 FillHistogram("PHOS_Re_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
1261 //PHOS module-dependent histograms
1262 for(Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
1263 TLorentzVector * cal = static_cast<TLorentzVector*>(fPHOSEvent->At(iPHOS)) ;
1265 while(!cal->TestBit(BIT(16+mod)) && mod<5)mod++ ;
1266 TString base("PHOS_Re_mvsPt_mod") ; base+=mod ;
1268 for(Int_t iConv = 0; iConv<nConv; iConv++){
1269 TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
1270 TLorentzVector pi=*cal + *cnv ;
1271 full=base ; full+="_single" ;
1272 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1273 FillHistogram(full,pi.M(),cal->Pt()) ;
1274 full=base ; full+="_all" ;
1275 FillHistogram(full,pi.M(),pi.Pt()) ;
1276 if(cal->TestBit(kCaloPIDdisp)){
1277 full=base ; full+="_Disp" ;
1278 FillHistogram(full,pi.M(),pi.Pt()) ;
1280 if(cal->TestBit(kCaloPIDtof)){
1281 full=base ; full+="_TOF" ;
1282 FillHistogram(full,pi.M(),pi.Pt()) ;
1284 if(cal->TestBit(kCaloPIDneutral)){
1285 full=base ; full+="_Neutral" ;
1286 FillHistogram(full,pi.M(),pi.Pt()) ;
1288 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
1289 full=base ; full+="_DispNeutral" ;
1290 FillHistogram(full,pi.M(),pi.Pt()) ;
1295 for(Int_t iEMCAL=0; iEMCAL<nEMCAL;iEMCAL++){
1296 TLorentzVector * cal = static_cast<TLorentzVector*>(fEMCALEvent->At(iEMCAL)) ;
1298 while(!cal->TestBit(BIT(17+mod)) && mod<6)mod++ ;
1299 TString base("EMCAL_Re_mvsPt_mod") ; base+=mod ;
1301 for(Int_t iConv = 0; iConv<nConv; iConv++){
1302 TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
1303 TLorentzVector pi=*cal + *cnv ;
1304 full=base+"_single" ;
1305 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1306 FillHistogram(full,pi.M(),cal->Pt()) ;
1308 FillHistogram(full,pi.M(),pi.Pt()) ;
1309 if(cal->TestBit(kCaloPIDdisp)){
1311 FillHistogram(full,pi.M(),pi.Pt()) ;
1313 if(cal->TestBit(kCaloPIDtof)){
1315 FillHistogram(full,pi.M(),pi.Pt()) ;
1317 if(cal->TestBit(kCaloPIDneutral)){
1318 full=base+"_Neutral" ;
1319 FillHistogram(full,pi.M(),pi.Pt()) ;
1321 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
1322 full=base+"_DispNeutral" ;
1323 FillHistogram(full,pi.M(),pi.Pt()) ;
1326 //Vary Conversion cuts
1327 if(cnv->TestBit(kConvOnFly)){
1329 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1330 FillHistogram("EMCAL_Re_mvsPt_OnFly",pi.M(),pi.Pt()) ;
1331 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1332 FillHistogram("EMCAL_Re_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
1333 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1334 FillHistogram("EMCAL_Re_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
1335 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1336 FillHistogram("EMCAL_Re_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
1337 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1338 FillHistogram("EMCAL_Re_mvsPt_On_R120",pi.M(),pi.Pt()) ;
1339 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1340 FillHistogram("EMCAL_Re_mvsPt_On_Z",pi.M(),pi.Pt()) ;
1341 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1342 FillHistogram("EMCAL_Re_mvsPt_On_chi",pi.M(),pi.Pt()) ;
1343 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1344 FillHistogram("EMCAL_Re_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
1345 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1346 FillHistogram("EMCAL_Re_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
1350 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1351 FillHistogram("EMCAL_Re_mvsPt_Offline",pi.M(),pi.Pt()) ;
1352 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1353 FillHistogram("EMCAL_Re_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
1354 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1355 FillHistogram("EMCAL_Re_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
1356 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1357 FillHistogram("EMCAL_Re_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
1358 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1359 FillHistogram("EMCAL_Re_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
1360 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1361 FillHistogram("EMCAL_Re_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
1362 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1363 FillHistogram("EMCAL_Re_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
1364 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1365 FillHistogram("EMCAL_Re_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
1366 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1367 FillHistogram("EMCAL_Re_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
1372 TList * prevPHOS = fPHOSEvents[zvtx] ;
1373 TList * prevEMCAL = fEMCALEvents[zvtx] ;
1374 TList * prevConv = fConvEvents[zvtx] ;
1377 for(Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
1378 TLorentzVector * cal = static_cast<TLorentzVector*>(fPHOSEvent->At(iPHOS)) ;
1379 for(Int_t ev=0; ev<prevConv->GetSize();ev++){
1380 TClonesArray * mixConv = static_cast<TClonesArray*>(prevConv->At(ev)) ;
1381 for(Int_t iConv = 0; iConv<mixConv->GetEntriesFast(); iConv++){
1382 TLorentzVector * cnv = static_cast<TLorentzVector*>(mixConv->At(iConv)) ;
1383 TLorentzVector pi=*cal + *cnv ;
1384 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1385 FillHistogram("PHOS_Mi_mvsPt_all",pi.M(),pi.Pt()) ;
1386 if(cal->TestBit(kCaloPIDdisp))
1387 FillHistogram("PHOS_Mi_mvsPt_Disp",pi.M(),pi.Pt()) ;
1388 if(cal->TestBit(kCaloPIDtof))
1389 FillHistogram("PHOS_Mi_mvsPt_TOF",pi.M(),pi.Pt()) ;
1390 if(cal->TestBit(kCaloPIDneutral))
1391 FillHistogram("PHOS_Mi_mvsPt_Neutral",pi.M(),pi.Pt()) ;
1392 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp))
1393 FillHistogram("PHOS_Mi_mvsPt_DispNeutral",pi.M(),pi.Pt()) ;
1395 //Vary Conversion cuts
1396 if(cnv->TestBit(kConvOnFly)){
1398 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1399 FillHistogram("PHOS_Mi_mvsPt_OnFly",pi.M(),pi.Pt()) ;
1400 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1401 FillHistogram("PHOS_Mi_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
1402 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1403 FillHistogram("PHOS_Mi_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
1404 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1405 FillHistogram("PHOS_Mi_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
1406 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1407 FillHistogram("PHOS_Mi_mvsPt_On_R120",pi.M(),pi.Pt()) ;
1408 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1409 FillHistogram("PHOS_Mi_mvsPt_On_Z",pi.M(),pi.Pt()) ;
1410 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1411 FillHistogram("PHOS_Mi_mvsPt_On_chi",pi.M(),pi.Pt()) ;
1412 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1413 FillHistogram("PHOS_Mi_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
1414 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1415 FillHistogram("PHOS_Mi_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
1419 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1420 FillHistogram("PHOS_Mi_mvsPt_Offline",pi.M(),pi.Pt()) ;
1421 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1422 FillHistogram("PHOS_Mi_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
1423 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1424 FillHistogram("PHOS_Mi_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
1425 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1426 FillHistogram("PHOS_Mi_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
1427 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1428 FillHistogram("PHOS_Mi_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
1429 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1430 FillHistogram("PHOS_Mi_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
1431 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1432 FillHistogram("PHOS_Mi_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
1433 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1434 FillHistogram("PHOS_Mi_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
1435 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1436 FillHistogram("PHOS_Mi_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
1441 for(Int_t iConv = 0; iConv<nConv; iConv++){
1442 TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
1443 for(Int_t ev=0; ev<prevPHOS->GetSize();ev++){
1444 TClonesArray * mixPHOS = static_cast<TClonesArray*>(prevPHOS->At(ev)) ;
1445 for(Int_t iPHOS=0; iPHOS<mixPHOS->GetEntriesFast();iPHOS++){
1446 TLorentzVector * cal = static_cast<TLorentzVector*>(mixPHOS->At(iPHOS)) ;
1447 TLorentzVector pi=*cal + *cnv ;
1448 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1449 FillHistogram("PHOS_Mi_mvsPt_all",pi.M(),pi.Pt()) ;
1450 if(cal->TestBit(kCaloPIDdisp))
1451 FillHistogram("PHOS_Mi_mvsPt_Disp",pi.M(),pi.Pt()) ;
1452 if(cal->TestBit(kCaloPIDtof))
1453 FillHistogram("PHOS_Mi_mvsPt_TOF",pi.M(),pi.Pt()) ;
1454 if(cal->TestBit(kCaloPIDneutral))
1455 FillHistogram("PHOS_Mi_mvsPt_Neutral",pi.M(),pi.Pt()) ;
1456 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp))
1457 FillHistogram("PHOS_Mi_mvsPt_DispNeutral",pi.M(),pi.Pt()) ;
1459 //Vary Conversion cuts
1460 if(cnv->TestBit(kConvOnFly)){
1462 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1463 FillHistogram("PHOS_Mi_mvsPt_OnFly",pi.M(),pi.Pt()) ;
1464 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1465 FillHistogram("PHOS_Mi_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
1466 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1467 FillHistogram("PHOS_Mi_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
1468 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1469 FillHistogram("PHOS_Mi_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
1470 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1471 FillHistogram("PHOS_Mi_mvsPt_On_R120",pi.M(),pi.Pt()) ;
1472 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1473 FillHistogram("PHOS_Mi_mvsPt_On_Z",pi.M(),pi.Pt()) ;
1474 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1475 FillHistogram("PHOS_Mi_mvsPt_On_chi",pi.M(),pi.Pt()) ;
1476 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1477 FillHistogram("PHOS_Mi_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
1478 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1479 FillHistogram("PHOS_Mi_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
1483 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1484 FillHistogram("PHOS_Mi_mvsPt_Offline",pi.M(),pi.Pt()) ;
1485 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1486 FillHistogram("PHOS_Mi_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
1487 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1488 FillHistogram("PHOS_Mi_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
1489 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1490 FillHistogram("PHOS_Mi_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
1491 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1492 FillHistogram("PHOS_Mi_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
1493 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1494 FillHistogram("PHOS_Mi_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
1495 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1496 FillHistogram("PHOS_Mi_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
1497 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1498 FillHistogram("PHOS_Mi_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
1499 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1500 FillHistogram("PHOS_Mi_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
1506 //PHOS module dependent
1507 for(Int_t iPHOS=0; iPHOS<nPHOS;iPHOS++){
1508 TLorentzVector * cal = static_cast<TLorentzVector*>(fPHOSEvent->At(iPHOS)) ;
1510 while(!cal->TestBit(BIT(16+mod)) && mod<5)mod++ ;
1511 TString base("PHOS_Mi_mvsPt_mod") ; base+=mod ;
1513 for(Int_t ev=0; ev<prevConv->GetSize();ev++){
1514 TClonesArray * mixConv = static_cast<TClonesArray*>(prevConv->At(ev)) ;
1515 for(Int_t iConv = 0; iConv<mixConv->GetEntriesFast(); iConv++){
1516 TLorentzVector * cnv = static_cast<TLorentzVector*>(mixConv->At(iConv)) ;
1517 TLorentzVector pi=*cal + *cnv ;
1519 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1520 FillHistogram(full,pi.M(),pi.Pt()) ;
1521 if(cal->TestBit(kCaloPIDdisp)){
1523 FillHistogram(full,pi.M(),pi.Pt()) ;
1525 if(cal->TestBit(kCaloPIDtof)){
1527 FillHistogram(full,pi.M(),pi.Pt()) ;
1529 if(cal->TestBit(kCaloPIDneutral)){
1530 full=base+"_Neutral" ;
1531 FillHistogram(full,pi.M(),pi.Pt()) ;
1533 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
1534 full=base+"_DispNeutral" ;
1535 FillHistogram(full,pi.M(),pi.Pt()) ;
1541 for(Int_t iConv = 0; iConv<nConv; iConv++){
1542 TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
1543 for(Int_t ev=0; ev<prevPHOS->GetSize();ev++){
1544 TClonesArray * mixPHOS = static_cast<TClonesArray*>(prevPHOS->At(ev)) ;
1545 for(Int_t iPHOS=0; iPHOS<mixPHOS->GetEntriesFast();iPHOS++){
1546 TLorentzVector * cal = static_cast<TLorentzVector*>(mixPHOS->At(iPHOS)) ;
1548 while(!cal->TestBit(BIT(16+mod)) && mod<5)mod++ ;
1549 TString base("PHOS_Mi_mvsPt_mod") ; base+=mod ;
1551 TLorentzVector pi=*cal + *cnv ;
1553 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1554 FillHistogram(full,pi.M(),pi.Pt()) ;
1555 if(cal->TestBit(kCaloPIDdisp)){
1557 FillHistogram(full,pi.M(),pi.Pt()) ;
1559 if(cal->TestBit(kCaloPIDtof)){
1561 FillHistogram(full,pi.M(),pi.Pt()) ;
1563 if(cal->TestBit(kCaloPIDneutral)){
1564 full=base+"_Neutral" ;
1565 FillHistogram(full,pi.M(),pi.Pt()) ;
1567 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
1568 full=base+"_DispNeutral" ;
1569 FillHistogram(full,pi.M(),pi.Pt()) ;
1578 for(Int_t iEMCAL=0; iEMCAL<nEMCAL;iEMCAL++){
1579 TLorentzVector * cal = static_cast<TLorentzVector*>(fEMCALEvent->At(iEMCAL)) ;
1581 while(!cal->TestBit(BIT(17+mod)) && mod<6)mod++ ;
1582 TString base("EMCAL_Mi_mvsPt_mod") ; base+=mod ;
1584 for(Int_t ev=0; ev<prevConv->GetSize();ev++){
1585 TClonesArray * mixConv = static_cast<TClonesArray*>(prevConv->At(ev)) ;
1586 for(Int_t iConv = 0; iConv<mixConv->GetEntriesFast(); iConv++){
1587 TLorentzVector * cnv = static_cast<TLorentzVector*>(mixConv->At(iConv)) ;
1588 TLorentzVector pi=*cal + *cnv ;
1590 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1591 FillHistogram(full,pi.M(),pi.Pt()) ;
1592 if(cal->TestBit(kCaloPIDdisp)){
1594 FillHistogram(full,pi.M(),pi.Pt()) ;
1596 if(cal->TestBit(kCaloPIDtof)){
1598 FillHistogram(full,pi.M(),pi.Pt()) ;
1600 if(cal->TestBit(kCaloPIDneutral)){
1601 full=base+"_Neutral" ;
1602 FillHistogram(full,pi.M(),pi.Pt()) ;
1604 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
1605 full=base+"_Neutral" ;
1606 FillHistogram(full,pi.M(),pi.Pt()) ;
1609 if(cnv->TestBit(kConvOnFly)){
1611 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1612 FillHistogram("EMCAL_Mi_mvsPt_OnFly",pi.M(),pi.Pt()) ;
1613 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1614 FillHistogram("EMCAL_Mi_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
1615 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1616 FillHistogram("EMCAL_Mi_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
1617 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1618 FillHistogram("EMCAL_Mi_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
1619 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1620 FillHistogram("EMCAL_Mi_mvsPt_On_R120",pi.M(),pi.Pt()) ;
1621 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1622 FillHistogram("EMCAL_Mi_mvsPt_On_Z",pi.M(),pi.Pt()) ;
1623 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1624 FillHistogram("EMCAL_Mi_mvsPt_On_chi",pi.M(),pi.Pt()) ;
1625 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1626 FillHistogram("EMCAL_Mi_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
1627 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1628 FillHistogram("EMCAL_Mi_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
1632 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1633 FillHistogram("EMCAL_Mi_mvsPt_Offline",pi.M(),pi.Pt()) ;
1634 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1635 FillHistogram("EMCAL_Mi_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
1636 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1637 FillHistogram("EMCAL_Mi_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
1638 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1639 FillHistogram("EMCAL_Mi_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
1640 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1641 FillHistogram("EMCAL_Mi_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
1642 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1643 FillHistogram("EMCAL_Mi_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
1644 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1645 FillHistogram("EMCAL_Mi_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
1646 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1647 FillHistogram("EMCAL_Mi_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
1648 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1649 FillHistogram("EMCAL_Mi_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
1654 for(Int_t iConv = 0; iConv<nConv; iConv++){
1655 TLorentzVector * cnv = static_cast<TLorentzVector*>(fConvEvent->At(iConv)) ;
1656 for(Int_t ev=0; ev<prevEMCAL->GetSize();ev++){
1657 TClonesArray * mixEMCAL = static_cast<TClonesArray*>(prevEMCAL->At(ev)) ;
1658 for(Int_t iEMCAL=0; iEMCAL<mixEMCAL->GetEntriesFast();iEMCAL++){
1659 TLorentzVector * cal = static_cast<TLorentzVector*>(mixEMCAL->At(iEMCAL)) ;
1661 while(!cal->TestBit(BIT(17+mod)) && mod<6)mod++ ;
1662 TString base("EMCAL_Mi_mvsPt_mod") ; base+=mod ;
1664 TLorentzVector pi=*cal + *cnv ;
1666 if(cnv->TestBit(kConvOnFly) && !cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta)){
1667 FillHistogram(full,pi.M(),pi.Pt()) ;
1668 if(cal->TestBit(kCaloPIDdisp)){
1670 FillHistogram(full,pi.M(),pi.Pt()) ;
1672 if(cal->TestBit(kCaloPIDtof)){
1674 FillHistogram(full,pi.M(),pi.Pt()) ;
1676 if(cal->TestBit(kCaloPIDneutral)){
1677 full=base+"_Neutral" ;
1678 FillHistogram(full,pi.M(),pi.Pt()) ;
1680 if(cal->TestBit(kCaloPIDneutral) && cal->TestBit(kCaloPIDdisp)){
1681 full=base+"_DispNeutral" ;
1682 FillHistogram(full,pi.M(),pi.Pt()) ;
1685 if(cnv->TestBit(kConvOnFly)){
1687 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1688 FillHistogram("EMCAL_Mi_mvsPt_OnFly",pi.M(),pi.Pt()) ;
1689 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1690 FillHistogram("EMCAL_Mi_mvsPt_On_Kink",pi.M(),pi.Pt()) ;
1691 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1692 FillHistogram("EMCAL_Mi_mvsPt_On_dEdx",pi.M(),pi.Pt()) ;
1693 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1694 FillHistogram("EMCAL_Mi_mvsPt_On_Prob",pi.M(),pi.Pt()) ;
1695 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1696 FillHistogram("EMCAL_Mi_mvsPt_On_R120",pi.M(),pi.Pt()) ;
1697 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1698 FillHistogram("EMCAL_Mi_mvsPt_On_Z",pi.M(),pi.Pt()) ;
1699 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1700 FillHistogram("EMCAL_Mi_mvsPt_On_chi",pi.M(),pi.Pt()) ;
1701 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1702 FillHistogram("EMCAL_Mi_mvsPt_On_Eta",pi.M(),pi.Pt()) ;
1703 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1704 FillHistogram("EMCAL_Mi_mvsPt_On_Wcut",pi.M(),pi.Pt()) ;
1708 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1709 FillHistogram("EMCAL_Mi_mvsPt_Offline",pi.M(),pi.Pt()) ;
1710 if(cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1711 FillHistogram("EMCAL_Mi_mvsPt_Off_Kink",pi.M(),pi.Pt()) ;
1712 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta))
1713 FillHistogram("EMCAL_Mi_mvsPt_Off_dEdx",pi.M(),pi.Pt()) ;
1714 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && !cnv->TestBit(kConvEta))
1715 FillHistogram("EMCAL_Mi_mvsPt_Off_Prob",pi.M(),pi.Pt()) ;
1716 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvR))
1717 FillHistogram("EMCAL_Mi_mvsPt_Off_R120",pi.M(),pi.Pt()) ;
1718 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvZR))
1719 FillHistogram("EMCAL_Mi_mvsPt_Off_Z",pi.M(),pi.Pt()) ;
1720 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvNDF))
1721 FillHistogram("EMCAL_Mi_mvsPt_Off_chi",pi.M(),pi.Pt()) ;
1722 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb))
1723 FillHistogram("EMCAL_Mi_mvsPt_Off_Eta",pi.M(),pi.Pt()) ;
1724 if(!cnv->TestBit(kConvKink) && cnv->TestBit(kConvdEdx) && cnv->TestBit(kConvProb) && !cnv->TestBit(kConvEta) && cnv->TestBit(kConvPlan))
1725 FillHistogram("EMCAL_Mi_mvsPt_Off_Wcut",pi.M(),pi.Pt()) ;
1733 //Now we either add current events to stack or remove
1734 //Here we have some difficulty: conversion and calorimeter photons have different spectra.
1735 //So to correctly reproduce combinatorial background we have to preserve average number of
1736 //photons of both kinds per event. Therefore we should not reject empty PHOS/EMCAL events
1737 //though it will cost some memory. Reject only those events where no photons anywhere
1739 if((fPHOSEvent->GetEntriesFast()>0 || fEMCALEvent->GetEntriesFast()>0) && fConvEvent->GetEntriesFast()>0){
1740 prevPHOS->AddFirst(fPHOSEvent) ;
1742 prevEMCAL->AddFirst(fEMCALEvent) ;
1744 prevConv->AddFirst(fConvEvent) ;
1746 if(prevPHOS->GetSize()>100){//Remove redundant events
1747 TClonesArray * tmp = static_cast<TClonesArray*>(prevPHOS->Last()) ;
1748 prevPHOS->RemoveLast() ;
1750 tmp = static_cast<TClonesArray*>(prevEMCAL->Last()) ;
1751 prevEMCAL->RemoveLast() ;
1753 tmp = static_cast<TClonesArray*>(prevConv->Last()) ;
1754 prevConv->RemoveLast() ;
1760 //___________________________________________________________________________
1761 void AliAnalysisTaskCaloConv::ProcessMC(){
1763 //fill histograms for efficiensy etc. calculation
1764 if(!fStack) return ;
1766 const Double_t rcut = 1. ; //cut for primary particles
1768 vtx[0] = fESDEvent->GetPrimaryVertex()->GetX();
1769 vtx[1] = fESDEvent->GetPrimaryVertex()->GetY();
1770 vtx[2] = fESDEvent->GetPrimaryVertex()->GetZ();
1772 //---------First pi0s-----------------------------
1773 for (Int_t iTracks = 0; iTracks < fStack->GetNtrack(); iTracks++) {
1774 TParticle* particle = (TParticle *)fStack->Particle(iTracks);
1775 if(particle->GetPdgCode() != 111)
1778 if(particle->R() >rcut)
1781 Double_t pt = particle->Pt() ;
1782 //Total number of pi0 with creation radius <1 cm
1783 FillHistogram("hMC_CaloConv_allPi0",pt) ;
1784 if(TMath::Abs(particle->Eta())<1.)
1785 FillHistogram("hMC_CaloConv_pi0_unitEta",pt) ;
1787 //Check if one of photons converted
1788 if(particle->GetNDaughters()!=2)
1789 continue ; //Do not account Dalitz decays
1791 TParticle * gamma1 = fStack->Particle(particle->GetFirstDaughter());
1792 TParticle * gamma2 = fStack->Particle(particle->GetLastDaughter());
1793 //Number of pi0s decayed into acceptance
1794 Bool_t inAcc1 = (TMath::Abs(gamma1->Eta())<0.9) ;
1795 Bool_t inAcc2 = (TMath::Abs(gamma2->Eta())<0.9) ;
1798 Bool_t hitPHOS1 = fPHOSgeom->ImpactOnEmc(gamma1, mod, z,x) ;
1799 Bool_t hitPHOS2 = fPHOSgeom->ImpactOnEmc(gamma2, mod, z,x) ;
1800 Bool_t hitEMCAL1= fEMCALgeom->Impact(gamma1) ;
1801 Bool_t hitEMCAL2= fEMCALgeom->Impact(gamma2) ;
1803 Bool_t goodPair=kFALSE ;
1804 if((inAcc1 && hitPHOS2) || (inAcc2 && hitPHOS1)){
1805 FillHistogram("hMC_CaloConv_pi0PHOSacc",pt) ;
1808 if((inAcc1 && hitEMCAL2) || (inAcc2 && hitEMCAL1)){
1809 FillHistogram("hMC_CaloConv_pi0EMCALacc",pt) ;
1816 Bool_t converted1 = kFALSE ;
1817 if(gamma1->GetNDaughters()==2){
1818 TParticle * e1=fStack->Particle(gamma1->GetFirstDaughter()) ;
1819 TParticle * e2=fStack->Particle(gamma1->GetLastDaughter()) ;
1820 if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){ //conversion
1822 converted1 = kTRUE ;
1825 Bool_t converted2 = kFALSE ;
1826 if(gamma2->GetNDaughters()==2){
1827 TParticle * e1=fStack->Particle(gamma2->GetFirstDaughter()) ;
1828 TParticle * e2=fStack->Particle(gamma2->GetLastDaughter()) ;
1829 if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){ //conversion
1831 converted2 = kTRUE ;
1835 //Number of pi0s with one photon converted
1836 if((converted1 && !converted2 && hitPHOS2) || (!converted1 && hitPHOS1 && converted2))
1837 FillHistogram("hMC_CaloConv_pi0_PHOS_conv",pt) ;
1839 if((converted1 && !converted2 && hitEMCAL2) || (!converted1 && hitEMCAL1 && converted2))
1840 FillHistogram("hMC_CaloConv_pi0_EMCAL_conv",pt) ;
1843 if(converted1 && converted2) {
1844 FillHistogram("hMC_CaloConv_pi0_bothphot_conv",pt) ;
1848 //photon pointing calorimeter converted
1849 if((converted1 && hitPHOS1 && !hitEMCAL2) || (converted2 && hitPHOS2 && !hitEMCAL1) ||
1850 (converted1 && hitEMCAL1 && !hitPHOS2) || (converted2 && hitEMCAL2 && !hitPHOS1)){
1851 FillHistogram("hMC_CaloConv_pi0__convPhotInCalo",pt) ;
1855 //Converted pi0 with v0 and photon PHOS or EMCAL
1856 Bool_t foundV01=kFALSE, foundV02=kFALSE ;
1857 TLorentzVector pConv ;
1858 for(Int_t iv0=0; iv0<fESDEvent->GetNumberOfV0s();iv0++){
1859 AliESDv0 * v0 = fESDEvent->GetV0(iv0) ;
1861 TParticle * negativeMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetNindex())->GetLabel()));
1862 TParticle * positiveMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetPindex())->GetLabel()));
1864 if(negativeMC && positiveMC){
1865 if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
1869 if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
1872 if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){
1876 TParticle * v0Gamma = fStack->Particle(negativeMC->GetMother(0));
1877 Bool_t same = (v0Gamma == gamma1) ;
1878 TParticle * tmp = v0Gamma ;
1879 while(!same && tmp->GetFirstMother()>=0){
1880 tmp = fStack->Particle(tmp->GetFirstMother());
1881 same = (tmp == gamma1) ;
1885 const AliExternalTrackParam * paramPos = v0->GetParamP() ;
1886 const AliExternalTrackParam * paramNeg = v0->GetParamN() ;
1887 AliKFParticle negKF(*paramNeg,11);
1888 AliKFParticle posKF(*paramPos,-11);
1889 pConv.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
1892 same = (v0Gamma == gamma2) ;
1894 while(!same && tmp->GetFirstMother()>=0){
1895 tmp = fStack->Particle(tmp->GetFirstMother());
1896 same = (tmp == gamma2) ;
1900 const AliExternalTrackParam * paramPos = v0->GetParamP() ;
1901 const AliExternalTrackParam * paramNeg = v0->GetParamN() ;
1902 AliKFParticle negKF(*paramNeg,11);
1903 AliKFParticle posKF(*paramPos,-11);
1904 pConv.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
1910 if((foundV01 && hitPHOS2) || (foundV02 && hitPHOS1)){
1911 FillHistogram("hMC_CaloConv_pi0_v0_PHOSacc",pt) ;
1914 if((foundV01 && hitEMCAL2) || (foundV02 && hitEMCAL1)){
1915 FillHistogram("hMC_CaloConv_pi0_v0_EMCALacc",pt) ;
1922 //Converted pi0 with v0 and cluster in PHOS/EMCAL
1923 Bool_t cluInPHOS = kFALSE,cluInEMCAL=kFALSE ;
1924 TLorentzVector pCalo ;
1925 for (Int_t i=0; i<fESDEvent->GetNumberOfCaloClusters(); i++) {
1926 AliESDCaloCluster * clu = fESDEvent->GetCaloCluster(i);
1927 Int_t iprim = clu->GetLabel() ; //# of particle hit PHOS/EMCAL
1928 Bool_t matched = kFALSE ;
1930 if(iprim==particle->GetFirstDaughter() || iprim==particle->GetLastDaughter()){
1935 iprim=fStack->Particle(iprim)->GetFirstMother() ;
1940 if(clu->IsPHOS() && (hitPHOS1 || hitPHOS2)){
1942 clu->GetMomentum(pCalo ,vtx);
1945 if(!clu->IsPHOS() && (hitEMCAL1 || hitEMCAL2)){
1947 clu->GetMomentum(pCalo ,vtx);
1953 FillHistogram("hMC_CaloConv_pi0_v0_PHOSclu",pt) ;
1954 Double_t m=(pCalo+pConv).M() ;
1955 Double_t ptm=(pCalo+pConv).Pt() ;
1956 FillHistogram("hMC_CaloConv_pi0_v0_PHOSclu_ptRec",ptm) ;
1957 FillHistogram("hMC_CaloConv_pi0_v0_PHOSclu_mvsPt",m,ptm) ;
1960 FillHistogram("hMC_CaloConv_pi0_v0_EMCALclu",pt) ;
1961 Double_t m=(pCalo+pConv).M() ;
1962 Double_t ptm=(pCalo+pConv).Pt() ;
1963 FillHistogram("hMC_CaloConv_pi0_v0_EMCALclu_ptRec",ptm) ;
1964 FillHistogram("hMC_CaloConv_pi0_v0_EMCALclu_mvsPt",m,ptm) ;
1970 //------------- now photons ----------------
1971 for (Int_t iTracks = 0; iTracks < fStack->GetNtrack(); iTracks++) {
1972 TParticle* particle = (TParticle *)fStack->Particle(iTracks);
1973 if(particle->GetPdgCode() != 22)
1976 if(particle->R() >rcut)
1979 if(TMath::Abs(particle->Eta())>0.9)
1982 Double_t pt = particle->Pt() ;
1983 //Total number of pi0 with creation radius <1 cm
1984 FillHistogram("hMC_CaloConv_phot",pt) ;
1988 Bool_t hitPHOS = fPHOSgeom->ImpactOnEmc(particle, mod, z,x) ;
1989 Bool_t hitEMCAL= fEMCALgeom->Impact(particle) ;
1991 //Photons in PHOS/EMCAL acceptance
1993 FillHistogram("hMC_CaloConv_gammaPHOSacc",pt) ;
1995 FillHistogram("hMC_CaloConv_gammaEMCALacc",pt) ;
1997 //number of photons converted
1998 Bool_t converted = kFALSE ;
1999 if(particle->GetNDaughters()==2){
2000 TParticle * e1=fStack->Particle(particle->GetFirstDaughter()) ;
2001 TParticle * e2=fStack->Particle(particle->GetLastDaughter()) ;
2002 if(TMath::Abs(e1->GetPdgCode())==11 && TMath::Abs(e2->GetPdgCode())==11){ //conversion
2008 FillHistogram("hMC_CaloConv_gamma_conv",pt) ;
2010 //Converted photons with V0
2011 TLorentzVector pConv ;
2012 Bool_t foundV0=kFALSE ;
2013 for(Int_t iv0=0; iv0<fESDEvent->GetNumberOfV0s();iv0++){
2014 AliESDv0 * v0 = fESDEvent->GetV0(iv0) ;
2016 TParticle * negativeMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetNindex())->GetLabel()));
2017 TParticle * positiveMC = fStack->Particle(TMath::Abs(fESDEvent->GetTrack(v0->GetPindex())->GetLabel()));
2019 if(negativeMC && positiveMC){
2020 if(negativeMC->GetMother(0) != positiveMC->GetMother(0))
2024 if(TMath::Abs(negativeMC->GetPdgCode())!=11 || TMath::Abs(positiveMC->GetPdgCode())!=11){
2027 if(negativeMC->GetPdgCode()==positiveMC->GetPdgCode()){
2031 TParticle * v0Gamma = fStack->Particle(negativeMC->GetMother(0));
2032 Bool_t same = (v0Gamma == particle) ;
2033 TParticle * tmp = v0Gamma ;
2034 while(!same && tmp->GetFirstMother()>=0){
2035 tmp = fStack->Particle(tmp->GetFirstMother());
2036 same = (tmp == particle) ;
2040 const AliExternalTrackParam * paramPos = v0->GetParamP() ;
2041 const AliExternalTrackParam * paramNeg = v0->GetParamN() ;
2042 AliKFParticle negKF(*paramNeg,11);
2043 AliKFParticle posKF(*paramPos,-11);
2044 pConv.SetXYZM(negKF.Px()+posKF.Px(),negKF.Py()+posKF.Py(),negKF.Pz()+negKF.Pz(),0.) ;
2049 FillHistogram("hMC_CaloConv_gamma_v0",pt) ;
2050 FillHistogram("hMC_CaloConv_gamma_v0_devsE",(particle->Energy()-pConv.E())/particle->Energy(),particle->Energy()) ;
2053 //Registered in PHOS/EMCAL
2054 Bool_t cluInPHOS = kFALSE,cluInEMCAL=kFALSE ;
2055 TLorentzVector pCalo ;
2056 for (Int_t i=0; i<fESDEvent->GetNumberOfCaloClusters(); i++) {
2057 AliESDCaloCluster * clu = fESDEvent->GetCaloCluster(i);
2058 Int_t iprim = clu->GetLabel() ; //# of particle hit PHOS/EMCAL
2059 Bool_t matched = kFALSE ;
2066 iprim=fStack->Particle(iprim)->GetFirstMother() ;
2071 if(clu->IsPHOS() && hitPHOS){
2073 clu->GetMomentum(pCalo ,vtx);
2076 if(!clu->IsPHOS() && hitEMCAL){
2078 clu->GetMomentum(pCalo ,vtx);
2084 FillHistogram("hMC_CaloConv_gamma_PHOSclu",pt) ;
2085 FillHistogram("hMC_CaloConv_gamma_PHOSclu_recE",pCalo.E()) ;
2086 FillHistogram("hMC_CaloConv_gamma_PHOSclu_devsE",(particle->Energy()-pCalo.E())/particle->Energy(),particle->Energy()) ;
2089 FillHistogram("hMC_CaloConv_gamma_EMCALclu",pt) ;
2090 FillHistogram("hMC_CaloConv_gamma_EMCALclu_recE",pCalo.E()) ;
2091 FillHistogram("hMC_CaloConv_gamma_EMCALclu_devsE",(particle->Energy()-pCalo.E())/particle->Energy(),particle->Energy()) ;
2095 //_____________________________________________________________________________
2096 void AliAnalysisTaskCaloConv::FillHistogram(const char * key,Double_t x)const{
2097 TH1F * tmp = dynamic_cast<TH1F*>(fOutputContainer->FindObject(key)) ;
2099 AliError(Form("can not find histogram <%s> ",key)) ;
2102 //_____________________________________________________________________________
2103 void AliAnalysisTaskCaloConv::FillHistogram(const char * key,Double_t x,Double_t y)const{
2104 TObject * tmp = fOutputContainer->FindObject(key) ;
2105 if(tmp->IsA() == TClass::GetClass("TH1F")){
2106 ((TH1F*)tmp)->Fill(x,y) ;
2109 if(tmp->IsA() == TClass::GetClass("TH2F")){
2110 ((TH2F*)tmp)->Fill(x,y) ;
2113 AliError(Form("Calling FillHistogram with 2 parameters for histo <%s> of type %s",key,tmp->IsA())) ;
2117 //_____________________________________________________________________________
2118 void AliAnalysisTaskCaloConv::FillHistogram(const char * key,Double_t x,Double_t y, Double_t z) const{
2119 //Fills 1D histograms with key
2120 TObject * tmp = fOutputContainer->FindObject(key) ;
2121 if(tmp->IsA() == TClass::GetClass("TH2F")){
2122 ((TH2F*)tmp)->Fill(x,y,z) ;
2125 if(tmp->IsA() == TClass::GetClass("TH3F")){
2126 ((TH3F*)tmp)->Fill(x,y,z) ;
2130 //______________________________________________________________________________
2131 Double_t AliAnalysisTaskCaloConv::PlanarityAngle(const AliExternalTrackParam * paramPos,const AliExternalTrackParam * paramNeg)const {
2132 //calculate angle between e+e- plain and perpendicular to MF
2133 //We need sign of MagField to calculate orienation
2135 TVector3 u(paramPos->Px()+paramNeg->Px(),paramPos->Py()+paramNeg->Py(),paramPos->Pz()+paramNeg->Pz()) ;
2137 TVector3 vPos(paramPos->Px(),paramPos->Py(),paramPos->Pz()) ;
2138 TVector3 vNeg(paramNeg->Px(),paramNeg->Py(),paramNeg->Pz()) ;
2139 TVector3 v=vPos.Cross(vNeg) ;
2140 TVector3 w = u.Cross(v);
2142 TVector3 ua=u.Cross(z);
2143 Double_t wa = w.Angle(ua);
2144 Double_t mfield=fESDEvent->GetMagneticField() ;
2146 return wa; //normal field
2148 return TMath::Pi()-wa ; //reverse field