1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 //_________________________________________________________________________
17 // Base class for CaloTrackCorr analysis algorithms
18 //-- Author: Gustavo Conesa (LNF-INFN, LPSC-Grenoble)
21 //_________________________________________________________________________
24 // --- ROOT system ---
25 #include <TClonesArray.h>
26 //#include <Riostream.h>
28 //---- AliRoot system ----
29 #include "AliAnaCaloTrackCorrBaseClass.h"
30 #include "AliCaloTrackReader.h"
31 #include "AliCalorimeterUtils.h"
32 #include "AliCaloPID.h"
33 #include "AliFiducialCut.h"
34 #include "AliIsolationCut.h"
35 #include "AliMCAnalysisUtils.h"
36 #include "AliNeutralMesonSelection.h"
37 #include "AliVCaloCells.h"
38 #include "AliAODEvent.h"
39 #include "AliAODHandler.h"
40 #include "AliAODPWG4Particle.h"
42 ClassImp(AliAnaCaloTrackCorrBaseClass)
45 //__________________________________________________________
46 AliAnaCaloTrackCorrBaseClass::AliAnaCaloTrackCorrBaseClass() :
48 fDataMC(0), fDebug(0),
49 fCalorimeter(-1), fCalorimeterString(""),
50 fCheckFidCut(0), fCheckRealCaloAcc(0),
51 fCheckCaloPID(0), fRecalculateCaloPID(0),
53 fPairTimeCut(200), fTRDSMCovered(-1),
54 fNZvertBin(0), fNrpBin(0),
55 fNCentrBin(0), fNmaxMixEv(0),
56 fDoOwnMix(0), fUseTrackMultBins(0),
57 fFillPileUpHistograms(0), fFillHighMultHistograms(0),
59 fInputAODBranch(0x0), fInputAODName(""),
60 fOutputAODBranch(0x0), fNewAOD(kFALSE),
61 fOutputAODName(""), fOutputAODClassName(""),
62 fAODObjArrayName(""), fAddToHistogramsName(""),
63 fCaloPID(0x0), fCaloUtils(0x0),
64 fFidCut(0x0), fHisto(0x0),
65 fIC(0x0), fMCUtils(0x0),
66 fNMS(0x0), fReader(0x0)
70 //Initialize parameters
74 //___________________________________________________________
75 AliAnaCaloTrackCorrBaseClass::~AliAnaCaloTrackCorrBaseClass()
77 // Remove all pointers except analysis output pointers.
79 //delete fCaloUtils ; //Already deleted in maker
80 //delete fReader ; //Already deleted in maker
90 //______________________________________________________________________
91 void AliAnaCaloTrackCorrBaseClass::AddAODParticle(AliAODPWG4Particle pc)
93 //Put AOD calo cluster in the AODParticleCorrelation array
97 AliFatal("No AOD branch available!!!\n");
101 Int_t i = fOutputAODBranch->GetEntriesFast();
102 //new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
103 if (strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4Particle")==0)
105 new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
107 else if(strcmp(fOutputAODBranch->GetClass()->GetName(),"AliAODPWG4ParticleCorrelation")==0)
109 new((*fOutputAODBranch)[i]) AliAODPWG4ParticleCorrelation(pc);
113 AliFatal(Form("Cannot add an object of type < %s >, to the AOD TClonesArray \n", fOutputAODBranch->GetClass()->GetName()));
118 //__________________________________________________________________________________________
119 Int_t AliAnaCaloTrackCorrBaseClass::CheckMixedEventVertex(Int_t caloLabel, Int_t trackLabel)
121 // Check vertex in mixed events
123 if (!GetMixedEvent()) return 1; // Not mixed event continue normal processing
129 evt = GetMixedEvent()->EventIndexForCaloCluster(caloLabel) ;
131 else if(trackLabel >= 0 )
133 evt = GetMixedEvent()->EventIndex(trackLabel) ;
136 return 0; // go to next entry in the particle list
139 return 0 ; // to content coverity
141 if (TMath::Abs(GetVertex(evt)[2]) > GetZvertexCut()) return -1; // Vertex out of range process next event
143 return 1 ; // continue processing normally
147 //________________________________________________________________
148 void AliAnaCaloTrackCorrBaseClass::ConnectInputOutputAODBranches()
150 //Recover ouput and input AOD pointers for each event in the maker
153 AliDebug(3,Form("AliAnaCaloTrackCorrBaseClass::ConnectInputOutputAODBranches() - Connect Input with name: <%s>; Connect output with name <%s>\n",fInputAODName.Data(),fOutputAODName.Data()));
155 //Get the AOD handler, if output AOD is created use it, if not get the branches from the input which should be deltaAODs
156 AliAODHandler* aodHandler = 0x0;
157 Bool_t outAOD = kFALSE;
158 if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
159 if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
160 else aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
162 if(!GetReader()->WriteDeltaAODToFile())
164 fOutputAODBranch = (TClonesArray *) (fReader->GetAODBranchList())->FindObject(fOutputAODName);
165 fInputAODBranch = (TClonesArray *) (fReader->GetAODBranchList())->FindObject(fInputAODName);
167 else if (aodHandler->GetExtensions())
169 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName());
172 AliAODEvent *aodEvent = ext->GetAOD();
173 if(fNewAOD)fOutputAODBranch = (TClonesArray*) aodEvent->FindListObject(fOutputAODName);
174 fInputAODBranch = (TClonesArray*) aodEvent->FindListObject(fInputAODName);
175 if(!fOutputAODBranch && fNewAOD) fOutputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
176 if(!fInputAODBranch) fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
179 { // If no Delta AODs, kept in standard branch, to revise.
180 if(fNewAOD && fReader->GetOutputEvent())
182 fOutputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
183 fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
187 fInputAODBranch = (TClonesArray *) fReader->GetInputEvent()->FindListObject(fInputAODName);
188 if(!fInputAODBranch && fReader->GetOutputEvent() )
189 fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);//Try the output event.
194 { // If no Delta AODs, kept in standard branch
195 if(fNewAOD && fReader->GetOutputEvent())
197 fOutputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fOutputAODName);
198 fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);
202 fInputAODBranch = (TClonesArray *) fReader->GetInputEvent()->FindListObject(fInputAODName);
203 if(!fInputAODBranch && fReader->GetOutputEvent())
204 fInputAODBranch = (TClonesArray *) fReader->GetOutputEvent()->FindListObject(fInputAODName);//Try the output event.
208 // if(GetDebug() > 1)
210 // if(fNewAOD && !fOutputAODBranch)
211 // AliInfo(Form("Output Branch <%s>, not found!\n",fOutputAODName.Data()));
212 // if(!fNewAOD && !fInputAODBranch)
213 // AliInfo(Form("Input Branch <%s>, not found!\n",fInputAODName.Data()));
217 //_____________________________________________________________________________________
218 AliVCluster * AliAnaCaloTrackCorrBaseClass::FindCluster(TObjArray* clusters, Int_t id,
219 Int_t & iclus, Int_t first)
221 // Given the cluster ID stored in AliAODPWG4Particle, get the originator cluster and its index in the array
223 if(!clusters) return 0x0;
225 for(iclus = first; iclus < clusters->GetEntriesFast(); iclus++)
227 AliVCluster *cluster= dynamic_cast<AliVCluster*> (clusters->At(iclus));
230 if(cluster->GetID()==id)
235 }// calorimeter clusters loop
241 //______________________________________________________________________________________
242 TClonesArray * AliAnaCaloTrackCorrBaseClass::GetAODBranch(const TString & aodName) const
244 //Recover ouput and input AOD pointers for each event in the maker
248 AliDebug(3,Form("AliAnaCaloTrackCorrBaseClass::GetAODBranch() - Get Input Branch with name: <%s>; \n",aodName.Data()));
250 //Get the AOD handler, if output AOD is created use it, if not get the branches from the input which should be deltaAODs
251 AliAODHandler* aodHandler = 0x0;
252 Bool_t outAOD = kFALSE;
253 if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
254 if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
255 else aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
257 if(!GetReader()->WriteDeltaAODToFile())
259 return (TClonesArray *) (fReader->GetAODBranchList())->FindObject(aodName);
261 else if (aodHandler->GetExtensions())
263 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(GetReader()->GetDeltaAODFileName());
265 AliAODEvent *aodEvent = ext->GetAOD();
266 TClonesArray * aodbranch = (TClonesArray*) aodEvent->FindListObject(aodName);
267 if(aodbranch) return aodbranch;
269 if(outAOD) return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
270 else return (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
273 else{//If no Delta AODs, kept in standard branch, to revise.
274 if(outAOD) return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
275 else return (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
278 else{ //If no Delta AODs, kept in standard branch, to revise.
279 if(outAOD) return (TClonesArray *) fReader->GetOutputEvent()->FindListObject(aodName);
280 else return (TClonesArray *) fReader->GetInputEvent() ->FindListObject(aodName);
285 //_____________________________________________________________
286 TObjArray * AliAnaCaloTrackCorrBaseClass::GetCTSTracks() const
288 //Get list of referenced tracks from reader
290 return fReader->GetCTSTracks();
294 //________________________________________________________________
295 TObjArray * AliAnaCaloTrackCorrBaseClass::GetPHOSClusters() const
297 //Get list of PHOS reference caloclusters from reader
299 return fReader->GetPHOSClusters();
303 //_________________________________________________________________
304 TObjArray * AliAnaCaloTrackCorrBaseClass::GetEMCALClusters() const
306 //Get list of emcal referenced caloclusters from reader
308 return fReader->GetEMCALClusters();
312 //______________________________________________________________________
313 TClonesArray * AliAnaCaloTrackCorrBaseClass::GetAODCaloClusters() const
315 //Get list of all caloclusters in AOD output file
317 return fReader->GetOutputEvent()->GetCaloClusters();
321 //________________________________________________________________
322 TClonesArray * AliAnaCaloTrackCorrBaseClass::GetAODTracks() const
324 //Get list of all tracks in AOD output file
326 return fReader->GetOutputEvent()->GetTracks();
330 //____________________________________________________________
331 TString AliAnaCaloTrackCorrBaseClass::GetBaseParametersList()
333 //Put data member values in string to keep in output container
335 TString parList ; //this will be list of parameters used for this analysis.
336 const Int_t buffersize = 255;
337 char onePar[buffersize] ;
338 snprintf(onePar,buffersize,"--- AliAnaCaloTrackCorrBaseClass ---\n") ;
340 snprintf(onePar,buffersize,"Minimal P_t: %2.2f ; Max\n", fMinPt) ;
342 snprintf(onePar,buffersize,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ;
344 snprintf(onePar,buffersize,"|t_{1}-t_{2}| < %2.2f ; Max\n", fPairTimeCut) ;
346 snprintf(onePar,buffersize,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ;
348 snprintf(onePar,buffersize,"fCheckFidCut=%d (Check Fiducial cut selection on/off) \n",fCheckFidCut) ;
350 snprintf(onePar,buffersize,"fCheckRealCaloAcc=%d (Check Real Calo Acceptance on/off) \n",fCheckRealCaloAcc) ;
352 snprintf(onePar,buffersize,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ;
354 snprintf(onePar,buffersize,"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ;
356 snprintf(onePar,buffersize,"fInputAODName =%s Input AOD name \n",fInputAODName.Data()) ;
360 snprintf(onePar,buffersize,"fOutputAODName =%s Output AOD name \n",fOutputAODName.Data()) ;
362 snprintf(onePar,buffersize,"fOutputAODClassName =%s Output AOD class name \n",fOutputAODClassName.Data()) ;
365 snprintf(onePar,buffersize,"fAODObjArrayName =%s Reference arrays in AOD name \n",fAODObjArrayName.Data()) ;
367 snprintf(onePar,buffersize,"fAddToHistogramsName =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ;
374 //_____________________________________________________________________
375 TClonesArray * AliAnaCaloTrackCorrBaseClass::GetCreateOutputAODBranch()
377 //Create AOD branch filled in the analysis
379 AliInfo(Form("Create AOD branch of %s objects and with name < %s >\n",
380 fOutputAODClassName.Data(),fOutputAODName.Data())) ;
382 TClonesArray * aodBranch = new TClonesArray(fOutputAODClassName, 0);
383 aodBranch->SetName(fOutputAODName);
388 //________________________________________________________
389 Int_t AliAnaCaloTrackCorrBaseClass::GetEventNumber() const
391 //Get current event number
393 return fReader->GetEventNumber() ;
398 //__________________________________________________________
399 AliStack * AliAnaCaloTrackCorrBaseClass::GetMCStack() const
401 //Get stack pointer from reader
403 return fReader->GetStack();
406 //____________________________________________________________
407 AliHeader * AliAnaCaloTrackCorrBaseClass::GetMCHeader() const
409 //Get header pointer from reader
411 return fReader->GetHeader();
415 //____________________________________________________________________________
416 AliGenEventHeader * AliAnaCaloTrackCorrBaseClass::GetMCGenEventHeader() const
418 //Get GenEventHeader pointer from reader
420 return fReader->GetGenEventHeader();
425 //_________________________________________________________________
426 Int_t AliAnaCaloTrackCorrBaseClass::GetTrackMultiplicityBin() const
428 // Track multiplicity bins
430 //curCentrBin = (GetTrackMultiplicity()-1)/5;
431 //if(curCentrBin > GetNCentrBin()-1) curCentrBin=GetNCentrBin()-1;
432 Int_t trackMult = GetReader()->GetTrackMultiplicity();
434 for(Int_t ibin = 0; ibin < GetNTrackMultBin()-1; ibin++)
436 if(trackMult >= fTrackMultBins[ibin] && trackMult < fTrackMultBins[ibin+1]) return ibin;
439 AliWarning(Form("Bin not found for track multiplicity %d",trackMult));
444 //________________________________________________________________
445 Int_t AliAnaCaloTrackCorrBaseClass::GetEventCentralityBin() const
447 // Define the centrality bin for mixing
448 // In pp collisions analysis hardcoded track multiplicities
450 Int_t curCentrBin = 0;
452 if(fUseTrackMultBins) // pp collisions
454 return GetTrackMultiplicityBin();
456 else // Set centrality based on centrality task, PbPb collisions
458 Float_t minCent = GetReader()->GetCentralityBin(0);
459 Float_t maxCent = GetReader()->GetCentralityBin(1);
461 if((minCent< 0 && maxCent< 0) || minCent>=maxCent)
463 curCentrBin = GetEventCentrality() * GetNCentrBin() / GetReader()->GetCentralityOpt();
464 if(curCentrBin==GetNCentrBin())
466 curCentrBin = GetNCentrBin()-1;
467 AliDebug(1,Form("Centrality = %d, put it in last bin \n",GetEventCentrality()));
472 curCentrBin = (Int_t)((GetEventCentrality()-minCent) * GetNCentrBin() / (maxCent-minCent));
473 if(curCentrBin==GetNCentrBin()) curCentrBin = GetNCentrBin()-1;
476 AliDebug(1,Form("Current CentrBin %d, centrality %d, n bins %d, max bin from centrality %d",
477 curCentrBin, GetEventCentrality(), GetNCentrBin(), GetReader()->GetCentralityOpt()));
484 //_______________________________________________________
485 Int_t AliAnaCaloTrackCorrBaseClass::GetEventRPBin() const
491 if(GetNRPBin() > 1 && GetEventPlane())
493 Float_t epAngle = GetEventPlaneAngle();//->GetEventplane(GetEventPlaneMethod(),fReader->GetInputEvent());
495 if(epAngle < 0 || epAngle >TMath::Pi())
497 AliWarning(Form("Wrong event plane angle : %f \n",epAngle));
501 curRPBin = TMath::Nint(epAngle*(GetNRPBin()-1)/TMath::Pi());
502 if(curRPBin >= GetNRPBin()) printf("RP Bin %d out of range %d",curRPBin,GetNRPBin());
504 AliDebug(1,Form("Current RP bin %d, bin float %f, angle %f, n bins %d",
505 curRPBin,epAngle*(GetNRPBin()-1)/TMath::Pi(),epAngle,GetNRPBin()));
512 //_______________________________________________________
513 Int_t AliAnaCaloTrackCorrBaseClass::GetEventVzBin() const
515 // Return Vz bin, divide vertex in GetNZvertBin() bins,
516 // depending on the vertex cut
518 Double_t v[3] = {0,0,0}; //vertex
519 GetReader()->GetVertex(v);
521 Int_t curZvertBin = (Int_t)(0.5*GetNZvertBin()*(v[2]+GetZvertexCut())/GetZvertexCut());
523 AliDebug(1,Form("AliAnaCaloTrackCorrBaseClass::GetEventVzBin() - %d, vz %2.2f, n bins %d",
524 curZvertBin, v[2], GetNZvertBin()));
529 //________________________________________________________________________________________
530 Int_t AliAnaCaloTrackCorrBaseClass::GetEventMixBin(Int_t iCen, Int_t iVz, Int_t iRP) const
532 // Event mixing bin, combination of vz, centrality and reaction plane bins
534 if(iCen<0 || iVz < 0 || iRP < 0)
537 return iCen*GetNZvertBin()*GetNRPBin()+iVz*GetNRPBin()+iRP;
540 //________________________________________________________
541 Int_t AliAnaCaloTrackCorrBaseClass::GetEventMixBin() const
543 // Event mixing bin, combination of vz, centrality and reaction plane bins
546 Int_t iVz = GetEventVzBin();
548 // centrality (PbPb) or tracks multiplicity (pp) bin
549 Int_t iCen = GetEventCentralityBin();
551 // reaction plane bin (PbPb)
552 Int_t iRP = GetEventRPBin();
554 Int_t eventBin = GetEventMixBin(iCen, iVz, iRP);
556 AliDebug(1,Form("Bins : cent %d, vz %d, RP %d, event %d/%d",
557 iCen,iVz, iRP, eventBin, GetNZvertBin()*GetNRPBin()*GetNCentrBin()));
563 //____________________________________________
564 void AliAnaCaloTrackCorrBaseClass::InitDebug()
566 // Init once the debugging level, if requested
568 // Activate debug level in analysis
571 (AliAnalysisManager::GetAnalysisManager())->AddClassDebug(this->ClassName(),fDebug);
573 if( GetMCAnalysisUtils()->GetDebug() >= 0 )
574 (AliAnalysisManager::GetAnalysisManager())->AddClassDebug(GetMCAnalysisUtils()->ClassName(),GetMCAnalysisUtils()->GetDebug());
576 if( GetIsolationCut()->GetDebug() >= 0 )
577 (AliAnalysisManager::GetAnalysisManager())->AddClassDebug(GetIsolationCut() ->ClassName(),GetIsolationCut()->GetDebug());
579 //printf("Debug levels: Ana %d, MC %d, Iso %d\n",fDebug,GetMCAnalysisUtils()->GetDebug(),GetIsolationCut()->GetDebug());
583 //_________________________________________________
584 void AliAnaCaloTrackCorrBaseClass::InitParameters()
586 //Initialize the parameters of the analysis.
589 fCheckCaloPID = kTRUE ;
590 fCheckFidCut = kFALSE ;
591 fCheckRealCaloAcc = kFALSE ;
592 fRecalculateCaloPID = kFALSE ;
593 fMinPt = 0.2 ; //Min pt in particle analysis
594 fMaxPt = 300. ; //Max pt in particle analysis
598 fCalorimeterString = "EMCAL";
599 fCalorimeter = kEMCAL ;
601 fTrackMultBins[0] = 0; fTrackMultBins[1] = 5; fTrackMultBins[2] = 10;
602 fTrackMultBins[3] = 15; fTrackMultBins[4] = 20; fTrackMultBins[5] = 30;
603 fTrackMultBins[6] = 40; fTrackMultBins[7] = 55; fTrackMultBins[8] = 70;
604 for(Int_t ibin=9; ibin < 20; ibin++) fTrackMultBins[ibin] = 10000;
606 //fReader = new AliCaloTrackReader(); //Initialized in maker
607 //fCaloUtils = new AliCalorimeterUtils();//Initialized in maker
610 fOutputAODName = "CaloTrackCorr";
611 fOutputAODClassName = "AliAODPWG4Particle";
612 fInputAODName = "CaloTrackCorr";
613 fAddToHistogramsName = "";
614 fAODObjArrayName = "Ref";
618 //__________________________________________________________________
619 void AliAnaCaloTrackCorrBaseClass::Print(const Option_t * opt) const
621 //Print some relevant parameters set for the analysis
626 printf("New AOD: = %d\n", fNewAOD);
627 printf("Input AOD name: = %s\n", fInputAODName.Data());
628 printf("Output AOD name: = %s\n", fOutputAODName.Data());
629 printf("Output AOD Class name: = %s\n", fOutputAODClassName.Data());
630 printf("Name of reference array : %s\n", fAODObjArrayName.Data());
631 printf("String added histograms name : %s\n", fAddToHistogramsName.Data());
633 printf("Min Photon pT = %2.2f\n", fMinPt) ;
634 printf("Max Photon pT = %3.2f\n", fMaxPt) ;
635 printf("Check PID = %d\n", fCheckCaloPID) ;
636 printf("Recalculate PID = %d\n", fRecalculateCaloPID) ;
637 printf("Check Fiducial cut = %d\n", fCheckFidCut) ;
638 printf("Check Real Calo Acc = %d\n", fCheckRealCaloAcc) ;
639 printf("Check MC labels = %d\n", fDataMC);
640 printf("Make plots? = %d\n", fMakePlots);
641 printf("Debug Level = %d\n", fDebug);
647 //_______________________________________________________________
648 void AliAnaCaloTrackCorrBaseClass::SetCalorimeter(TString & calo)
650 // Set the calorimeter for the analysis
652 fCalorimeterString = calo;
654 if (calo=="EMCAL") fCalorimeter = kEMCAL;
655 else if(calo=="PHOS" ) fCalorimeter = kPHOS;
656 else if(calo=="CTS") fCalorimeter = kCTS;
657 else if(calo=="DCAL") fCalorimeter = kDCAL;
658 else if(calo.Contains("DCAL") && calo.Contains("PHOS")) fCalorimeter = kDCALPHOS;
659 else AliFatal(Form("Detector < %s > not known!", calo.Data()));
663 //___________________________________________________________
664 void AliAnaCaloTrackCorrBaseClass::SetCalorimeter(Int_t calo)
666 // Set the calorimeter for the analysis
670 if (calo==kEMCAL) fCalorimeterString = "EMCAL";
671 else if(calo==kPHOS ) fCalorimeterString = "PHOS";
672 else if(calo==kCTS) fCalorimeterString = "CTS";
673 else if(calo==kDCAL) fCalorimeterString = "DCAL";
674 else if(calo==kDCALPHOS) fCalorimeterString = "DCAL_PHOS";
675 else AliFatal(Form("Detector < %d > not known!", calo));