17 #include <TClonesArray.h>
29 #include "AliVCaloCells.h"
30 #include "AliAODEvent.h"
31 #include "AliAODHandler.h"
32 #include "AliAODPWG4Particle.h"
44 fDataMC(0), fDebug(0),
45 fCalorimeter(-1), fCalorimeterString(
""),
46 fCheckFidCut(0), fCheckRealCaloAcc(0),
47 fCheckCaloPID(0), fRecalculateCaloPID(0),
49 fPairTimeCut(200), fTRDSMCovered(-1),
50 fNZvertBin(0), fNrpBin(0),
51 fNCentrBin(0), fNmaxMixEv(0),
52 fDoOwnMix(0), fUseTrackMultBins(0),
53 fFillPileUpHistograms(0), fFillHighMultHistograms(0),
55 fInputAODBranch(0x0), fInputAODName(
""),
56 fOutputAODBranch(0x0), fNewAOD(kFALSE),
57 fOutputAODName(
""), fOutputAODClassName(
""),
58 fAODObjArrayName(
""), fAddToHistogramsName(
""),
59 fCaloPID(0x0), fCaloUtils(0x0),
60 fFidCut(0x0), fHisto(0x0),
61 fIC(0x0), fMCUtils(0x0),
62 fNMS(0x0), fReader(0x0),
63 fStudyClusterOverlapsPerGenerator(0),
93 AliFatal(
"No AOD branch available!!!\n");
101 new((*fOutputAODBranch)[i]) AliAODPWG4Particle(pc);
103 else if(strcmp(
fOutputAODBranch->GetClass()->GetName(),
"AliAODPWG4ParticleCorrelation")==0)
105 new((*fOutputAODBranch)[i]) AliAODPWG4ParticleCorrelation(pc);
109 AliFatal(Form(
"Cannot add an object of type < %s >, to the AOD TClonesArray \n",
fOutputAODBranch->GetClass()->GetName()));
129 else if(trackLabel >= 0 )
150 AliDebug(3,Form(
"AliAnaCaloTrackCorrBaseClass::ConnectInputOutputAODBranches() - Connect Input with name: <%s>; Connect output with name <%s>\n",
fInputAODName.Data(),
fOutputAODName.Data()));
153 AliAODHandler* aodHandler = 0x0;
155 if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
156 if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
157 else aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
164 else if (aodHandler->GetExtensions())
166 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
GetReader()->GetDeltaAODFileName());
226 if ( !clusters )
return 0x0;
228 for(iclus = first; iclus < clusters->GetEntriesFast(); iclus++)
230 AliVCluster *cluster=
dynamic_cast<AliVCluster*
> (clusters->At(iclus));
233 if ( cluster->GetID() == clId )
248 AliDebug(3,Form(
"AliAnaCaloTrackCorrBaseClass::GetAODBranch() - Get Input Branch with name: <%s>; \n",aodName.Data()));
251 AliAODHandler* aodHandler = 0x0;
253 if((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()) outAOD = kTRUE;
254 if(outAOD) aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
255 else aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
261 else if (aodHandler->GetExtensions())
263 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
GetReader()->GetDeltaAODFileName());
266 TClonesArray * aodbranch = (TClonesArray*) aodEvent->FindListObject(aodName);
267 if(aodbranch)
return aodbranch;
331 const Int_t buffersize = 255;
332 char onePar[buffersize] ;
333 snprintf(onePar,buffersize,
"--- AliAnaCaloTrackCorrBaseClass ---\n") ;
335 snprintf(onePar,buffersize,
"Minimal P_t: %2.2f ; Max\n",
fMinPt) ;
337 snprintf(onePar,buffersize,
"Minimal P_t: %2.2f ; Max\n",
fMaxPt) ;
339 snprintf(onePar,buffersize,
"|t_{1}-t_{2}| < %2.2f ; Max\n",
fPairTimeCut) ;
341 snprintf(onePar,buffersize,
"fDataMC =%d (Check MC information, on/off) \n",
fDataMC) ;
343 snprintf(onePar,buffersize,
"fCheckFidCut=%d (Check Fiducial cut selection on/off) \n",
fCheckFidCut) ;
345 snprintf(onePar,buffersize,
"fCheckRealCaloAcc=%d (Check Real Calo Acceptance on/off) \n",
fCheckRealCaloAcc) ;
347 snprintf(onePar,buffersize,
"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",
fCheckCaloPID) ;
349 snprintf(onePar,buffersize,
"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",
fRecalculateCaloPID) ;
351 snprintf(onePar,buffersize,
"fInputAODName =%s Input AOD name \n",
fInputAODName.Data()) ;
355 snprintf(onePar,buffersize,
"fOutputAODName =%s Output AOD name \n",
fOutputAODName.Data()) ;
357 snprintf(onePar,buffersize,
"fOutputAODClassName =%s Output AOD class name \n",
fOutputAODClassName.Data()) ;
360 snprintf(onePar,buffersize,
"fAODObjArrayName =%s Reference arrays in AOD name \n",
fAODObjArrayName.Data()) ;
362 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;
390 Bool_t overlapGener = kFALSE;
391 Bool_t overlapGenerHIJING = kFALSE;
392 Bool_t overlapGenerOther = kFALSE;
397 const UInt_t nlabels = cluster->GetNLabels();
400 for(
UInt_t ilabel = 1; ilabel < nlabels; ilabel++)
402 Int_t label2 = cluster->GetLabels()[ilabel];
409 if(genName2 != genName)
413 if(!genNameBkg.Contains(genName2) && indexBkg != index2)
415 genNameBkg = Form(
"%s_%s",genNameBkg.Data(), genName2.Data());
419 overlapGener = kTRUE;
421 if( genName2.Contains(
"ijing") && !genName.Contains(
"ijing"))
422 overlapGenerHIJING = kTRUE;
424 if(!genName2.Contains(
"ijing"))
425 overlapGenerOther = kTRUE;
429 Int_t genBkgTag = -1;
431 if ( !overlapGener ) genBkgTag = 0;
432 else if ( overlapGenerHIJING && !overlapGenerOther) genBkgTag = 1;
433 else if ( !overlapGenerHIJING && overlapGenerOther) genBkgTag = 2;
434 else if ( overlapGenerHIJING && overlapGenerOther) genBkgTag = 3;
438 Int_t overpdg[nlabels];
439 Int_t overlab[nlabels];
441 Bool_t sameGenOverlap = kFALSE;
442 Bool_t sameGenOverlapHI = kFALSE;
443 for(
Int_t iover = 0; iover < noverlaps; iover++)
449 if ( genName2==genName && index==index2)
451 if ( !genName.Contains(
"ijing") ) sameGenOverlap = kTRUE;
452 else sameGenOverlapHI = kTRUE;
459 if(genBkgTag == 0) genBkgTag = 2;
460 if(genBkgTag == 1) genBkgTag = 3;
464 if(genName.Contains(
"ijing"))
469 if(!overlapGener) genBkgTag = 1;
474 if(!overlapGener) genBkgTag = 0;
487 AliInfo(Form(
"Create AOD branch of %s objects and with name < %s >\n",
546 AliWarning(Form(
"Bin not found for track multiplicity %d",trackMult));
558 Int_t curCentrBin = 0;
569 if((minCent< 0 && maxCent< 0) || minCent>=maxCent)
584 AliDebug(1,Form(
"Current CentrBin %d, centrality %d, n bins %d, max bin from centrality %d",
602 if(epAngle < 0 || epAngle >TMath::Pi())
604 AliWarning(Form(
"Wrong event plane angle : %f \n",epAngle));
608 curRPBin = TMath::Nint(epAngle*(
GetNRPBin()-1)/TMath::Pi());
611 AliDebug(1,Form(
"Current RP bin %d, bin float %f, angle %f, n bins %d",
629 AliDebug(1,Form(
"AliAnaCaloTrackCorrBaseClass::GetEventVzBin() - %d, vz %2.2f, n bins %d",
640 if(iCen<0 || iVz < 0 || iRP < 0)
662 AliDebug(1,Form(
"Bins : cent %d, vz %d, RP %d, event %d/%d",
675 (AliAnalysisManager::GetAnalysisManager())->AddClassDebug(this->ClassName(),
fDebug);
733 for(
Int_t igen = 7; igen < 10; igen++)
736 for(
Int_t igen = 0; igen < 10; igen++)
748 printf(
"New AOD: = %d\n",
fNewAOD);
755 printf(
"Min Photon pT = %2.2f\n",
fMinPt) ;
756 printf(
"Max Photon pT = %3.2f\n",
fMaxPt) ;
761 printf(
"Check MC labels = %d\n",
fDataMC);
763 printf(
"Debug Level = %d\n",
fDebug);
780 else AliFatal(Form(
"Detector < %s > not known!", calo.Data()));
796 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
Int_t GetCocktailGeneratorBackgroundTag(AliVCluster *clus, Int_t mctag, TString &genName, Int_t &index, TString &genNameBkg, Int_t &indexBkg)
virtual ~AliAnaCaloTrackCorrBaseClass()
Destructor.
virtual TObjArray * GetCTSTracks() const
virtual void InitParameters()
Initialize the parameters of the analysis.
virtual AliHeader * GetHeader() const
Int_t fCocktailGenIndeces[10]
Array with indeces of generators to study.
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
Int_t GetCocktailGeneratorAndIndex(Int_t index, TString &nameGen) 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.
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