17 #include <TClonesArray.h>
29 #include "AliVCaloCells.h"
30 #include "AliAODEvent.h"
31 #include "AliAODHandler.h"
32 #include "AliAODPWG4Particle.h"
33 #include "AliMCEvent.h"
45 fDataMC(0), fDebug(0),
46 fCalorimeter(-1), fCalorimeterString(
""),
47 fCheckFidCut(0), fCheckRealCaloAcc(0),
48 fCheckCaloPID(0), fRecalculateCaloPID(0),
50 fPairTimeCut(200), fTRDSMCovered(-1),
51 fNZvertBin(0), fNrpBin(0),
52 fNCentrBin(0), fNmaxMixEv(0),
53 fDoOwnMix(0), fUseTrackMultBins(0),
54 fFillPileUpHistograms(0), fFillHighMultHistograms(0),
56 fInputAODBranch(0x0), fInputAODName(
""),
57 fOutputAODBranch(0x0), fNewAOD(kFALSE),
58 fOutputAODName(
""), fOutputAODClassName(
""),
59 fAODObjArrayName(
""), fAddToHistogramsName(
""),
60 fCaloPID(0x0), fCaloUtils(0x0),
61 fFidCut(0x0), fHisto(0x0),
62 fIC(0x0), fMCUtils(0x0),
63 fNMS(0x0), fReader(0x0),
64 fStudyClusterOverlapsPerGenerator(0),
94 AliFatal(
"No AOD branch available!!!\n");
100 if (strcmp(
fOutputAODBranch->GetClass()->GetName(),
"AliAODPWG4Particle")==0)
102 new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
104 else if(strcmp(
fOutputAODBranch->GetClass()->GetName(),
"AliAODPWG4ParticleCorrelation")==0)
106 new((*fOutputAODBranch)[i]) AliAODPWG4ParticleCorrelation(pc);
110 AliFatal(Form(
"Cannot add an object of type < %s >, to the AOD TClonesArray \n",
fOutputAODBranch->GetClass()->GetName()));
130 else if(trackLabel >= 0 )
151 AliDebug(3,Form(
"AliAnaCaloTrackCorrBaseClass::ConnectInputOutputAODBranches() - Connect Input with name: <%s>; Connect output with name <%s>\n",
fInputAODName.Data(),
fOutputAODName.Data()));
154 AliAODHandler* aodHandler = 0x0;
156 if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
157 if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
158 else aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
165 else if (aodHandler->GetExtensions())
167 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
GetReader()->GetDeltaAODFileName());
227 if ( !clusters )
return 0x0;
229 for(iclus = first; iclus < clusters->GetEntriesFast(); iclus++)
231 AliVCluster *cluster=
dynamic_cast<AliVCluster*
> (clusters->At(iclus));
234 if ( cluster->GetID() == clId )
249 AliDebug(3,Form(
"AliAnaCaloTrackCorrBaseClass::GetAODBranch() - Get Input Branch with name: <%s>; \n",aodName.Data()));
252 AliAODHandler* aodHandler = 0x0;
254 if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
255 if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
256 else aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
262 else if (aodHandler->GetExtensions())
264 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
GetReader()->GetDeltaAODFileName());
267 TClonesArray * aodbranch = (TClonesArray*) aodEvent->FindListObject(aodName);
268 if(aodbranch)
return aodbranch;
332 const Int_t buffersize = 255;
333 char onePar[buffersize] ;
334 snprintf(onePar,buffersize,
"--- AliAnaCaloTrackCorrBaseClass ---\n") ;
336 snprintf(onePar,buffersize,
"Minimal P_t: %2.2f ; Max\n",
fMinPt) ;
338 snprintf(onePar,buffersize,
"Minimal P_t: %2.2f ; Max\n",
fMaxPt) ;
340 snprintf(onePar,buffersize,
"|t_{1}-t_{2}| < %2.2f ; Max\n",
fPairTimeCut) ;
342 snprintf(onePar,buffersize,
"fDataMC =%d (Check MC information, on/off) \n",
fDataMC) ;
344 snprintf(onePar,buffersize,
"fCheckFidCut=%d (Check Fiducial cut selection on/off) \n",
fCheckFidCut) ;
346 snprintf(onePar,buffersize,
"fCheckRealCaloAcc=%d (Check Real Calo Acceptance on/off) \n",
fCheckRealCaloAcc) ;
348 snprintf(onePar,buffersize,
"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",
fCheckCaloPID) ;
350 snprintf(onePar,buffersize,
"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",
fRecalculateCaloPID) ;
352 snprintf(onePar,buffersize,
"fInputAODName =%s Input AOD name \n",
fInputAODName.Data()) ;
356 snprintf(onePar,buffersize,
"fOutputAODName =%s Output AOD name \n",
fOutputAODName.Data()) ;
358 snprintf(onePar,buffersize,
"fOutputAODClassName =%s Output AOD class name \n",
fOutputAODClassName.Data()) ;
361 snprintf(onePar,buffersize,
"fAODObjArrayName =%s Reference arrays in AOD name \n",
fAODObjArrayName.Data()) ;
363 snprintf(onePar,buffersize,
"fAddToHistogramsName =%s String added to beginning of histograms name \n",
fAddToHistogramsName.Data()) ;
381 if(cluster->GetNLabels() == 0 || cluster->GetLabel() < 0 )
return -1;
383 (
GetReader()->
GetMC())->GetCocktailGenerator(cluster->GetLabel(), genName);
387 Bool_t overlapGener = kFALSE;
388 Bool_t overlapGenerHIJING = kFALSE;
389 Bool_t overlapGenerOther = kFALSE;
393 const UInt_t nlabels = cluster->GetNLabels();
396 for(
UInt_t ilabel = 1; ilabel < nlabels; ilabel++)
398 Int_t label2 = cluster->GetLabels()[ilabel];
404 if(genName2 != genName)
408 if(!genNameBkg.Contains(genName2))
409 genNameBkg = Form(
"%s_%s",genNameBkg.Data(), genName2.Data());
411 overlapGener = kTRUE;
413 if( genName2.Contains(
"ijing") && !genName.Contains(
"ijing"))
414 overlapGenerHIJING = kTRUE;
416 if(!genName2.Contains(
"ijing"))
417 overlapGenerOther = kTRUE;
421 Int_t genBkgTag = -1;
423 if ( !overlapGener ) genBkgTag = 0;
424 else if ( overlapGenerHIJING && !overlapGenerOther) genBkgTag = 1;
425 else if ( !overlapGenerHIJING && overlapGenerOther) genBkgTag = 2;
426 else if ( overlapGenerHIJING && overlapGenerOther) genBkgTag = 3;
430 Int_t overpdg[nlabels];
431 Int_t overlab[nlabels];
433 Bool_t sameGenOverlap = kFALSE;
434 Bool_t sameGenOverlapHI = kFALSE;
435 for(
Int_t iover = 0; iover < noverlaps; iover++)
438 (
GetReader()->
GetMC())->GetCocktailGenerator(overlab[iover],genName2);
439 if ( genName2==genName )
441 if ( !genName.Contains(
"ijing") ) sameGenOverlap = kTRUE;
442 else sameGenOverlapHI = kTRUE;
449 if(genBkgTag == 0) genBkgTag = 2;
450 if(genBkgTag == 1) genBkgTag = 3;
454 if(genName.Contains(
"ijing"))
459 if(!overlapGener) genBkgTag = 1;
464 if(!overlapGener) genBkgTag = 0;
477 AliInfo(Form(
"Create AOD branch of %s objects and with name < %s >\n",
536 AliWarning(Form(
"Bin not found for track multiplicity %d",trackMult));
548 Int_t curCentrBin = 0;
559 if((minCent< 0 && maxCent< 0) || minCent>=maxCent)
574 AliDebug(1,Form(
"Current CentrBin %d, centrality %d, n bins %d, max bin from centrality %d",
592 if(epAngle < 0 || epAngle >TMath::Pi())
594 AliWarning(Form(
"Wrong event plane angle : %f \n",epAngle));
598 curRPBin = TMath::Nint(epAngle*(
GetNRPBin()-1)/TMath::Pi());
601 AliDebug(1,Form(
"Current RP bin %d, bin float %f, angle %f, n bins %d",
619 AliDebug(1,Form(
"AliAnaCaloTrackCorrBaseClass::GetEventVzBin() - %d, vz %2.2f, n bins %d",
630 if(iCen<0 || iVz < 0 || iRP < 0)
652 AliDebug(1,Form(
"Bins : cent %d, vz %d, RP %d, event %d/%d",
665 (AliAnalysisManager::GetAnalysisManager())->AddClassDebug(this->ClassName(),
fDebug);
723 for(
Int_t igen = 7; igen < 10; igen++)
735 printf(
"New AOD: = %d\n",
fNewAOD);
742 printf(
"Min Photon pT = %2.2f\n",
fMinPt) ;
743 printf(
"Max Photon pT = %3.2f\n",
fMaxPt) ;
748 printf(
"Check MC labels = %d\n",
fDataMC);
750 printf(
"Debug Level = %d\n",
fDebug);
767 else AliFatal(Form(
"Detector < %s > not known!", calo.Data()));
783 else AliFatal(Form(
"Detector < %d > not known!", calo));
AliFiducialCut * fFidCut
Acceptance cuts detector dependent.
TString fOutputAODName
Name of output AOD branch.
virtual AliHeader * GetMCHeader() const
virtual AliMCEvent * GetMC() const
virtual ~AliAnaCaloTrackCorrBaseClass()
Destructor.
virtual TObjArray * GetCTSTracks() const
virtual void InitParameters()
Initialize the parameters of the analysis.
virtual AliHeader * GetHeader() const
Int_t fTrackMultBins[20]
Multiplicity bins limits. Number of bins set with SetNTrackMult() that calls SetNCentrBin().
Bool_t fCheckFidCut
Do analysis for clusters in defined region.
virtual AliStack * GetMCStack() const
virtual void GetVertex(Double_t vertex[3]) const
virtual TObjArray * GetEMCALClusters() const
Bool_t WriteDeltaAODToFile() const
virtual AliVEvent * GetInputEvent() const
virtual void SetCalorimeter(TString &calo)
Set the calorimeter for the analysis. A string.
virtual Int_t GetNTrackMultBin() const
Number of bins in centrality.
virtual AliIsolationCut * GetIsolationCut()
virtual Float_t GetZvertexCut() const
Maximal number of events for mixin.
virtual Double_t GetEventPlaneAngle() const
Bool_t fRecalculateCaloPID
Recalculate PID or use PID weights in calorimeters.
Float_t fPairTimeCut
Maximum difference between time of cluster pairs (ns).
AliHistogramRanges * fHisto
Histogram ranges container.
virtual AliNeutralMesonSelection * GetNeutralMesonSelection()
virtual AliGenEventHeader * GetGenEventHeader() const
virtual AliGenEventHeader * GetMCGenEventHeader() const
TString fInputAODName
Name of input AOD branch.
virtual Int_t GetEventCentrality() const
virtual Int_t GetEventVzBin() const
virtual void GetVertex(Double_t v[3]) const
TString fCocktailGenNames[10]
Array with name of generators to study, first must be always empty.
AliCaloTrackReader * fReader
Access to ESD/AOD/MC data and other utilities.
TString fCalorimeterString
Calorimeter selection.
virtual Float_t GetCentralityBin(Int_t i) const
virtual Int_t GetEventNumber() const
Base class for CaloTrackCorr analysis algorithms.
virtual TString GetBaseParametersList()
virtual TList * GetAODBranchList() const
virtual Int_t GetEventCentralityBin() const
virtual Int_t GetEventRPBin() const
TClonesArray * fInputAODBranch
! Selected input particles branch.
Float_t fMinPt
Maximum pt of (trigger) particles in the analysis.
Bool_t fUseTrackMultBins
Use track multiplicity and not centrality bins in mixing.
virtual TClonesArray * GetAODBranch(const TString &aodBranchName) const
Recover ouput and input AOD pointers for each event in AliCaloTrackMaker.
virtual Int_t GetCentralityOpt() const
virtual AliAODEvent * GetOutputEvent() const
AliIsolationCut * fIC
Isolation cut utils.
Float_t fMaxPt
Minimum pt of (trigger) particles in the analysis.
AliAnaCaloTrackCorrBaseClass()
virtual AliEventplane * GetEventPlane() const
Bool_t fCheckRealCaloAcc
When analysis of MC particle kinematics, check their hit in Calorimeter in Real Geometry or use AliFi...
TString fOutputAODClassName
Type of aod objects to be stored in the TClonesArray (AliAODPWG4Particle, AliAODPWG4ParticleCorrelati...
virtual Int_t GetNCentrBin() const
Number of bins in reaction plain.
Int_t GetCocktailGeneratorBackgroundTag(AliVCluster *clus, Int_t mctag, TString &genName, TString &genNameBkg)
virtual TObjArray * GetPHOSClusters() const
virtual TObjArray * GetPHOSClusters() const
TObject * FindObject(int bin, const char *nameH, const TList *lst, Bool_t normPerEvent=kTRUE)
virtual TClonesArray * GetAODCaloClusters() const
virtual void AddAODParticle(AliAODPWG4Particle part)
Int_t GetNOverlaps(const Int_t *label, UInt_t nlabels, Int_t mctag, Int_t mesonLabel, AliCaloTrackReader *reader, Int_t *overpdg, Int_t *overlabel)
virtual AliStack * GetStack() const
Bool_t fNewAOD
Flag, new aod branch added to the analysis or not.
Bool_t fMakePlots
Print plots.
AliMCAnalysisUtils * fMCUtils
MonteCarlo Analysis utils.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
virtual Int_t GetNRPBin() const
Number of bins in vertex.
virtual TClonesArray * GetCreateOutputAODBranch()
Create AOD branch filled in the analysis.
virtual AliMCAnalysisUtils * GetMCAnalysisUtils()
AliCaloPID * fCaloPID
PID calculation utils.
virtual Int_t GetEventNumber() const
Int_t fNCocktailGenNames
Number of generators to study.
virtual Int_t GetTrackMultiplicityBin() const
Cut on vertex position.
Int_t fNrpBin
Number of bins in event container for reaction plain.
AliNeutralMesonSelection * fNMS
Neutral Meson Selection utities.
virtual void Print(const Option_t *) const
Print some relevant parameters set for the analysis.
Bool_t fDataMC
Flag to access MC data when using ESD or AOD.
TClonesArray * fOutputAODBranch
! Selected output particles branch.
virtual TClonesArray * GetAODTracks() const
virtual AliVCluster * FindCluster(TObjArray *clusters, Int_t clId, Int_t &iclus, Int_t first=0)
virtual AliCaloTrackReader * GetReader() const
Int_t fNZvertBin
Number of bins in event container for vertex position.
virtual Int_t GetEventMixBin() const
Bool_t fCheckCaloPID
Do analysis for calorimeters.
Int_t fCalorimeter
Calorimeter selection.
TString fAddToHistogramsName
Add this string to histograms name.
Int_t GetTrackMultiplicity() const
virtual TObjArray * GetEMCALClusters() const
DCal, not used so far, just in case.
virtual Int_t CheckMixedEventVertex(Int_t caloLabel, Int_t trackLabel)
virtual Int_t GetNZvertBin() const
TString fAODObjArrayName
Name of ref array kept in a TList in AliAODParticleCorrelation with clusters or track. references.
virtual void ConnectInputOutputAODBranches()
virtual AliMixedEvent * GetMixedEvent() const
virtual TObjArray * GetCTSTracks() const