From 5ae09196c92ec0fe09e82f9d628235815f90483b Mon Sep 17 00:00:00 2001 From: gconesab Date: Sun, 5 Sep 2010 18:34:57 +0000 Subject: [PATCH] AliAnaPi0: Added option to fill mass histograms with different cuts AliCaloPID: PHOS shower shape selection updated, matching of tracks checking method moved from AliAnaPartCorrBase to this class Few COVERITY bad reports corrected. --- PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx | 103 ++-- PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h | 4 +- PWG4/PartCorrBase/AliCaloPID.cxx | 113 +++- PWG4/PartCorrBase/AliCaloPID.h | 3 + PWG4/PartCorrBase/AliIsolationCut.cxx | 95 +-- PWG4/PartCorrDep/AliAnaParticleIsolation.cxx | 272 ++------- PWG4/PartCorrDep/AliAnaPhoton.cxx | 144 +---- PWG4/PartCorrDep/AliAnaPi0.cxx | 545 +++++++++++------- PWG4/PartCorrDep/AliAnaPi0.h | 67 ++- PWG4/PartCorrDep/AliAnaPi0EbE.cxx | 44 +- PWG4/macros/AddTaskPartCorr.C | 1 + 11 files changed, 684 insertions(+), 707 deletions(-) diff --git a/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx b/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx index 58dbce0a4da..005f75ce58e 100755 --- a/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx +++ b/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx @@ -294,43 +294,43 @@ void AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() { printf(" AliAnaPartCorrBaseClass::ConnectInputOutputAODBranches() - Input Branch <%s>, not found!\n",fInputAODName.Data()); } } - -//__________________________________________________________________________ -Bool_t AliAnaPartCorrBaseClass::IsTrackMatched(AliVCluster* cluster) const { - //Check if there is any track attached to this cluster - - Int_t nMatches = cluster->GetNTracksMatched(); -// printf("N matches %d, first match %d\n",nMatches,cluster->GetTrackMatchedIndex()); -// if (cluster->GetTrackMatched(0)) printf("\t matched track id %d\n",((AliVTrack*)cluster->GetTrackMatched(0))->GetID()) ; -// else if(cluster->GetTrackMatchedIndex()>=0) printf("\t matched track id %d\n",((AliVTrack*) GetReader()->GetInputEvent()->GetTrack(cluster->GetTrackMatchedIndex()))->GetID()) ; - - if(fReader->GetDataType()==AliCaloTrackReader::kESD) - { - - if (nMatches > 0) { - if (nMatches == 1 ) { - Int_t iESDtrack = cluster->GetTrackMatchedIndex(); - //printf("Track Matched index %d\n",iESDtrack); - if(iESDtrack==-1) return kFALSE ;// Default value of array, there is no match - else return kTRUE; - }//Just one, check - else return kTRUE ;//More than one, there is a match. - }// > 0 - else return kFALSE; //It does not happen, but in case - - }//ESDs - else - { - //AODs - if(nMatches > 0) return kTRUE; //There is at least one match. - else return kFALSE; - - }//AODs or MC (copy into AOD) - - return kFALSE; - -} - +// +////__________________________________________________________________________ +//Bool_t AliAnaPartCorrBaseClass::IsTrackMatched(AliVCluster* cluster) const { +// //Check if there is any track attached to this cluster +// +// Int_t nMatches = cluster->GetNTracksMatched(); +//// printf("N matches %d, first match %d\n",nMatches,cluster->GetTrackMatchedIndex()); +//// if (cluster->GetTrackMatched(0)) printf("\t matched track id %d\n",((AliVTrack*)cluster->GetTrackMatched(0))->GetID()) ; +//// else if(cluster->GetTrackMatchedIndex()>=0) printf("\t matched track id %d\n",((AliVTrack*) GetReader()->GetInputEvent()->GetTrack(cluster->GetTrackMatchedIndex()))->GetID()) ; +// +// if(fReader->GetDataType()==AliCaloTrackReader::kESD) +// { +// +// if (nMatches > 0) { +// if (nMatches == 1 ) { +// Int_t iESDtrack = cluster->GetTrackMatchedIndex(); +// //printf("Track Matched index %d\n",iESDtrack); +// if(iESDtrack==-1) return kFALSE ;// Default value of array, there is no match +// else return kTRUE; +// }//Just one, check +// else return kTRUE ;//More than one, there is a match. +// }// > 0 +// else return kFALSE; //It does not happen, but in case +// +// }//ESDs +// else +// { +// //AODs +// if(nMatches > 0) return kTRUE; //There is at least one match. +// else return kFALSE; +// +// }//AODs or MC (copy into AOD) +// +// return kFALSE; +// +//} +// //__________________________________________________ TObjArray * AliAnaPartCorrBaseClass::GetAODCTS() const { //Get list of referenced tracks from reader @@ -376,32 +376,33 @@ TString AliAnaPartCorrBaseClass::GetBaseParametersList() { //Put data member values in string to keep in output container TString parList ; //this will be list of parameters used for this analysis. - char onePar[255] ; - sprintf(onePar,"--- AliAnaPartCorrBaseClass ---\n") ; + const Int_t buffersize = 255; + char onePar[buffersize] ; + snprintf(onePar,buffersize,"--- AliAnaPartCorrBaseClass ---\n") ; parList+=onePar ; - sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMinPt) ; + snprintf(onePar,buffersize,"Minimal P_t: %2.2f ; Max\n", fMinPt) ; parList+=onePar ; - sprintf(onePar,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ; + snprintf(onePar,buffersize,"Minimal P_t: %2.2f ; Max\n", fMaxPt) ; parList+=onePar ; - sprintf(onePar,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ; + snprintf(onePar,buffersize,"fDataMC =%d (Check MC information, on/off) \n",fDataMC) ; parList+=onePar ; - sprintf(onePar,"fCheckFidCut=%d (Check Fiducial cut selection on/off) \n",fCheckFidCut) ; + snprintf(onePar,buffersize,"fCheckFidCut=%d (Check Fiducial cut selection on/off) \n",fCheckFidCut) ; parList+=onePar ; - sprintf(onePar,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ; + snprintf(onePar,buffersize,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ; parList+=onePar ; - sprintf(onePar,"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ; + snprintf(onePar,buffersize,"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ; parList+=onePar ; - sprintf(onePar,"fInputAODName =%s Input AOD name \n",fInputAODName.Data()) ; + snprintf(onePar,buffersize,"fInputAODName =%s Input AOD name \n",fInputAODName.Data()) ; parList+=onePar ; if(fNewAOD){ - sprintf(onePar,"fOutputAODName =%s Output AOD name \n",fOutputAODName.Data()) ; + snprintf(onePar,buffersize,"fOutputAODName =%s Output AOD name \n",fOutputAODName.Data()) ; + parList+=onePar ; + snprintf(onePar,buffersize,"fOutputAODClassName =%s Output AOD class name \n",fOutputAODClassName.Data()) ; parList+=onePar ; - sprintf(onePar,"fOutputAODClassName =%s Output AOD class name \n",fOutputAODClassName.Data()) ; - parList+=onePar ; } - sprintf(onePar,"fAODObjArrayName =%s Reference arrays in AOD name \n",fAODObjArrayName.Data()) ; + snprintf(onePar,buffersize,"fAODObjArrayName =%s Reference arrays in AOD name \n",fAODObjArrayName.Data()) ; parList+=onePar ; - sprintf(onePar,"fAddToHistogramsName =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ; + snprintf(onePar,buffersize,"fAddToHistogramsName =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ; parList+=onePar ; return parList; diff --git a/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h b/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h index 05e307f7a06..2628915c782 100755 --- a/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h +++ b/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h @@ -217,10 +217,10 @@ public: virtual Float_t GetHistoAsymmetryMax() const { return fHistoAsymMax ; } virtual AliMixedEvent * GetMixedEvent() ; - Int_t GetNMixedEvent() const { return fNMixedEvent ; } + Int_t GetNMixedEvent() const { return fNMixedEvent ; } Double_t * GetVertex(Int_t i) const { return fVertex[i] ; } - virtual Bool_t IsTrackMatched(AliVCluster * cluster) const ; + virtual Bool_t IsTrackMatched(const AliVCluster * cluster) const { return fCaloPID->IsTrackMatched(cluster); } private: diff --git a/PWG4/PartCorrBase/AliCaloPID.cxx b/PWG4/PartCorrBase/AliCaloPID.cxx index 177947f844f..f52013f57f8 100755 --- a/PWG4/PartCorrBase/AliCaloPID.cxx +++ b/PWG4/PartCorrBase/AliCaloPID.cxx @@ -202,7 +202,7 @@ void AliCaloPID::InitParameters() //fPHOSPi0WeightFormula = //new TFormula("pi0Weight","0.98*(x<65)+ 0.915*(x>=100)+(x>=65 && x-x*(1.95e-3)-x*x*(4.31e-05)+x*x*x*(3.61e-07))"); - fDispCut = 1.5; + fDispCut = 0.25; fTOFCut = 5.e-9; fDebug = -1; @@ -343,38 +343,39 @@ TString AliCaloPID::GetPIDParametersList() { //Put data member values in string to keep in output container TString parList ; //this will be list of parameters used for this analysis. - char onePar[255] ; - sprintf(onePar,"--- AliCaloPID ---\n") ; + const Int_t buffersize = 255; + char onePar[buffersize] ; + snprintf(onePar,buffersize,"--- AliCaloPID ---\n") ; parList+=onePar ; - sprintf(onePar,"fDispCut =%2.2f (Cut on dispersion, used in PID evaluation) \n",fDispCut) ; + snprintf(onePar,buffersize,"fDispCut =%2.2f (Cut on dispersion, used in PID evaluation) \n",fDispCut) ; parList+=onePar ; - sprintf(onePar,"fTOFCut =%e (Cut on TOF, used in PID evaluation) \n",fTOFCut) ; + snprintf(onePar,buffersize,"fTOFCut =%e (Cut on TOF, used in PID evaluation) \n",fTOFCut) ; parList+=onePar ; - sprintf(onePar,"fEMCALPhotonWeight =%2.2f (EMCAL bayesian weight for photons)\n",fEMCALPhotonWeight) ; + snprintf(onePar,buffersize,"fEMCALPhotonWeight =%2.2f (EMCAL bayesian weight for photons)\n",fEMCALPhotonWeight) ; parList+=onePar ; - sprintf(onePar,"fEMCALPi0Weight =%2.2f (EMCAL bayesian weight for pi0)\n",fEMCALPi0Weight) ; + snprintf(onePar,buffersize,"fEMCALPi0Weight =%2.2f (EMCAL bayesian weight for pi0)\n",fEMCALPi0Weight) ; parList+=onePar ; - sprintf(onePar,"fEMCALElectronWeight =%2.2f(EMCAL bayesian weight for electrons)\n",fEMCALElectronWeight) ; + snprintf(onePar,buffersize,"fEMCALElectronWeight =%2.2f(EMCAL bayesian weight for electrons)\n",fEMCALElectronWeight) ; parList+=onePar ; - sprintf(onePar,"fEMCALChargeWeight =%2.2f (EMCAL bayesian weight for charged hadrons)\n",fEMCALChargeWeight) ; + snprintf(onePar,buffersize,"fEMCALChargeWeight =%2.2f (EMCAL bayesian weight for charged hadrons)\n",fEMCALChargeWeight) ; parList+=onePar ; - sprintf(onePar,"fEMCALNeutralWeight =%2.2f (EMCAL bayesian weight for neutral hadrons)\n",fEMCALNeutralWeight) ; + snprintf(onePar,buffersize,"fEMCALNeutralWeight =%2.2f (EMCAL bayesian weight for neutral hadrons)\n",fEMCALNeutralWeight) ; parList+=onePar ; - sprintf(onePar,"fPHOSPhotonWeight =%2.2f (PHOS bayesian weight for photons)\n",fPHOSPhotonWeight) ; + snprintf(onePar,buffersize,"fPHOSPhotonWeight =%2.2f (PHOS bayesian weight for photons)\n",fPHOSPhotonWeight) ; parList+=onePar ; - sprintf(onePar,"fPHOSPi0Weight =%2.2f (PHOS bayesian weight for pi0)\n",fPHOSPi0Weight) ; + snprintf(onePar,buffersize,"fPHOSPi0Weight =%2.2f (PHOS bayesian weight for pi0)\n",fPHOSPi0Weight) ; parList+=onePar ; - sprintf(onePar,"fPHOSElectronWeight =%2.2f(PHOS bayesian weight for electrons)\n",fPHOSElectronWeight) ; + snprintf(onePar,buffersize,"fPHOSElectronWeight =%2.2f(PHOS bayesian weight for electrons)\n",fPHOSElectronWeight) ; parList+=onePar ; - sprintf(onePar,"fPHOSChargeWeight =%2.2f (PHOS bayesian weight for charged hadrons)\n",fPHOSChargeWeight) ; + snprintf(onePar,buffersize,"fPHOSChargeWeight =%2.2f (PHOS bayesian weight for charged hadrons)\n",fPHOSChargeWeight) ; parList+=onePar ; - sprintf(onePar,"fPHOSNeutralWeight =%2.2f (PHOS bayesian weight for neutral hadrons)\n",fPHOSNeutralWeight) ; + snprintf(onePar,buffersize,"fPHOSNeutralWeight =%2.2f (PHOS bayesian weight for neutral hadrons)\n",fPHOSNeutralWeight) ; parList+=onePar ; // if(fPHOSWeightFormula){ -// sprintf(onePar,"PHOS Photon Weight Formula: %s\n",(fPHOSPhotonWeightFormula->GetExpFormula("p")).Data()) ; +// sprintf(onePar,buffersize,"PHOS Photon Weight Formula: %s\n",(fPHOSPhotonWeightFormula->GetExpFormula("p")).Data()) ; // parList+=onePar; -// sprintf(onePar,"PHOS Pi0 Weight Formula: %s\n",(fPHOSPi0WeightFormula->GetExpFormula("p")).Data()) ; +// sprintf(onePar,buffersize,"PHOS Pi0 Weight Formula: %s\n",(fPHOSPi0WeightFormula->GetExpFormula("p")).Data()) ; // parList+=onePar; // } @@ -419,28 +420,88 @@ void AliCaloPID::SetPIDBits(const TString calo, const AliVCluster * cluster, Ali //Set Bits for PID selection //Dispersion/lambdas - Double_t disp=cluster->GetDispersion() ; - // Double_t m20=calo->GetM20() ; - // Double_t m02=calo->GetM02() ; - ph->SetDispBit(dispGetDispersion() ; + Double_t l1 = cluster->GetM20() ; + Double_t l0 = cluster->GetM02() ; + Bool_t isDispOK = kTRUE ; + if(cluster->IsPHOS()){ + + if(l1>= 0 && l0>= 0 && l1 < 0.1 && l0 < 0.1) isDispOK=kFALSE ; + if(l1>= 0 && l0 > 0.5 && l1 < 0.1 && l0 < 1.5) isDispOK=kTRUE ; + if(l1>= 0 && l0 > 2.0 && l1 < 0.1 && l0 < 2.7) isDispOK=kFALSE ; + if(l1>= 0 && l0 > 2.7 && l1 < 0.1 && l0 < 4.0) isDispOK=kFALSE ; + if(l1 > 0.1 && l1 < 0.7 && l0 > 0.7 && l0 < 2.1) isDispOK=kTRUE ; + if(l1 > 0.1 && l1 < 0.3 && l0 > 3.0 && l0 < 5.0) isDispOK=kFALSE ; + if(l1 > 0.3 && l1 < 0.7 && l0 > 2.5 && l0 < 4.0) isDispOK=kFALSE ; + if(l1 > 0.7 && l1 < 1.3 && l0 > 1.0 && l0 < 1.6) isDispOK=kTRUE ; + if(l1 > 0.7 && l1 < 1.3 && l0 > 1.6 && l0 < 3.5) isDispOK=kTRUE ; + if(l1 > 1.3 && l1 < 3.5 && l0 > 1.3 && l0 < 3.5) isDispOK=kTRUE ; + + } + else{//EMCAL + + if(l0 > fDispCut || l0 < 0.) isDispOK = kFALSE; + + } + + ph->SetDispBit(isDispOK) ; //TOF Double_t tof=cluster->GetTOF() ; ph->SetTOFBit(TMath::Abs(tof)GetEmcCpvDistance() ; - Int_t ntr=cluster->GetNTracksMatched(); //number of track matched - ph->SetChargedBit(ntr>0) ; //Temporary cut, should we evaluate distance? + //Charged veto + //Bool_t isNeutral = kTRUE ; + //if(cluster->IsPHOS()) isNeutral = cluster->GetEmcCpvDistance() > 5. ; + //else + Bool_t isNeutral = IsTrackMatched(cluster); + + ph->SetChargedBit(isNeutral); //Set PID pdg ph->SetPdg(GetPdg(calo,cluster->GetPID(),ph->E())); if(fDebug > 0){ - printf("AliCaloPID::SetPIDBits: TOF %e, Dispersion %2.2f, NTracks %d\n",tof , disp, ntr); + printf("AliCaloPID::SetPIDBits: TOF %e, Lambda0 %2.2f, Lambda1 %2.2f\n",tof , l0, l1); printf("AliCaloPID::SetPIDBits: pdg %d, bits: TOF %d, Dispersion %d, Charge %d\n", ph->GetPdg(), ph->GetTOFBit() , ph->GetDispBit() , ph->GetChargedBit()); } } +//__________________________________________________________________________ +Bool_t AliCaloPID::IsTrackMatched(const AliVCluster* cluster) const { + //Check if there is any track attached to this cluster + + Int_t nMatches = cluster->GetNTracksMatched(); + + // printf("N matches %d, first match %d\n",nMatches,cluster->GetTrackMatchedIndex()); + // if (cluster->GetTrackMatched(0)) printf("\t matched track id %d\n",((AliVTrack*)cluster->GetTrackMatched(0))->GetID()) ; + // else if(cluster->GetTrackMatchedIndex()>=0) printf("\t matched track id %d\n",((AliVTrack*) GetReader()->GetInputEvent()->GetTrack(cluster->GetTrackMatchedIndex()))->GetID()) ; + + if(!strcmp("AliESDCaloCluster",Form("%s",cluster->ClassName()))) + { + if (nMatches > 0) { + if (nMatches == 1 ) { + Int_t iESDtrack = cluster->GetTrackMatchedIndex(); + //printf("Track Matched index %d\n",iESDtrack); + if(iESDtrack==-1) return kFALSE ;// Default value of array, there is no match + else return kTRUE; + }//Just one, check + else return kTRUE ;//More than one, there is a match. + }// > 0 + else return kFALSE; //It does not happen, but in case + + }//ESDs + else + { + //AODs + if(nMatches > 0) return kTRUE; //There is at least one match. + else return kFALSE; + + }//AODs or MC (copy into AOD) + + return kFALSE; + +} + diff --git a/PWG4/PartCorrBase/AliCaloPID.h b/PWG4/PartCorrBase/AliCaloPID.h index c461e9186fa..f270cef9b5e 100755 --- a/PWG4/PartCorrBase/AliCaloPID.h +++ b/PWG4/PartCorrBase/AliCaloPID.h @@ -113,6 +113,9 @@ public: // void SetPHOSPi0WeightFormula(TFormula * const pi0) { fPHOSPi0WeightFormula = pi0; } //PID bits setters and getters + + Bool_t IsTrackMatched(const AliVCluster * cluster) const ; + void SetDispersionCut(Float_t dcut ) {fDispCut = dcut; } Float_t GetDispersionCut() const {return fDispCut ;} diff --git a/PWG4/PartCorrBase/AliIsolationCut.cxx b/PWG4/PartCorrBase/AliIsolationCut.cxx index 6efed3e5f37..c17d73dd4b2 100755 --- a/PWG4/PartCorrBase/AliIsolationCut.cxx +++ b/PWG4/PartCorrBase/AliIsolationCut.cxx @@ -86,19 +86,20 @@ TString AliIsolationCut::GetICParametersList() //Put data member values in string to keep in output container TString parList ; //this will be list of parameters used for this analysis. - char onePar[255] ; + const Int_t buffersize = 255; + char onePar[buffersize] ; - sprintf(onePar,"--- AliIsolationCut ---\n") ; + snprintf(onePar,buffersize,"--- AliIsolationCut ---\n") ; parList+=onePar ; - sprintf(onePar,"fConeSize: (isolation cone size) %1.2f\n",fConeSize) ; + snprintf(onePar,buffersize,"fConeSize: (isolation cone size) %1.2f\n",fConeSize) ; parList+=onePar ; - sprintf(onePar,"fPtThreshold =%1.2f (isolation pt threshold) \n",fPtThreshold) ; + snprintf(onePar,buffersize,"fPtThreshold =%1.2f (isolation pt threshold) \n",fPtThreshold) ; parList+=onePar ; - sprintf(onePar,"fPtFraction=%1.2f (isolation pt threshold fraction ) \n",fPtFraction) ; + snprintf(onePar,buffersize,"fPtFraction=%1.2f (isolation pt threshold fraction ) \n",fPtFraction) ; parList+=onePar ; - sprintf(onePar,"fICMethod=%d (isolation cut case) \n",fICMethod) ; + snprintf(onePar,buffersize,"fICMethod=%d (isolation cut case) \n",fICMethod) ; parList+=onePar ; - sprintf(onePar,"fPartInCone=%d \n",fPartInCone) ; + snprintf(onePar,buffersize,"fPartInCone=%d \n",fPartInCone) ; parList+=onePar ; return parList; @@ -134,7 +135,7 @@ void AliIsolationCut::MakeIsolationCut(TObjArray * const plCTS, TObjArray * co n = 0 ; coneptsum = 0.; isolated = kFALSE; - + //Initialize the array with refrences TObjArray * refclusters = 0x0; TObjArray * reftracks = 0x0; @@ -158,19 +159,19 @@ void AliIsolationCut::MakeIsolationCut(TObjArray * const plCTS, TObjArray * co rad = TMath::Sqrt((eta-etaC)*(eta-etaC)+ (phi-phiC)*(phi-phiC)); if(rad < fConeSize){ - if(fillAOD) { - ntrackrefs++; - if(ntrackrefs == 1){ - reftracks = new TObjArray(0); - reftracks->SetName(aodArrayRefName+"Tracks"); - reftracks->SetOwner(kFALSE); - } - reftracks->Add(track); - } - //printf("charged in isolation cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad); - coneptsum+=pt; - if(pt > fPtThreshold ) n++; - if(pt > fPtFraction*ptC ) nfrac++; + if(fillAOD) { + ntrackrefs++; + if(ntrackrefs == 1){ + reftracks = new TObjArray(0); + reftracks->SetName(aodArrayRefName+"Tracks"); + reftracks->SetOwner(kFALSE); + } + reftracks->Add(track); + } + //printf("charged in isolation cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad); + coneptsum+=pt; + if(pt > fPtThreshold ) n++; + if(pt > fPtFraction*ptC ) nfrac++; } }// charged particle loop }//Tracks @@ -178,14 +179,14 @@ void AliIsolationCut::MakeIsolationCut(TObjArray * const plCTS, TObjArray * co //Check neutral particles in cone. if(plNe && (fPartInCone==kOnlyNeutral || fPartInCone==kNeutralAndCharged)){ - //Get vertex for photon momentum calculation - Double_t vertex[] = {0,0,0} ; //vertex ; - Double_t vertex2[] = {0,0,0} ; //vertex second AOD input ; - if(!reader->GetDataType()== AliCaloTrackReader::kMC) - { - reader->GetVertex(vertex); - //if(reader->GetSecondInputAODTree()) reader->GetSecondInputAODVertex(vertex2); - } + //Get vertex for photon momentum calculation + Double_t vertex[] = {0,0,0} ; //vertex ; + Double_t vertex2[] = {0,0,0} ; //vertex second AOD input ; + if(reader->GetDataType()!= AliCaloTrackReader::kMC) + { + reader->GetVertex(vertex); + //if(reader->GetSecondInputAODTree()) reader->GetSecondInputAODVertex(vertex2); + } TLorentzVector mom ; for(Int_t ipr = 0;ipr < plNe->GetEntries() ; ipr ++ ){ AliVCluster * calo = (AliVCluster *)(plNe->At(ipr)) ; @@ -196,8 +197,8 @@ void AliIsolationCut::MakeIsolationCut(TObjArray * const plCTS, TObjArray * co if(calo->GetNTracksMatched() > 0) continue ; //Input from second AOD? Int_t input = 0; -// if (pCandidate->GetDetector() == "EMCAL" && reader->GetAODEMCALNormalInputEntries() <= ipr) input = 1 ; -// else if(pCandidate->GetDetector() == "PHOS" && reader->GetAODPHOSNormalInputEntries() <= ipr) input = 1; + // if (pCandidate->GetDetector() == "EMCAL" && reader->GetAODEMCALNormalInputEntries() <= ipr) input = 1 ; + // else if(pCandidate->GetDetector() == "PHOS" && reader->GetAODPHOSNormalInputEntries() <= ipr) input = 1; //Get Momentum vector, if (input == 0) calo->GetMomentum(mom,vertex) ;//Assume that come from vertex in straight line @@ -211,19 +212,19 @@ void AliIsolationCut::MakeIsolationCut(TObjArray * const plCTS, TObjArray * co //Check if there is any particle inside cone with pt larger than fPtThreshold rad = TMath::Sqrt((eta-etaC)*(eta-etaC)+ (phi-phiC)*(phi-phiC)); if(rad < fConeSize){ - if(fillAOD) { - nclusterrefs++; - if(nclusterrefs==1){ - refclusters = new TObjArray(0); - refclusters->SetName(aodArrayRefName+"Clusters"); - refclusters->SetOwner(kFALSE); - } - refclusters->Add(calo); - } - //printf("neutral in isolation cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad); - coneptsum+=pt; - if(pt > fPtThreshold ) n++; - if(pt > fPtFraction*ptC ) nfrac++; + if(fillAOD) { + nclusterrefs++; + if(nclusterrefs==1){ + refclusters = new TObjArray(0); + refclusters->SetName(aodArrayRefName+"Clusters"); + refclusters->SetOwner(kFALSE); + } + refclusters->Add(calo); + } + //printf("neutral in isolation cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad); + coneptsum+=pt; + if(pt > fPtThreshold ) n++; + if(pt > fPtFraction*ptC ) nfrac++; }//in cone }// neutral particle loop }//neutrals @@ -235,7 +236,7 @@ void AliIsolationCut::MakeIsolationCut(TObjArray * const plCTS, TObjArray * co if(refclusters) pCandidate->AddObjArray(refclusters); if(reftracks) pCandidate->AddObjArray(reftracks); } - + //Check isolation, depending on method. if( fICMethod == kPtThresIC){ if(n==0) isolated = kTRUE ; @@ -251,10 +252,10 @@ void AliIsolationCut::MakeIsolationCut(TObjArray * const plCTS, TObjArray * co if(coneptsum < fPtFraction*ptC) isolated = kTRUE ; } - + //if(refclusters) delete refclusters; //if(reftracks) delete reftracks; - + } //__________________________________________________________________ diff --git a/PWG4/PartCorrDep/AliAnaParticleIsolation.cxx b/PWG4/PartCorrDep/AliAnaParticleIsolation.cxx index adce75d7f62..da3d4e72d16 100755 --- a/PWG4/PartCorrDep/AliAnaParticleIsolation.cxx +++ b/PWG4/PartCorrDep/AliAnaParticleIsolation.cxx @@ -113,166 +113,6 @@ ClassImp(AliAnaParticleIsolation) } -/* -//____________________________________________________________________________ -AliAnaParticleIsolation::AliAnaParticleIsolation(const AliAnaParticleIsolation & g) : - AliAnaPartCorrBaseClass(g), fCalorimeter(g.fCalorimeter), - fReMakeIC(g.fReMakeIC), fMakeSeveralIC(g.fMakeSeveralIC), fMakeInvMass(g.fMakeInvMass), - fhPtIso(g.fhPtIso),fhPhiIso(g.fhPhiIso),fhEtaIso(g.fhEtaIso), - fhConeSumPt(g.fhConeSumPt), fhPtInCone(g.fhPtInCone), - //Several IC - fNCones(g.fNCones),fNPtThresFrac(g.fNPtThresFrac), fConeSizes(), fPtThresholds(), fPtFractions(), - fhPtThresIsolated(), fhPtFracIsolated(), fhPtSumIsolated(), - //MC - fhPtIsoPrompt(g.fhPtIsoPrompt),fhPhiIsoPrompt(g.fhPhiIsoPrompt),fhEtaIsoPrompt(g.fhEtaIsoPrompt), - fhPtThresIsolatedPrompt(), fhPtFracIsolatedPrompt(), fhPtSumIsolatedPrompt(), - fhPtIsoFragmentation(g.fhPtIsoFragmentation),fhPhiIsoFragmentation(g.fhPhiIsoFragmentation),fhEtaIsoFragmentation(g.fhEtaIsoFragmentation), - fhPtThresIsolatedFragmentation(), fhPtFracIsolatedFragmentation(), fhPtSumIsolatedFragmentation(), - fhPtIsoPi0Decay(g.fhPtIsoPi0Decay),fhPhiIsoPi0Decay(g.fhPhiIsoPi0Decay),fhEtaIsoPi0Decay(g.fhEtaIsoPi0Decay), - fhPtThresIsolatedPi0Decay(), fhPtFracIsolatedPi0Decay(), fhPtSumIsolatedPi0Decay(), - fhPtIsoOtherDecay(g.fhPtIsoOtherDecay),fhPhiIsoOtherDecay(g.fhPhiIsoOtherDecay),fhEtaIsoOtherDecay(g.fhEtaIsoOtherDecay), - fhPtThresIsolatedOtherDecay(), fhPtFracIsolatedOtherDecay(), fhPtSumIsolatedOtherDecay(), - fhPtIsoConversion(g. fhPtIsoConversion),fhPhiIsoConversion(g.fhPhiIsoConversion),fhEtaIsoConversion(g.fhEtaIsoConversion), - fhPtThresIsolatedConversion(), fhPtFracIsolatedConversion(), fhPtSumIsolatedConversion(), - fhPtIsoUnknown(g.fhPtIsoUnknown),fhPhiIsoUnknown(g.fhPhiIsoUnknown),fhEtaIsoUnknown(g.fhEtaIsoUnknown), - fhPtThresIsolatedUnknown(), fhPtFracIsolatedUnknown(), fhPtSumIsolatedUnknown(), - //Histograms - fHistoNPtSumBins(g.fHistoNPtSumBins), fHistoPtSumMax(g.fHistoPtSumMax), fHistoPtSumMin(g.fHistoPtSumMax), - fHistoNPtInConeBins(g.fHistoNPtInConeBins), fHistoPtInConeMax(g.fHistoPtInConeMax), fHistoPtInConeMin(g.fHistoPtInConeMin) -{ - // cpy ctor - - //Several IC - for(Int_t i = 0; i < fNCones ; i++){ - fConeSizes[i] = g.fConeSizes[i]; - fhPtSumIsolated[i] = g.fhPtSumIsolated[i]; - - fhPtSumIsolatedPrompt[i] = g.fhPtSumIsolatedPrompt[i]; - fhPtSumIsolatedFragmentation[i] = g.fhPtSumIsolatedFragmentation[i]; - fhPtSumIsolatedPi0Decay[i] = g.fhPtSumIsolatedPi0Decay[i]; - fhPtSumIsolatedOtherDecay[i] = g.fhPtSumIsolatedOtherDecay[i]; - fhPtSumIsolatedConversion[i] = g.fhPtSumIsolatedConversion[i]; - fhPtSumIsolatedUnknown[i] = g.fhPtSumIsolatedUnknown[i]; - - for(Int_t j = 0; j < fNPtThresFrac ; j++){ - fhPtThresIsolated[i][j] = g.fhPtThresIsolated[i][j]; - fhPtFracIsolated[i][j] = g.fhPtFracIsolated[i][j]; - - fhPtThresIsolatedPrompt[i][j] = g.fhPtThresIsolatedPrompt[i][j]; - fhPtThresIsolatedFragmentation[i][j] = g.fhPtThresIsolatedFragmentation[i][j]; - fhPtThresIsolatedPi0Decay[i][j] = g.fhPtThresIsolatedPi0Decay[i][j]; - fhPtThresIsolatedOtherDecay[i][j] = g.fhPtThresIsolatedOtherDecay[i][j]; - fhPtThresIsolatedConversion[i][j] = g.fhPtThresIsolatedConversion[i][j]; - fhPtThresIsolatedUnknown[i][j] = g.fhPtThresIsolatedUnknown[i][j]; - - fhPtFracIsolatedPrompt[i][j] = g.fhPtFracIsolatedPrompt[i][j]; - fhPtFracIsolatedFragmentation[i][j] = g.fhPtFracIsolatedFragmentation[i][j]; - fhPtFracIsolatedPi0Decay[i][j] = g.fhPtFracIsolatedPi0Decay[i][j]; - fhPtFracIsolatedOtherDecay[i][j] = g.fhPtFracIsolatedOtherDecay[i][j]; - fhPtFracIsolatedConversion[i][j] = g.fhPtFracIsolatedConversion[i][j]; - fhPtFracIsolatedUnknown[i][j] = g.fhPtFracIsolatedUnknown[i][j]; - - } - } - - for(Int_t i = 0; i < fNPtThresFrac ; i++){ - fPtFractions[i]= g.fPtFractions[i]; - fPtThresholds[i]= g.fPtThresholds[i]; - } - -} - -//_________________________________________________________________________ -AliAnaParticleIsolation & AliAnaParticleIsolation::operator = (const AliAnaParticleIsolation & g) -{ - // assignment operator - - if(&g == this) return *this; - - fReMakeIC = g.fReMakeIC ; - fMakeSeveralIC = g.fMakeSeveralIC ; - fMakeInvMass = g.fMakeInvMass ; - fCalorimeter = g.fCalorimeter ; - - fhConeSumPt = g.fhConeSumPt ; - fhPtInCone = g.fhPtInCone; - - fhPtIso = g.fhPtIso ; - fhPhiIso = g.fhPhiIso ; - fhEtaIso = g.fhEtaIso ; - - fhPtIsoPrompt = g.fhPtIsoPrompt; - fhPhiIsoPrompt = g.fhPhiIsoPrompt; - fhEtaIsoPrompt = g.fhEtaIsoPrompt; - fhPtIsoFragmentation = g.fhPtIsoFragmentation; - fhPhiIsoFragmentation = g.fhPhiIsoFragmentation; - fhEtaIsoFragmentation = g.fhEtaIsoFragmentation; - fhPtIsoPi0Decay = g.fhPtIsoPi0Decay; - fhPhiIsoPi0Decay = g.fhPhiIsoPi0Decay; - fhEtaIsoPi0Decay = g.fhEtaIsoPi0Decay; - fhPtIsoOtherDecay = g.fhPtIsoOtherDecay; - fhPhiIsoOtherDecay = g.fhPhiIsoOtherDecay; - fhEtaIsoOtherDecay = g.fhEtaIsoOtherDecay; - fhPtIsoConversion = g. fhPtIsoConversion; - fhPhiIsoConversion = g.fhPhiIsoConversion; - fhEtaIsoConversion = g.fhEtaIsoConversion; - fhPtIsoUnknown = g.fhPtIsoUnknown; - fhPhiIsoUnknown = g.fhPhiIsoUnknown; - fhEtaIsoUnknown = g.fhEtaIsoUnknown; - - //Several IC - fNCones = g.fNCones ; - fNPtThresFrac = g.fNPtThresFrac ; - - for(Int_t i = 0; i < fNCones ; i++){ - fConeSizes[i] = g.fConeSizes[i]; - fhPtSumIsolated[i] = g.fhPtSumIsolated[i] ; - - fhPtSumIsolatedPrompt[i] = g.fhPtSumIsolatedPrompt[i]; - fhPtSumIsolatedFragmentation[i] = g.fhPtSumIsolatedFragmentation[i]; - fhPtSumIsolatedPi0Decay[i] = g.fhPtSumIsolatedPi0Decay[i]; - fhPtSumIsolatedOtherDecay[i] = g.fhPtSumIsolatedOtherDecay[i]; - fhPtSumIsolatedConversion[i] = g.fhPtSumIsolatedConversion[i]; - fhPtSumIsolatedUnknown[i] = g.fhPtSumIsolatedUnknown[i]; - - for(Int_t j = 0; j < fNPtThresFrac ; j++){ - fhPtThresIsolated[i][j] = g.fhPtThresIsolated[i][j] ; - fhPtFracIsolated[i][j] = g.fhPtFracIsolated[i][j] ; - - fhPtThresIsolatedPrompt[i][j] = g.fhPtThresIsolatedPrompt[i][j]; - fhPtThresIsolatedFragmentation[i][j] = g.fhPtThresIsolatedFragmentation[i][j]; - fhPtThresIsolatedPi0Decay[i][j] = g.fhPtThresIsolatedPi0Decay[i][j]; - fhPtThresIsolatedOtherDecay[i][j] = g.fhPtThresIsolatedOtherDecay[i][j]; - fhPtThresIsolatedConversion[i][j] = g.fhPtThresIsolatedConversion[i][j]; - fhPtThresIsolatedUnknown[i][j] = g.fhPtThresIsolatedUnknown[i][j]; - - fhPtFracIsolatedPrompt[i][j] = g.fhPtFracIsolatedPrompt[i][j]; - fhPtFracIsolatedFragmentation[i][j] = g.fhPtFracIsolatedFragmentation[i][j]; - fhPtFracIsolatedPi0Decay[i][j] = g.fhPtFracIsolatedPi0Decay[i][j]; - fhPtFracIsolatedOtherDecay[i][j] = g.fhPtFracIsolatedOtherDecay[i][j]; - fhPtFracIsolatedConversion[i][j] = g.fhPtFracIsolatedConversion[i][j]; - fhPtFracIsolatedUnknown[i][j] = g.fhPtFracIsolatedUnknown[i][j]; - - } - } - - for(Int_t i = 0; i < fNPtThresFrac ; i++){ - fPtThresholds[i]= g.fPtThresholds[i]; - fPtFractions[i]= g.fPtFractions[i]; - } - - - fHistoNPtSumBins = g.fHistoNPtSumBins; - fHistoPtSumMax = g.fHistoPtSumMax; - fHistoPtSumMin = g.fHistoPtSumMax; - fHistoNPtInConeBins = g.fHistoNPtInConeBins; - fHistoPtInConeMax = g.fHistoPtInConeMax; - fHistoPtInConeMin = g.fHistoPtInConeMin; - - return *this; - -} -*/ //____________________________________________________________________________ AliAnaParticleIsolation::~AliAnaParticleIsolation() @@ -314,35 +154,36 @@ TObjString * AliAnaParticleIsolation::GetAnalysisCuts() { //Save parameters used for analysis TString parList ; //this will be list of parameters used for this analysis. - char onePar[255] ; + const Int_t buffersize = 255; + char onePar[buffersize] ; - sprintf(onePar,"--- AliAnaParticleIsolation ---\n") ; + snprintf(onePar, buffersize,"--- AliAnaParticleIsolation ---\n") ; parList+=onePar ; - sprintf(onePar,"Calorimeter: %s\n",fCalorimeter.Data()) ; + snprintf(onePar, buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ; parList+=onePar ; - sprintf(onePar,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ; + snprintf(onePar, buffersize,"fReMakeIC =%d (Flag for reisolation during histogram filling) \n",fReMakeIC) ; parList+=onePar ; - sprintf(onePar,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ; + snprintf(onePar, buffersize,"fMakeSeveralIC=%d (Flag for isolation with several cuts at the same time ) \n",fMakeSeveralIC) ; parList+=onePar ; - sprintf(onePar,"fMakeInvMass=%d (Flag for rejection of candidates with a pi0 inv mass pair) \n",fMakeInvMass) ; + snprintf(onePar, buffersize,"fMakeInvMass=%d (Flag for rejection of candidates with a pi0 inv mass pair) \n",fMakeInvMass) ; parList+=onePar ; if(fMakeSeveralIC){ - sprintf(onePar,"fNCones =%d (Number of cone sizes) \n",fNCones) ; + snprintf(onePar, buffersize,"fNCones =%d (Number of cone sizes) \n",fNCones) ; parList+=onePar ; - sprintf(onePar,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ; + snprintf(onePar, buffersize,"fNPtThresFrac=%d (Flag for isolation with several cuts at the same time ) \n",fNPtThresFrac) ; parList+=onePar ; for(Int_t icone = 0; icone < fNCones ; icone++){ - sprintf(onePar,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ; + snprintf(onePar, buffersize,"fConeSizes[%d]=%1.2f (isolation cone size) \n",icone, fConeSizes[icone]) ; parList+=onePar ; } for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++){ - sprintf(onePar,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ; + snprintf(onePar, buffersize,"fPtThresholds[%d]=%1.2f (isolation pt threshold) \n",ipt, fPtThresholds[ipt]) ; parList+=onePar ; } for(Int_t ipt = 0; ipt < fNPtThresFrac ; ipt++){ - sprintf(onePar,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ; + snprintf(onePar, buffersize,"fPtFractions[%d]=%1.2f (isolation pt fraction threshold) \n",ipt, fPtFractions[ipt]) ; parList+=onePar ; } } @@ -521,54 +362,55 @@ TList * AliAnaParticleIsolation::GetCreateOutputObjects() } if(fMakeSeveralIC){ - char name[128]; - char title[128]; + const Int_t buffersize = 255; + char name[buffersize]; + char title[buffersize]; for(Int_t icone = 0; iconeSetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolated[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolated[icone]) ; if(IsDataMC()){ - sprintf(name,"hPtSumPrompt_Cone_%d",icone); - sprintf(title,"Candidate Prompt cone sum p_{T} for cone size %d vs candidate p_{T}",icone); + snprintf(name, buffersize,"hPtSumPrompt_Cone_%d",icone); + snprintf(title, buffersize,"Candidate Prompt cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedPrompt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedPrompt[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedPrompt[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedPrompt[icone]) ; - sprintf(name,"hPtSumFragmentation_Cone_%d",icone); - sprintf(title,"Candidate Fragmentation cone sum p_{T} for cone size %d vs candidate p_{T}",icone); + snprintf(name, buffersize,"hPtSumFragmentation_Cone_%d",icone); + snprintf(title, buffersize,"Candidate Fragmentation cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedFragmentation[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedFragmentation[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedFragmentation[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedFragmentation[icone]) ; - sprintf(name,"hPtSumPi0Decay_Cone_%d",icone); - sprintf(title,"Candidate Pi0Decay cone sum p_{T} for cone size %d vs candidate p_{T}",icone); + snprintf(name, buffersize,"hPtSumPi0Decay_Cone_%d",icone); + snprintf(title, buffersize,"Candidate Pi0Decay cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedPi0Decay[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedPi0Decay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedPi0Decay[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedPi0Decay[icone]) ; - sprintf(name,"hPtSumOtherDecay_Cone_%d",icone); - sprintf(title,"Candidate OtherDecay cone sum p_{T} for cone size %d vs candidate p_{T}",icone); + snprintf(name, buffersize,"hPtSumOtherDecay_Cone_%d",icone); + snprintf(title, buffersize,"Candidate OtherDecay cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedOtherDecay[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedOtherDecay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedOtherDecay[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedOtherDecay[icone]) ; - sprintf(name,"hPtSumConversion_Cone_%d",icone); - sprintf(title,"Candidate Conversion cone sum p_{T} for cone size %d vs candidate p_{T}",icone); + snprintf(name, buffersize,"hPtSumConversion_Cone_%d",icone); + snprintf(title, buffersize,"Candidate Conversion cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedConversion[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedConversion[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedConversion[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedConversion[icone]) ; - sprintf(name,"hPtSumUnknown_Cone_%d",icone); - sprintf(title,"Candidate Unknown cone sum p_{T} for cone size %d vs candidate p_{T}",icone); + snprintf(name, buffersize,"hPtSumUnknown_Cone_%d",icone); + snprintf(title, buffersize,"Candidate Unknown cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedUnknown[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedUnknown[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedUnknown[icone]->SetXTitle("p_{T} (GeV/c)"); @@ -577,87 +419,87 @@ TList * AliAnaParticleIsolation::GetCreateOutputObjects() }//Histos with MC for(Int_t ipt = 0; iptSetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolated[icone][ipt]) ; - sprintf(name,"hPtFrac_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtFrac_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolated[icone][ipt]) ; if(IsDataMC()){ - sprintf(name,"hPtThresMCPrompt_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtThresMCPrompt_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedPrompt[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedPrompt[icone][ipt]) ; - sprintf(name,"hPtFracMCPrompt_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtFracMCPrompt_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedPrompt[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedPrompt[icone][ipt]) ; - sprintf(name,"hPtThresMCFragmentation_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtThresMCFragmentation_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedFragmentation[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedFragmentation[icone][ipt]) ; - sprintf(name,"hPtFracMCFragmentation_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtFracMCFragmentation_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedFragmentation[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedFragmentation[icone][ipt]) ; - sprintf(name,"hPtThresMCPi0Decay_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtThresMCPi0Decay_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedPi0Decay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedPi0Decay[icone][ipt]) ; - sprintf(name,"hPtFracMCPi0Decay_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtFracMCPi0Decay_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedPi0Decay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedPi0Decay[icone][ipt]) ; - sprintf(name,"hPtThresMCOtherDecay_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtThresMCOtherDecay_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedOtherDecay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedOtherDecay[icone][ipt]) ; - sprintf(name,"hPtFracMCOtherDecay_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtFracMCOtherDecay_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedOtherDecay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedOtherDecay[icone][ipt]) ; - sprintf(name,"hPtThresMCConversion_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtThresMCConversion_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedConversion[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedConversion[icone][ipt]) ; - sprintf(name,"hPtFracMCConversion_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtFracMCConversion_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedConversion[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedConversion[icone][ipt]) ; - sprintf(name,"hPtThresMCUnknown_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtThresMCUnknown_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedUnknown[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedUnknown[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedUnknown[icone][ipt]) ; - sprintf(name,"hPtFracMCUnknown_Cone_%d_Pt%d",icone,ipt); - sprintf(title,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); + snprintf(name, buffersize,"hPtFracMCUnknown_Cone_%d_Pt%d",icone,ipt); + snprintf(title, buffersize,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedUnknown[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedUnknown[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedUnknown[icone][ipt]) ; diff --git a/PWG4/PartCorrDep/AliAnaPhoton.cxx b/PWG4/PartCorrDep/AliAnaPhoton.cxx index baee29296a0..ca3393e9a1b 100755 --- a/PWG4/PartCorrDep/AliAnaPhoton.cxx +++ b/PWG4/PartCorrDep/AliAnaPhoton.cxx @@ -68,96 +68,7 @@ ClassImp(AliAnaPhoton) //Initialize parameters InitParameters(); -} -/* -//____________________________________________________________________________ -AliAnaPhoton::AliAnaPhoton(const AliAnaPhoton & g) : - AliAnaPartCorrBaseClass(g), fCalorimeter(g.fCalorimeter), - fMinDist(g.fMinDist),fMinDist2(g.fMinDist2), fMinDist3(g.fMinDist3), - fRejectTrackMatch(g.fRejectTrackMatch), - fCheckConversion(g.fCheckConversion),fAddConvertedPairsToAOD(g.fAddConvertedPairsToAOD), - fMassCut(g.fMassCut), fTimeCutMin(g.fTimeCutMin), fTimeCutMax(g.fTimeCutMax), fNCellsCut(g.fNCellsCut), - fhPtPhoton(g.fhPtPhoton),fhPhiPhoton(g.fhPhiPhoton),fhEtaPhoton(g.fhEtaPhoton), - //MC - fhDeltaE(g.fhDeltaE), fhDeltaPt(g.fhDeltaPt), - fhRatioE(g.fhRatioE), fhRatioPt(g.fhRatioPt), - fh2E(g.fh2E), fh2Pt(g.fh2Pt), - fhPtMCPhoton(g.fhPtMCPhoton),fhPhiMCPhoton(g.fhPhiMCPhoton),fhEtaMCPhoton(g.fhEtaMCPhoton), - fhPtPrompt(g.fhPtPrompt),fhPhiPrompt(g.fhPhiPrompt),fhEtaPrompt(g.fhEtaPrompt), - fhPtFragmentation(g.fhPtFragmentation),fhPhiFragmentation(g.fhPhiFragmentation),fhEtaFragmentation(g.fhEtaFragmentation), - fhPtISR(g.fhPtISR),fhPhiISR(g.fhPhiISR),fhEtaISR(g.fhEtaISR), - fhPtPi0Decay(g.fhPtPi0Decay),fhPhiPi0Decay(g.fhPhiPi0Decay),fhEtaPi0Decay(g.fhEtaPi0Decay), - fhPtOtherDecay(g.fhPtOtherDecay),fhPhiOtherDecay(g.fhPhiOtherDecay),fhEtaOtherDecay(g.fhEtaOtherDecay), - fhPtConversion(g. fhPtConversion),fhPhiConversion(g.fhPhiConversion),fhEtaConversion(g.fhEtaConversion), - fhPtUnknown(g.fhPtUnknown),fhPhiUnknown(g.fhPhiUnknown),fhEtaUnknown(g.fhEtaUnknown) - -{ - // cpy ctor - -} - -//_________________________________________________________________________ -AliAnaPhoton & AliAnaPhoton::operator = (const AliAnaPhoton & g) -{ - // assignment operator - - if(&g == this) return *this; - - fCalorimeter = g.fCalorimeter ; - fMinDist = g.fMinDist; - fMinDist2 = g.fMinDist2; - fMinDist3 = g.fMinDist3; - fMassCut = g.fMassCut; - - fTimeCutMin = g.fTimeCutMin; - fTimeCutMax = g.fTimeCutMax; - fNCellsCut = g.fNCellsCut; - - fRejectTrackMatch = g.fRejectTrackMatch; - fCheckConversion = g.fCheckConversion; - fAddConvertedPairsToAOD = g.fAddConvertedPairsToAOD; - - fhPtPhoton = g.fhPtPhoton ; - fhPhiPhoton = g.fhPhiPhoton ; - fhEtaPhoton = g.fhEtaPhoton ; - - fhDeltaE = g.fhDeltaE; - fhDeltaPt = g.fhDeltaPt; - fhRatioE = g.fhRatioE; - fhRatioPt = g.fhRatioPt; - fh2E = g.fh2E; - fh2Pt = g.fh2Pt; - - fhPtMCPhoton = g.fhPtMCPhoton ; - fhPhiMCPhoton = g.fhPhiMCPhoton ; - fhEtaMCPhoton = g.fhEtaMCPhoton ; - fhPtPrompt = g.fhPtPrompt; - fhPhiPrompt = g.fhPhiPrompt; - fhEtaPrompt = g.fhEtaPrompt; - fhPtFragmentation = g.fhPtFragmentation; - fhPhiFragmentation = g.fhPhiFragmentation; - fhEtaFragmentation = g.fhEtaFragmentation; - fhPtISR = g.fhPtISR; - fhPhiISR = g.fhPhiISR; - fhEtaISR = g.fhEtaISR; - fhPtPi0Decay = g.fhPtPi0Decay; - fhPhiPi0Decay = g.fhPhiPi0Decay; - fhEtaPi0Decay = g.fhEtaPi0Decay; - fhPtOtherDecay = g.fhPtOtherDecay; - fhPhiOtherDecay = g.fhPhiOtherDecay; - fhEtaOtherDecay = g.fhEtaOtherDecay; - fhPtConversion = g. fhPtConversion; - fhPhiConversion = g.fhPhiConversion; - fhEtaConversion = g.fhEtaConversion; - fhPtUnknown = g.fhPtUnknown; - fhPhiUnknown = g.fhPhiUnknown; - fhEtaUnknown = g.fhEtaUnknown; - - return *this; - -} -*/ -//____________________________________________________________________________ +}//____________________________________________________________________________ AliAnaPhoton::~AliAnaPhoton() { //dtor @@ -169,19 +80,20 @@ TObjString * AliAnaPhoton::GetAnalysisCuts() { //Save parameters used for analysis TString parList ; //this will be list of parameters used for this analysis. - char onePar[255] ; + const Int_t buffersize = 255; + char onePar[buffersize] ; - sprintf(onePar,"--- AliAnaPhoton ---\n") ; + snprintf(onePar,buffersize,"--- AliAnaPhoton ---\n") ; parList+=onePar ; - sprintf(onePar,"Calorimeter: %s\n",fCalorimeter.Data()) ; + snprintf(onePar,buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ; parList+=onePar ; - sprintf(onePar,"fMinDist =%2.2f (Minimal distance to bad channel to accept cluster) \n",fMinDist) ; + snprintf(onePar,buffersize,"fMinDist =%2.2f (Minimal distance to bad channel to accept cluster) \n",fMinDist) ; parList+=onePar ; - sprintf(onePar,"fMinDist2=%2.2f (Cuts on Minimal distance to study acceptance evaluation) \n",fMinDist2) ; + snprintf(onePar,buffersize,"fMinDist2=%2.2f (Cuts on Minimal distance to study acceptance evaluation) \n",fMinDist2) ; parList+=onePar ; - sprintf(onePar,"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study) \n",fMinDist3) ; + snprintf(onePar,buffersize,"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study) \n",fMinDist3) ; parList+=onePar ; - sprintf(onePar,"fRejectTrackMatch: %d\n",fRejectTrackMatch) ; + snprintf(onePar,buffersize,"fRejectTrackMatch: %d\n",fRejectTrackMatch) ; parList+=onePar ; //Get parameters set in base class. @@ -228,7 +140,7 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPhiPhoton) ; fhEtaPhoton = new TH2F - ("hEtaPhoton","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaPhoton","#eta_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaPhoton->SetYTitle("#eta"); fhEtaPhoton->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaPhoton) ; @@ -266,13 +178,13 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPtMCPhoton) ; fhPhiMCPhoton = new TH2F - ("hPhiMCPhoton","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCPhoton","#phi_{#gamma}, #gamma in MC",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiMCPhoton->SetYTitle("#phi"); fhPhiMCPhoton->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiMCPhoton) ; fhEtaMCPhoton = new TH2F - ("hEtaMCPhoton","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCPhoton","#eta_{#gamma}, #gamma in MC",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaMCPhoton->SetYTitle("#eta"); fhEtaMCPhoton->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaMCPhoton) ; @@ -283,13 +195,13 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPtPrompt) ; fhPhiPrompt = new TH2F - ("hPhiMCPrompt","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCPrompt","#phi_{#gamma}, prompt #gamma in MC",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiPrompt->SetYTitle("#phi"); fhPhiPrompt->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiPrompt) ; fhEtaPrompt = new TH2F - ("hEtaMCPrompt","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCPrompt","#eta_{#gamma}, prompt #gamma in MC",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaPrompt->SetYTitle("#eta"); fhEtaPrompt->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaPrompt) ; @@ -300,13 +212,13 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPtFragmentation) ; fhPhiFragmentation = new TH2F - ("hPhiMCFragmentation","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCFragmentation","#phi_{#gamma}, fragmentation #gamma in MC",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiFragmentation->SetYTitle("#phi"); fhPhiFragmentation->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiFragmentation) ; fhEtaFragmentation = new TH2F - ("hEtaMCFragmentation","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCFragmentation","#eta_{#gamma}, fragmentation #gamma in MC",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaFragmentation->SetYTitle("#eta"); fhEtaFragmentation->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaFragmentation) ; @@ -323,7 +235,7 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPhiISR) ; fhEtaISR = new TH2F - ("hEtaMCISR","#phi_{#gamma} initial state radiation",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCISR","#eta_{#gamma} initial state radiation",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaISR->SetYTitle("#eta"); fhEtaISR->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaISR) ; @@ -334,13 +246,13 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPtPi0Decay) ; fhPhiPi0Decay = new TH2F - ("hPhiMCPi0Decay","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCPi0Decay","#phi_{#gamma}, #pi^{0} decay #gamma in MC",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiPi0Decay->SetYTitle("#phi"); fhPhiPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiPi0Decay) ; fhEtaPi0Decay = new TH2F - ("hEtaMCPi0Decay","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCPi0Decay","#eta_{#gamma}, #pi^{0} #gamma in MC",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaPi0Decay->SetYTitle("#eta"); fhEtaPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaPi0Decay) ; @@ -351,13 +263,13 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPtOtherDecay) ; fhPhiOtherDecay = new TH2F - ("hPhiMCOtherDecay","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCOtherDecay","#phi_{#gamma}, other decay #gamma in MC",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiOtherDecay->SetYTitle("#phi"); fhPhiOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiOtherDecay) ; fhEtaOtherDecay = new TH2F - ("hEtaMCOtherDecay","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCOtherDecay","#eta_{#gamma}, other decay #gamma in MC",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaOtherDecay->SetYTitle("#eta"); fhEtaOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaOtherDecay) ; @@ -368,13 +280,13 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPtConversion) ; fhPhiConversion = new TH2F - ("hPhiMCConversion","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCConversion","#phi_{#gamma}, conversion #gamma in MC",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiConversion->SetYTitle("#phi"); fhPhiConversion->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiConversion) ; fhEtaConversion = new TH2F - ("hEtaMCConversion","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCConversion","#eta_{#gamma}, conversion #gamma in MC",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaConversion->SetYTitle("#eta"); fhEtaConversion->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaConversion) ; @@ -385,13 +297,13 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPtUnknown) ; fhPhiUnknown = new TH2F - ("hPhiMCUnknown","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCUnknown","#phi_{#gamma}, unknown origin",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiUnknown->SetYTitle("#phi"); fhPhiUnknown->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiUnknown) ; fhEtaUnknown = new TH2F - ("hEtaMCUnknown","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCUnknown","#eta_{#gamma}, unknown origin",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaUnknown->SetYTitle("#eta"); fhEtaUnknown->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaUnknown) ; @@ -473,7 +385,11 @@ void AliAnaPhoton::MakeAnalysisFillAOD() pl = GetAODPHOS(); else if (fCalorimeter == "EMCAL") pl = GetAODEMCAL(); - + + if(!pl) { + Info("MakeAnalysisFillAOD","TObjArray with %s clusters is NULL!\n",fCalorimeter.Data()); + return; + } //Fill AODParticle with PHOS/EMCAL aods TLorentzVector mom, mom2 ; diff --git a/PWG4/PartCorrDep/AliAnaPi0.cxx b/PWG4/PartCorrDep/AliAnaPi0.cxx index 94250477797..dde9727f5de 100755 --- a/PWG4/PartCorrDep/AliAnaPi0.cxx +++ b/PWG4/PartCorrDep/AliAnaPi0.cxx @@ -55,9 +55,14 @@ ClassImp(AliAnaPi0) AliAnaPi0::AliAnaPi0() : AliAnaPartCorrBaseClass(), fDoOwnMix(kFALSE),fNCentrBin(0),fNZvertBin(0),fNrpBin(0), fNPID(0),fNmaxMixEv(0), fZvtxCut(0.),fCalorimeter(""), -fNModules(12), fUseAngleCut(kFALSE), fEventsList(0x0), //fhEtalon(0x0), -fhReMod(0x0), fhRe1(0x0),fhMi1(0x0),fhRe2(0x0),fhMi2(0x0),fhRe3(0x0),fhMi3(0x0),fhEvents(0x0), -fhRealOpeningAngle(0x0),fhRealCosOpeningAngle(0x0), +fNModules(12), fUseAngleCut(kFALSE), fEventsList(0x0), fMultiCutAna(kFALSE), +fNPtCuts(0),fPtCuts(0x0),fNAsymCuts(0),fAsymCuts(0x0), +fNCellNCuts(0),fCellNCuts(0x0),fNPIDBits(0),fPIDBits(0x0), +fHistoInvPtBins(0), fHistoInvPtMax(0), fHistoInvPtMin(0), fhReMod(0x0), +fhRe1(0x0), fhMi1(0x0), fhRe2(0x0), fhMi2(0x0), fhRe3(0x0), fhMi3(0x0), +fhReInvPt1(0x0), fhMiInvPt1(0x0), fhReInvPt2(0x0), fhMiInvPt2(0x0), fhReInvPt3(0x0), fhMiInvPt3(0x0), +fhRePtNCellAsymCuts(0x0), fhRePIDBits(0x0), +fhEvents(0x0), fhRealOpeningAngle(0x0),fhRealCosOpeningAngle(0x0), fhPrimPt(0x0), fhPrimAccPt(0x0), fhPrimY(0x0), fhPrimAccY(0x0), fhPrimPhi(0x0), fhPrimAccPhi(0x0), fhPrimOpeningAngle(0x0),fhPrimCosOpeningAngle(0x0) { @@ -65,45 +70,6 @@ fhPrimOpeningAngle(0x0),fhPrimCosOpeningAngle(0x0) InitParameters(); } -/* -//________________________________________________________________________________________________________________________________________________ -AliAnaPi0::AliAnaPi0(const AliAnaPi0 & ex) : AliAnaPartCorrBaseClass(ex), -fNCentrBin(ex.fNCentrBin),fNZvertBin(ex.fNZvertBin),fNrpBin(ex.fNrpBin), -fNPID(ex.fNPID),fNmaxMixEv(ex.fNmaxMixEv),fZvtxCut(ex.fZvtxCut), fCalorimeter(ex.fCalorimeter), -fNModules(ex.fNModules), fUseAngleCut(ex.fUseAngleCut), fEventsList(0x0), //fhEtalon(ex.fhEtalon), -fhReMod(ex.fhReMod), fhRe1(ex.fhRe1),fhMi1(ex.fhMi1),fhRe2(ex.fhRe2),fhMi2(ex.fhMi2), -fhRe3(ex.fhRe3),fhMi3(ex.fhMi3),fhEvents(ex.fhEvents), -fhRealOpeningAngle(ex.fhRealOpeningAngle),fhRealCosOpeningAngle(ex.fhRealCosOpeningAngle), -fhPrimPt(ex.fhPrimPt), fhPrimAccPt(ex.fhPrimAccPt), fhPrimY(ex.fhPrimY), -fhPrimAccY(ex.fhPrimAccY), fhPrimPhi(ex.fhPrimPhi), fhPrimAccPhi(ex.fhPrimAccPhi), -fhPrimOpeningAngle(ex.fhPrimOpeningAngle),fhPrimCosOpeningAngle(ex.fhPrimCosOpeningAngle) -{ - // cpy ctor - //Do not need it -} -*/ -// -////________________________________________________________________________________________________________________________________________________ -//AliAnaPi0 & AliAnaPi0::operator = (const AliAnaPi0 & ex) -//{ -// // assignment operator -// -// if(this == &ex)return *this; -// ((AliAnaPartCorrBaseClass *)this)->operator=(ex); -// -// fNCentrBin = ex.fNCentrBin ; fNZvertBin = ex.fNZvertBin ; fNrpBin = ex.fNrpBin ; -// fNPID = ex.fNPID ; fNmaxMixEv = ex.fNmaxMixEv ; fZvtxCut = ex.fZvtxCut ; fCalorimeter = ex.fCalorimeter ; -// fNModules = ex.fNModules; fEventsList = ex.fEventsList ; //fhEtalon = ex.fhEtalon ; -// fhRe1 = ex.fhRe1 ; fhMi1 = ex.fhMi1 ; fhRe2 = ex.fhRe2 ; fhMi2 = ex.fhMi2 ; fhReMod = ex.fhReMod; -// fhRe3 = ex.fhRe3 ; fhMi3 = ex.fhMi3 ; fhEvents = ex.fhEvents ; fUseAngleCut = ex.fUseAngleCut; -// fhPrimPt = ex.fhPrimPt ; fhPrimAccPt = ex.fhPrimAccPt ; fhPrimY = ex.fhPrimY ; -// fhPrimAccY = ex.fhPrimAccY ; fhPrimPhi = ex.fhPrimPhi ; fhPrimAccPhi = ex.fhPrimAccPhi ; -// fhRealOpeningAngle = ex.fhRealOpeningAngle; fhRealCosOpeningAngle = ex.fhRealCosOpeningAngle; -// fhPrimOpeningAngle = ex.fhPrimOpeningAngle; fhPrimCosOpeningAngle = ex.fhPrimCosOpeningAngle; -// -// return *this; -// -//} //________________________________________________________________________________________________________________________________________________ AliAnaPi0::~AliAnaPi0() { @@ -141,22 +107,30 @@ void AliAnaPi0::InitParameters() fZvtxCut = 40; fCalorimeter = "PHOS"; fUseAngleCut = kFALSE; - + + fMultiCutAna = kFALSE; + + fNPtCuts = 3; + fPtCuts = new Float_t[fNPtCuts]; + fPtCuts[0] = 0.; fPtCuts[1] = 0.2; fPtCuts[2] = 0.3; + + fNAsymCuts = 3; + fAsymCuts = new Float_t[fNAsymCuts]; + fAsymCuts[0] = 0.7; fAsymCuts[2] = 0.8; fAsymCuts[2] = 1.; + + fNCellNCuts = 3; + fCellNCuts = new Int_t[fNCellNCuts]; + fCellNCuts[0] = 1; fCellNCuts[1] = 2; fCellNCuts[2] = 3; + + fNPIDBits = 3; + fPIDBits = new Int_t[fNPIDBits]; + fPIDBits[0] = 2; fPIDBits[1] = 4; fPIDBits[2] = 6; // check dispersion, neutral, dispersion&&neutral + + fHistoInvPtMax = 10.; + fHistoInvPtMin = 0.; + fHistoInvPtBins = 200; + } -//________________________________________________________________________________________________________________________________________________ -//void AliAnaPi0::Init() -//{ - //Init some data members needed in analysis - - //Histograms binning and range - // if(!fhEtalon){ // p_T alpha d m_gg - // fhEtalon = new TH3D("hEtalon","Histo with binning parameters",50,0.,25.,10,0.,1.,200,0.,1.) ; - // fhEtalon->SetXTitle("P_{T} (GeV)") ; - // fhEtalon->SetYTitle("#alpha") ; - // fhEtalon->SetZTitle("m_{#gamma#gamma} (GeV)") ; - // } - -//} //________________________________________________________________________________________________________________________________________________ @@ -164,26 +138,27 @@ TObjString * AliAnaPi0::GetAnalysisCuts() { //Save parameters used for analysis TString parList ; //this will be list of parameters used for this analysis. - char onePar[255] ; - sprintf(onePar,"--- AliAnaPi0 ---\n") ; + const Int_t buffersize = 255; + char onePar[buffersize] ; + snprintf(onePar,buffersize,"--- AliAnaPi0 ---\n") ; parList+=onePar ; - sprintf(onePar,"Number of bins in Centrality: %d \n",fNCentrBin) ; + snprintf(onePar,buffersize,"Number of bins in Centrality: %d \n",fNCentrBin) ; parList+=onePar ; - sprintf(onePar,"Number of bins in Z vert. pos: %d \n",fNZvertBin) ; + snprintf(onePar,buffersize,"Number of bins in Z vert. pos: %d \n",fNZvertBin) ; parList+=onePar ; - sprintf(onePar,"Number of bins in Reac. Plain: %d \n",fNrpBin) ; + snprintf(onePar,buffersize,"Number of bins in Reac. Plain: %d \n",fNrpBin) ; parList+=onePar ; - sprintf(onePar,"Depth of event buffer: %d \n",fNmaxMixEv) ; + snprintf(onePar,buffersize,"Depth of event buffer: %d \n",fNmaxMixEv) ; parList+=onePar ; - sprintf(onePar,"Number of different PID used: %d \n",fNPID) ; + snprintf(onePar,buffersize,"Number of different PID used: %d \n",fNPID) ; parList+=onePar ; - sprintf(onePar,"Cuts: \n") ; + snprintf(onePar,buffersize,"Cuts: \n") ; parList+=onePar ; - sprintf(onePar,"Z vertex position: -%f < z < %f \n",fZvtxCut,fZvtxCut) ; + snprintf(onePar,buffersize,"Z vertex position: -%f < z < %f \n",fZvtxCut,fZvtxCut) ; parList+=onePar ; - sprintf(onePar,"Calorimeter: %s \n",fCalorimeter.Data()) ; + snprintf(onePar,buffersize,"Calorimeter: %s \n",fCalorimeter.Data()) ; parList+=onePar ; - sprintf(onePar,"Number of modules: %d \n",fNModules) ; + snprintf(onePar,buffersize,"Number of modules: %d \n",fNModules) ; parList+=onePar ; return new TObjString(parList) ; @@ -216,16 +191,28 @@ TList * AliAnaPi0::GetCreateOutputObjects() fhMi1 = new TH3D*[fNCentrBin*fNPID] ; fhMi2 = new TH3D*[fNCentrBin*fNPID] ; fhMi3 = new TH3D*[fNCentrBin*fNPID] ; + + fhReInvPt1 = new TH3D*[fNCentrBin*fNPID] ; + fhReInvPt2 = new TH3D*[fNCentrBin*fNPID] ; + fhReInvPt3 = new TH3D*[fNCentrBin*fNPID] ; + fhMiInvPt1 = new TH3D*[fNCentrBin*fNPID] ; + fhMiInvPt2 = new TH3D*[fNCentrBin*fNPID] ; + fhMiInvPt3 = new TH3D*[fNCentrBin*fNPID] ; + + const Int_t buffersize = 255; + char key[buffersize] ; + char title[buffersize] ; - char key[255] ; - char title[255] ; Int_t nptbins = GetHistoPtBins(); + Int_t niptbins = GetHistoInvPtBins(); Int_t nphibins = GetHistoPhiBins(); Int_t netabins = GetHistoEtaBins(); Float_t ptmax = GetHistoPtMax(); + Float_t iptmax = GetHistoInvPtMax(); Float_t phimax = GetHistoPhiMax(); Float_t etamax = GetHistoEtaMax(); Float_t ptmin = GetHistoPtMin(); + Float_t iptmin = GetHistoInvPtMin(); Float_t phimin = GetHistoPhiMin(); Float_t etamin = GetHistoEtaMin(); @@ -240,64 +227,111 @@ TList * AliAnaPi0::GetCreateOutputObjects() for(Int_t ipid=0; ipidClone(key); - //fhRe1[ic*fNPID+ipid]=(TH3D*)fhEtalon->Clone(key) ; - //fhRe1[ic*fNPID+ipid]->SetName(key) ; - //fhRe1[ic*fNPID+ipid]->SetTitle(title) ; + snprintf(key, buffersize,"hRe_cen%d_pid%d_dist1",ic,ipid) ; + snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; fhRe1[ic*fNPID+ipid] = new TH3D(key,title,nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; outputContainer->Add(fhRe1[ic*fNPID+ipid]) ; //Distance to bad module 2 - sprintf(key,"hRe_cen%d_pid%d_dist2",ic,ipid) ; - sprintf(title,"Real m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; - //fhRe2[ic*fNPID+ipid]=(TH3D*)fhEtalon->Clone(key) ; - //fhRe2[ic*fNPID+ipid]->SetName(key) ; - //fhRe2[ic*fNPID+ipid]->SetTitle(title) ; + snprintf(key, buffersize,"hRe_cen%d_pid%d_dist2",ic,ipid) ; + snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; fhRe2[ic*fNPID+ipid] = new TH3D(key,title,nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; outputContainer->Add(fhRe2[ic*fNPID+ipid]) ; //Distance to bad module 3 - sprintf(key,"hRe_cen%d_pid%d_dist3",ic,ipid) ; - sprintf(title,"Real m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; - //fhRe3[ic*fNPID+ipid]=(TH3D*)fhEtalon->Clone(key) ; - //fhRe3[ic*fNPID+ipid]->SetName(key) ; - //fhRe3[ic*fNPID+ipid]->SetTitle(title) ; + snprintf(key, buffersize,"hRe_cen%d_pid%d_dist3",ic,ipid) ; + snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; fhRe3[ic*fNPID+ipid] = new TH3D(key,title,nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; outputContainer->Add(fhRe3[ic*fNPID+ipid]) ; + //Inverse pT + //Distance to bad module 1 + snprintf(key, buffersize,"hReInvPt_cen%d_pid%d_dist1",ic,ipid) ; + snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; + fhReInvPt1[ic*fNPID+ipid] = new TH3D(key,title,niptbins,iptmin,iptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; + outputContainer->Add(fhReInvPt1[ic*fNPID+ipid]) ; + + //Distance to bad module 2 + snprintf(key, buffersize,"hReInvPt_cen%d_pid%d_dist2",ic,ipid) ; + snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; + fhReInvPt2[ic*fNPID+ipid] = new TH3D(key,title,niptbins,iptmin,iptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; + outputContainer->Add(fhReInvPt2[ic*fNPID+ipid]) ; + + //Distance to bad module 3 + snprintf(key, buffersize,"hReInvPt_cen%d_pid%d_dist3",ic,ipid) ; + snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; + fhReInvPt3[ic*fNPID+ipid] = new TH3D(key,title,niptbins,iptmin,iptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; + outputContainer->Add(fhReInvPt3[ic*fNPID+ipid]) ; + + if(fDoOwnMix){ //Distance to bad module 1 - sprintf(key,"hMi_cen%d_pid%d_dist1",ic,ipid) ; - sprintf(title,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; - //fhMi1[ic*fNPID+ipid]=(TH3D*)fhEtalon->Clone(key) ; - //fhMi1[ic*fNPID+ipid]->SetName(key) ; - //fhMi1[ic*fNPID+ipid]->SetTitle(title) ; + snprintf(key, buffersize,"hMi_cen%d_pid%d_dist1",ic,ipid) ; + snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; fhMi1[ic*fNPID+ipid] = new TH3D(key,title,nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; outputContainer->Add(fhMi1[ic*fNPID+ipid]) ; //Distance to bad module 2 - sprintf(key,"hMi_cen%d_pid%d_dist2",ic,ipid) ; - sprintf(title,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; - //fhMi2[ic*fNPID+ipid]=(TH3D*)fhEtalon->Clone(key) ; - //fhMi2[ic*fNPID+ipid]->SetName(key) ; - //fhMi2[ic*fNPID+ipid]->SetTitle(title) ; + snprintf(key, buffersize,"hMi_cen%d_pid%d_dist2",ic,ipid) ; + snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; fhMi2[ic*fNPID+ipid] = new TH3D(key,title,nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; outputContainer->Add(fhMi2[ic*fNPID+ipid]) ; //Distance to bad module 3 - sprintf(key,"hMi_cen%d_pid%d_dist3",ic,ipid) ; - sprintf(title,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; - //fhMi3[ic*fNPID+ipid]=(TH3D*)fhEtalon->Clone(key) ; - //fhMi3[ic*fNPID+ipid]->SetName(key) ; - //fhMi3[ic*fNPID+ipid]->SetTitle(title) ; + snprintf(key, buffersize,"hMi_cen%d_pid%d_dist3",ic,ipid) ; + snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; fhMi3[ic*fNPID+ipid] = new TH3D(key,title,nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; outputContainer->Add(fhMi3[ic*fNPID+ipid]) ; + + //Inverse pT + //Distance to bad module 1 + snprintf(key, buffersize,"hMiInvPt_cen%d_pid%d_dist1",ic,ipid) ; + snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; + fhMiInvPt1[ic*fNPID+ipid] = new TH3D(key,title,niptbins,iptmin,iptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; + outputContainer->Add(fhMiInvPt1[ic*fNPID+ipid]) ; + + //Distance to bad module 2 + snprintf(key, buffersize,"hMiInvPt_cen%d_pid%d_dist2",ic,ipid) ; + snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; + fhMiInvPt2[ic*fNPID+ipid] = new TH3D(key,title,niptbins,iptmin,iptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; + outputContainer->Add(fhMiInvPt2[ic*fNPID+ipid]) ; + + //Distance to bad module 3 + snprintf(key, buffersize,"hMiInvPt_cen%d_pid%d_dist3",ic,ipid) ; + snprintf(title, buffersize,"Mixed m_{#gamma#gamma} distr. for centrality=%d and PID=%d",ic,ipid) ; + fhMiInvPt3[ic*fNPID+ipid] = new TH3D(key,title,niptbins,iptmin,iptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; + outputContainer->Add(fhMiInvPt3[ic*fNPID+ipid]) ; + + } } } + if(fMultiCutAna){ + + fhRePIDBits = new TH2D*[fNPIDBits]; + for(Int_t ipid=0; ipidAdd(fhRePIDBits[ipid]) ; + }// pid bit loop + + fhRePtNCellAsymCuts = new TH2D*[fNPtCuts*fNAsymCuts*fNCellNCuts]; + for(Int_t ipt=0; ipt%2.2f, ncell>%d and asym >%2.2f ",fPtCuts[ipt],fCellNCuts[icell], fAsymCuts[iasym]) ; + Int_t index = ((ipt*fNCellNCuts)+icell)*fNAsymCuts + iasym; + //printf("ipt %d, icell %d, iassym %d, index %d\n",ipt, icell, iasym, index); + fhRePtNCellAsymCuts[index] = new TH2D(key,title,nptbins,ptmin,ptmax,nmassbins,massmin,massmax) ; + outputContainer->Add(fhRePtNCellAsymCuts[index]) ; + } + } + } + }// multi cuts analysis + fhEvents=new TH3D("hEvents","Number of events",fNCentrBin,0.,1.*fNCentrBin, fNZvertBin,0.,1.*fNZvertBin,fNrpBin,0.,1.*fNrpBin) ; outputContainer->Add(fhEvents) ; @@ -317,17 +351,7 @@ TList * AliAnaPi0::GetCreateOutputObjects() //Histograms filled only if MC data is requested if(IsDataMC()){ - // if(fhEtalon->GetXaxis()->GetXbins() && fhEtalon->GetXaxis()->GetXbins()->GetSize()){ //Variable bin size - // fhPrimPt = new TH1D("hPrimPt","Primary pi0 pt",fhEtalon->GetXaxis()->GetNbins(),fhEtalon->GetXaxis()->GetXbins()->GetArray()) ; - // fhPrimAccPt = new TH1D("hPrimAccPt","Primary pi0 pt with both photons in acceptance",fhEtalon->GetXaxis()->GetNbins(), - // fhEtalon->GetXaxis()->GetXbins()->GetArray()) ; - // } - // else{ - // fhPrimPt = new TH1D("hPrimPt","Primary pi0 pt",fhEtalon->GetXaxis()->GetNbins(),fhEtalon->GetXaxis()->GetXmin(),fhEtalon->GetXaxis()->GetXmax()) ; - // fhPrimAccPt = new TH1D("hPrimAccPt","Primary pi0 pt with both photons in acceptance", - // fhEtalon->GetXaxis()->GetNbins(),fhEtalon->GetXaxis()->GetXmin(),fhEtalon->GetXaxis()->GetXmax()) ; - // } - + fhPrimPt = new TH1D("hPrimPt","Primary pi0 pt",nptbins,ptmin,ptmax) ; fhPrimAccPt = new TH1D("hPrimAccPt","Primary pi0 pt with both photons in acceptance",nptbins,ptmin,ptmax) ; outputContainer->Add(fhPrimPt) ; @@ -362,12 +386,8 @@ TList * AliAnaPi0::GetCreateOutputObjects() for(Int_t imod=0; imodClone(key); - //fhReMod[imod]=(TH3D*)fhEtalon->Clone(key) ; - //fhReMod[imod]->SetName(key) ; - //fhReMod[imod]->SetTitle(title) ; + snprintf(key, buffersize,"hReMod_%d",imod) ; + snprintf(title, buffersize,"Real m_{#gamma#gamma} distr. for Module %d",imod) ; fhReMod[imod] = new TH3D(key,title,nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax,nmassbins,massmin,massmax) ; outputContainer->Add(fhReMod[imod]) ; } @@ -394,13 +414,101 @@ void AliAnaPi0::Print(const Option_t * /*opt*/) const printf("------------------------------------------------------\n") ; } +//_____________________________________________________________ +void AliAnaPi0::FillAcceptanceHistograms(){ + //Fill acceptance histograms if MC data is available + if(IsDataMC() && GetReader()->ReadStack()){ + AliStack * stack = GetMCStack(); + if(stack && (IsDataMC() || (GetReader()->GetDataType() == AliCaloTrackReader::kMC)) ){ + for(Int_t i=0 ; iGetNprimary(); i++){ + TParticle * prim = stack->Particle(i) ; + if(prim->GetPdgCode() == 111){ + Double_t pi0Pt = prim->Pt() ; + //printf("pi0, pt %2.2f\n",pi0Pt); + if(prim->Energy() == TMath::Abs(prim->Pz())) continue ; //Protection against floating point exception + Double_t pi0Y = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ; + Double_t phi = TMath::RadToDeg()*prim->Phi() ; + if(TMath::Abs(pi0Y) < 0.5){ + fhPrimPt->Fill(pi0Pt) ; + } + fhPrimY ->Fill(pi0Y) ; + fhPrimPhi->Fill(phi) ; + + //Check if both photons hit Calorimeter + Int_t iphot1=prim->GetFirstDaughter() ; + Int_t iphot2=prim->GetLastDaughter() ; + if(iphot1>-1 && iphot1GetNtrack() && iphot2>-1 && iphot2GetNtrack()){ + TParticle * phot1 = stack->Particle(iphot1) ; + TParticle * phot2 = stack->Particle(iphot2) ; + if(phot1 && phot2 && phot1->GetPdgCode()==22 && phot2->GetPdgCode()==22){ + //printf("2 photons: photon 1: pt %2.2f, phi %3.2f, eta %1.2f; photon 2: pt %2.2f, phi %3.2f, eta %1.2f\n", + // phot1->Pt(), phot1->Phi()*180./3.1415, phot1->Eta(), phot2->Pt(), phot2->Phi()*180./3.1415, phot2->Eta()); + + TLorentzVector lv1, lv2; + phot1->Momentum(lv1); + phot2->Momentum(lv2); + + Bool_t inacceptance = kFALSE; + if(fCalorimeter == "PHOS"){ + if(GetPHOSGeometry() && GetCaloUtils()->IsPHOSGeoMatrixSet()){ + Int_t mod ; + Double_t x,z ; + if(GetPHOSGeometry()->ImpactOnEmc(phot1,mod,z,x) && GetPHOSGeometry()->ImpactOnEmc(phot2,mod,z,x)) + inacceptance = kTRUE; + if(GetDebug() > 2) printf("In %s Real acceptance? %d\n",fCalorimeter.Data(),inacceptance); + } + else{ + + if(GetFiducialCut()->IsInFiducialCut(lv1,fCalorimeter) && GetFiducialCut()->IsInFiducialCut(lv2,fCalorimeter)) + inacceptance = kTRUE ; + if(GetDebug() > 2) printf("In %s fiducial cut acceptance? %d\n",fCalorimeter.Data(),inacceptance); + } + + } + else if(fCalorimeter == "EMCAL" && GetCaloUtils()->IsEMCALGeoMatrixSet()){ + if(GetEMCALGeometry()){ + if(GetEMCALGeometry()->Impact(phot1) && GetEMCALGeometry()->Impact(phot2)) + inacceptance = kTRUE; + if(GetDebug() > 2) printf("In %s Real acceptance? %d\n",fCalorimeter.Data(),inacceptance); + } + else{ + if(GetFiducialCut()->IsInFiducialCut(lv1,fCalorimeter) && GetFiducialCut()->IsInFiducialCut(lv2,fCalorimeter)) + inacceptance = kTRUE ; + if(GetDebug() > 2) printf("In %s fiducial cut acceptance? %d\n",fCalorimeter.Data(),inacceptance); + } + } + + if(inacceptance){ + + fhPrimAccPt->Fill(pi0Pt) ; + fhPrimAccPhi->Fill(phi) ; + fhPrimAccY->Fill(pi0Y) ; + Double_t angle = lv1.Angle(lv2.Vect()); + fhPrimOpeningAngle ->Fill(pi0Pt,angle); + fhPrimCosOpeningAngle->Fill(pi0Pt,TMath::Cos(angle)); + + }//Accepted + }// 2 photons + }//Check daughters exist + }// Primary pi0 + }//loop on primaries + }//stack exists and data is MC + }//read stack + else if(GetReader()->ReadAODMCParticles()){ + if(GetDebug() >= 0) printf("AliAnaPi0::FillAcceptanceHistograms() - Acceptance calculation with MCParticles not implemented yet\n"); + } +} + //____________________________________________________________________________________________________________________________________________________ void AliAnaPi0::MakeAnalysisFillHistograms() { //Process one event and extract photons from AOD branch // filled with AliAnaPhoton and fill histos with invariant mass + //In case of MC data, fill acceptance histograms + FillAcceptanceHistograms(); + //Apply some cuts on event: vertex position and centrality range Int_t iRun=(GetReader()->GetInputEvent())->GetRunNumber() ; if(IsBadRun(iRun)) return ; @@ -475,15 +583,55 @@ void AliAnaPi0::MakeAnalysisFillHistograms() for(Int_t ipid=0; ipidIsPIDOK(ipid,AliCaloPID::kPhoton)) && (p2->IsPIDOK(ipid,AliCaloPID::kPhoton))){ - fhRe1[curCentrBin*fNPID+ipid]->Fill(pt,a,m) ; + fhRe1 [curCentrBin*fNPID+ipid]->Fill(pt, a,m) ; + fhReInvPt1[curCentrBin*fNPID+ipid]->Fill(1./pt,a,m) ; if(p1->DistToBad()>0 && p2->DistToBad()>0){ - fhRe2[curCentrBin*fNPID+ipid]->Fill(pt,a,m) ; + fhRe2 [curCentrBin*fNPID+ipid]->Fill(pt, a,m) ; + fhReInvPt2[curCentrBin*fNPID+ipid]->Fill(1./pt,a,m) ; if(p1->DistToBad()>1 && p2->DistToBad()>1){ - fhRe3[curCentrBin*fNPID+ipid]->Fill(pt,a,m) ; - } - } + fhRe3 [curCentrBin*fNPID+ipid]->Fill(pt, a,m) ; + fhReInvPt3[curCentrBin*fNPID+ipid]->Fill(1./pt,a,m) ; + }// bad 3 + }// bad2 + }// bad 1 + }// pid loop + + //Multi cuts analysis + if(fMultiCutAna){ + //Histograms for different PID bits selection + for(Int_t ipid=0; ipidIsPIDOK(fPIDBits[ipid],AliCaloPID::kPhoton) && + p2->IsPIDOK(fPIDBits[ipid],AliCaloPID::kPhoton)) fhRePIDBits[ipid]->Fill(pt,m) ; + + //printf("ipt %d, ipid%d, name %s\n",ipt, ipid, fhRePtPIDCuts[ipt*fNPIDBits+ipid]->GetName()); + } // pid bit cut loop + + //Several pt,ncell and asymetry cuts + //Get the number of cells + Int_t ncell1 = 0; + Int_t ncell2 = 0; + if(GetReader()->GetInputEvent()){ + AliVCluster *cluster1 = (GetReader()->GetInputEvent())->GetCaloCluster(p1->GetCaloLabel(0)); + ncell1 = cluster1->GetNCells(); + AliVCluster *cluster2 = (GetReader()->GetInputEvent())->GetCaloCluster(p2->GetCaloLabel(0)); + ncell2 = cluster2->GetNCells(); + //printf("e 1: %2.2f - %2.2f, e 2: %2.2f - %2.2f, ncells: %d, %d\n",cluster1->E(),p1->E(),cluster2->E(), p2->E(),ncell1,ncell2); } - } + for(Int_t ipt=0; iptPt() > fPtCuts[ipt] && p2->Pt() > fPtCuts[ipt] && + a < fAsymCuts[iasym] && + ncell1 >= fCellNCuts[icell] && ncell2 >= fCellNCuts[icell]) fhRePtNCellAsymCuts[((ipt*fNCellNCuts)+icell)*fNAsymCuts + iasym]->Fill(pt,m) ; + + //printf("ipt %d, icell%d, iasym %d, name %s\n",ipt, icell, iasym, fhRePtNCellAsymCuts[((ipt*fNCellNCuts)+icell)*fNAsymCuts + iasym]->GetName()); + }// pid bit cut loop + }// icell loop + }// pt cut loop + + }// multiple cuts analysis }// second same event particle }// first cluster @@ -518,11 +666,14 @@ void AliAnaPi0::MakeAnalysisFillHistograms() p1->Pt(), p2->Pt(), pt,m,a); for(Int_t ipid=0; ipidIsPIDOK(ipid,AliCaloPID::kPhoton)) && (p2->IsPIDOK(ipid,AliCaloPID::kPhoton))){ - fhMi1[curCentrBin*fNPID+ipid]->Fill(pt,a,m) ; + fhMi1 [curCentrBin*fNPID+ipid]->Fill(pt, a,m) ; + fhMiInvPt1[curCentrBin*fNPID+ipid]->Fill(1./pt,a,m) ; if(p1->DistToBad()>0 && p2->DistToBad()>0){ - fhMi2[curCentrBin*fNPID+ipid]->Fill(pt,a,m) ; + fhMi2 [curCentrBin*fNPID+ipid]->Fill(pt, a,m) ; + fhMiInvPt2[curCentrBin*fNPID+ipid]->Fill(1./pt,a,m) ; if(p1->DistToBad()>1 && p2->DistToBad()>1){ - fhMi3[curCentrBin*fNPID+ipid]->Fill(pt,a,m) ; + fhMi3 [curCentrBin*fNPID+ipid]->Fill(pt, a,m) ; + fhMiInvPt3[curCentrBin*fNPID+ipid]->Fill(1./pt,a,m) ; } } @@ -550,88 +701,6 @@ void AliAnaPi0::MakeAnalysisFillHistograms() } }// DoOwnMix - //Acceptance - - if(IsDataMC() && GetReader()->ReadStack()){ - AliStack * stack = GetMCStack(); - if(stack && (IsDataMC() || (GetReader()->GetDataType() == AliCaloTrackReader::kMC)) ){ - for(Int_t i=0 ; iGetNprimary(); i++){ - TParticle * prim = stack->Particle(i) ; - if(prim->GetPdgCode() == 111){ - Double_t pi0Pt = prim->Pt() ; - //printf("pi0, pt %2.2f\n",pi0Pt); - if(prim->Energy() == TMath::Abs(prim->Pz())) continue ; //Protection against floating point exception - Double_t pi0Y = 0.5*TMath::Log((prim->Energy()-prim->Pz())/(prim->Energy()+prim->Pz())) ; - Double_t phi = TMath::RadToDeg()*prim->Phi() ; - if(TMath::Abs(pi0Y) < 0.5){ - fhPrimPt->Fill(pi0Pt) ; - } - fhPrimY ->Fill(pi0Y) ; - fhPrimPhi->Fill(phi) ; - - //Check if both photons hit Calorimeter - Int_t iphot1=prim->GetFirstDaughter() ; - Int_t iphot2=prim->GetLastDaughter() ; - if(iphot1>-1 && iphot1GetNtrack() && iphot2>-1 && iphot2GetNtrack()){ - TParticle * phot1 = stack->Particle(iphot1) ; - TParticle * phot2 = stack->Particle(iphot2) ; - if(phot1 && phot2 && phot1->GetPdgCode()==22 && phot2->GetPdgCode()==22){ - //printf("2 photons: photon 1: pt %2.2f, phi %3.2f, eta %1.2f; photon 2: pt %2.2f, phi %3.2f, eta %1.2f\n", - // phot1->Pt(), phot1->Phi()*180./3.1415, phot1->Eta(), phot2->Pt(), phot2->Phi()*180./3.1415, phot2->Eta()); - - TLorentzVector lv1, lv2; - phot1->Momentum(lv1); - phot2->Momentum(lv2); - - Bool_t inacceptance = kFALSE; - if(fCalorimeter == "PHOS"){ - if(GetPHOSGeometry() && GetCaloUtils()->IsPHOSGeoMatrixSet()){ - Int_t mod ; - Double_t x,z ; - if(GetPHOSGeometry()->ImpactOnEmc(phot1,mod,z,x) && GetPHOSGeometry()->ImpactOnEmc(phot2,mod,z,x)) - inacceptance = kTRUE; - if(GetDebug() > 2) printf("In %s Real acceptance? %d\n",fCalorimeter.Data(),inacceptance); - } - else{ - - if(GetFiducialCut()->IsInFiducialCut(lv1,fCalorimeter) && GetFiducialCut()->IsInFiducialCut(lv2,fCalorimeter)) - inacceptance = kTRUE ; - if(GetDebug() > 2) printf("In %s fiducial cut acceptance? %d\n",fCalorimeter.Data(),inacceptance); - } - - } - else if(fCalorimeter == "EMCAL" && GetCaloUtils()->IsEMCALGeoMatrixSet()){ - if(GetEMCALGeometry()){ - if(GetEMCALGeometry()->Impact(phot1) && GetEMCALGeometry()->Impact(phot2)) - inacceptance = kTRUE; - if(GetDebug() > 2) printf("In %s Real acceptance? %d\n",fCalorimeter.Data(),inacceptance); - } - else{ - if(GetFiducialCut()->IsInFiducialCut(lv1,fCalorimeter) && GetFiducialCut()->IsInFiducialCut(lv2,fCalorimeter)) - inacceptance = kTRUE ; - if(GetDebug() > 2) printf("In %s fiducial cut acceptance? %d\n",fCalorimeter.Data(),inacceptance); - } - } - - if(inacceptance){ - - fhPrimAccPt->Fill(pi0Pt) ; - fhPrimAccPhi->Fill(phi) ; - fhPrimAccY->Fill(pi0Y) ; - Double_t angle = lv1.Angle(lv2.Vect()); - fhPrimOpeningAngle ->Fill(pi0Pt,angle); - fhPrimCosOpeningAngle->Fill(pi0Pt,TMath::Cos(angle)); - - }//Accepted - }// 2 photons - }//Check daughters exist - }// Primary pi0 - }//loop on primaries - }//stack exists and data is MC - }//read stack - else if(GetReader()->ReadAODMCParticles()){ - if(GetDebug() >= 0) printf("AliAnaPi0::MakeAnalysisFillHistograms() - Acceptance calculation with MCParticles not implemented yet\n"); - } } //________________________________________________________________________ @@ -650,18 +719,47 @@ void AliAnaPi0::ReadHistograms(TList* outputList) if(!fhMi1) fhMi1 = new TH3D*[fNCentrBin*fNPID] ; if(!fhMi2) fhMi2 = new TH3D*[fNCentrBin*fNPID] ; if(!fhMi3) fhMi3 = new TH3D*[fNCentrBin*fNPID] ; + if(!fhReInvPt1) fhRe1 = new TH3D*[fNCentrBin*fNPID] ; + if(!fhReInvPt2) fhRe2 = new TH3D*[fNCentrBin*fNPID] ; + if(!fhReInvPt3) fhRe3 = new TH3D*[fNCentrBin*fNPID] ; + if(!fhMiInvPt1) fhMi1 = new TH3D*[fNCentrBin*fNPID] ; + if(!fhMiInvPt2) fhMi2 = new TH3D*[fNCentrBin*fNPID] ; + if(!fhMiInvPt3) fhMi3 = new TH3D*[fNCentrBin*fNPID] ; if(!fhReMod) fhReMod = new TH3D*[fNModules] ; for(Int_t ic=0; icAt(index++); - fhMi1[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); fhRe2[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); - fhMi2[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); fhRe3[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); + + fhReInvPt1[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); + fhReInvPt2[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); + fhReInvPt3[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); + + fhMi1[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); + fhMi2[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); fhMi3[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); + + fhMiInvPt1[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); + fhMiInvPt2[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); + fhMiInvPt3[ic*fNPID+ipid] = (TH3D*) outputList->At(index++); } } + if(fMultiCutAna){ + + for(Int_t ipid=0; ipidAt(index++); + }// ipid loop + + for(Int_t ipt=0; iptAt(index++); + }// iasym + }// icell loop + }// ipt loop + }// multi cut analysis fhEvents = (TH3D *) outputList->At(index++); @@ -697,9 +795,11 @@ void AliAnaPi0::Terminate(TList* outputList) } printf("AliAnaPi0::Terminate() Mgg Real : %5.3f , RMS : %5.3f \n", fhRe1[0]->GetMean(), fhRe1[0]->GetRMS() ) ; - - char nameIM[128]; - sprintf(nameIM,"AliAnaPi0_%s_cPt",fCalorimeter.Data()); + + const Int_t buffersize = 255; + + char nameIM[buffersize]; + snprintf(nameIM, buffersize,"AliAnaPi0_%s_cPt",fCalorimeter.Data()); TCanvas * cIM = new TCanvas(nameIM, "", 400, 10, 600, 700) ; cIM->Divide(2, 2); @@ -734,12 +834,12 @@ void AliAnaPi0::Terminate(TList* outputList) hIMPt20->SetTitle("10 < p_{T, #gamma#gamma} < 20 GeV/c"); hIMPt20->Draw(); - char nameIMF[128]; - sprintf(nameIMF,"AliAnaPi0_%s_Mgg.eps",fCalorimeter.Data()); + char nameIMF[buffersize]; + snprintf(nameIMF,buffersize,"AliAnaPi0_%s_Mgg.eps",fCalorimeter.Data()); cIM->Print(nameIMF); - char namePt[128]; - sprintf(namePt,"AliAnaPi0_%s_cPt",fCalorimeter.Data()); + char namePt[buffersize]; + snprintf(namePt,buffersize,"AliAnaPi0_%s_cPt",fCalorimeter.Data()); TCanvas * cPt = new TCanvas(namePt, "", 400, 10, 600, 700) ; cPt->Divide(2, 2); @@ -775,14 +875,13 @@ void AliAnaPi0::Terminate(TList* outputList) hPtIM3->Draw(); char namePtF[128]; - sprintf(namePtF,"AliAnaPi0_%s_Pt.eps",fCalorimeter.Data()); + snprintf(namePtF,buffersize,"AliAnaPi0_%s_Pt.eps",fCalorimeter.Data()); cPt->Print(namePtF); - - char line[1024] ; - sprintf(line, ".!tar -zcf %s_%s.tar.gz *.eps", GetName(),fCalorimeter.Data()) ; + char line[buffersize] ; + snprintf(line,buffersize,".!tar -zcf %s_%s.tar.gz *.eps", GetName(),fCalorimeter.Data()) ; gROOT->ProcessLine(line); - sprintf(line, ".!rm -fR AliAnaPi0_%s*.eps",fCalorimeter.Data()); + snprintf(line, buffersize,".!rm -fR AliAnaPi0_%s*.eps",fCalorimeter.Data()); gROOT->ProcessLine(line); printf(" AliAnaPi0::Terminate() - !! All the eps files are in %s_%s.tar.gz !!!\n", GetName(), fCalorimeter.Data()); diff --git a/PWG4/PartCorrDep/AliAnaPi0.h b/PWG4/PartCorrDep/AliAnaPi0.h index 627b7f7503e..43516208c9c 100755 --- a/PWG4/PartCorrDep/AliAnaPi0.h +++ b/PWG4/PartCorrDep/AliAnaPi0.h @@ -43,14 +43,13 @@ class AliAnaPi0 : public AliAnaPartCorrBaseClass { //void Init(); void InitParameters(); + void FillAcceptanceHistograms(); //void MakeAnalysisFillAOD() {;} //Not needed void MakeAnalysisFillHistograms(); // void SetBadRunsList(){;} ; //Set list of runs which can be used for this analysis //To be defined in future. - - //void SetEtalonHisto(TH3D * h);//Provide etalon of binning for histograms - + //Setters for parameters of event buffers void SetNCentrBin(Int_t n=5) {fNCentrBin=n ;} //number of bins in centrality void SetNZvertBin(Int_t n=5) {fNZvertBin=n ;} //number of bins for vertex position @@ -79,6 +78,31 @@ class AliAnaPi0 : public AliAnaPartCorrBaseClass { void SwitchOnOwnMix() {fDoOwnMix = kTRUE ; } void SwitchOffOwnMix() {fDoOwnMix = kFALSE ; } + //Cuts for multiple analysis + void SwitchOnMultipleCutAnalysis() {fMultiCutAna = kTRUE;} + void SwitchOffMultipleCutAnalysis() {fMultiCutAna = kFALSE;} + + void SetPtCuts (Int_t ncuts) {fNPtCuts = ncuts;} + void SetAsymCuts (Int_t ncuts) {fNAsymCuts = ncuts;} + void SetCellNCuts(Int_t ncuts) {fNCellNCuts = ncuts;} + void SetPIDBits (Int_t ncuts) {fNPIDBits = ncuts;} + + void SetPtCuts (Float_t * cuts) {fPtCuts = cuts;} + void SetAsymCuts (Float_t * cuts) {fAsymCuts = cuts;} + void SetCellNCuts(Int_t * cuts) {fCellNCuts = cuts;} + void SetPIDBits (Int_t * cuts) {fPIDBits = cuts;} + + //Histogram range setters + virtual void SetHistoInvPtRangeAndNBins(Float_t min, Float_t max, Int_t n) { + fHistoInvPtBins = n ; + fHistoInvPtMax = max ; + fHistoInvPtMin = min ; + } + + virtual Int_t GetHistoInvPtBins() const { return fHistoInvPtBins; } + virtual Float_t GetHistoInvPtMin() const { return fHistoInvPtMin ; } + virtual Float_t GetHistoInvPtMax() const { return fHistoInvPtMax ; } + private: Bool_t IsBadRun(Int_t /*iRun*/) const {return kFALSE;} //Tests if this run bad according to private list @@ -95,19 +119,42 @@ class AliAnaPi0 : public AliAnaPartCorrBaseClass { Int_t fNModules ; // Number of EMCAL/PHOS modules, set as many histogras as modules Bool_t fUseAngleCut ; // Select pairs depending on their opening angle TList ** fEventsList ; //! Containers for photons in stored events - + Bool_t fMultiCutAna; // Do analysis with several or fixed cut + Int_t fNPtCuts; // number of pt cuts + Float_t* fPtCuts; //[fNPtCuts] array with different pt cuts + Int_t fNAsymCuts; // number of assymmetry cuts + Float_t* fAsymCuts; //[fNAsymCuts] array with different assymetry cuts + Int_t fNCellNCuts; // number of cuts with number of cells in cluster + Int_t* fCellNCuts; //[fNCellNCuts] array with different cell number cluster cuts + Int_t fNPIDBits; // number of PID bits to check in multi cuts option + Int_t* fPIDBits; //[fNPIDBits] array with different pid bits + //Histograms - - //TH3D * fhEtalon ; //Etalon histo, all distributions will have same binning as this one + + Int_t fHistoInvPtBins ; // Number of bins in inverse pt axis + Float_t fHistoInvPtMax ; // Maximum value of inverse pt histogram range + Float_t fHistoInvPtMin ; // Minimum value of inverse pt histogram range TH3D ** fhReMod ; //!REAL two-photon invariant mass distribution for different calorimeter modules. - TH3D ** fhRe1 ; //!REAL two-photon invariant mass distribution for different centralities and PID + TH3D ** fhRe1 ; //!REAL two-photon invariant mass distribution for different centralities and PID TH3D ** fhMi1 ; //!MIXED two-photon invariant mass distribution for different centralities and PID - TH3D ** fhRe2 ; //!REAL two-photon invariant mass distribution for different centralities and PID + TH3D ** fhRe2 ; //!REAL two-photon invariant mass distribution for different centralities and PID TH3D ** fhMi2 ; //!MIXED two-photon invariant mass distribution for different centralities and PID - TH3D ** fhRe3 ; //!REAL two-photon invariant mass distribution for different centralities and PID + TH3D ** fhRe3 ; //!REAL two-photon invariant mass distribution for different centralities and PID TH3D ** fhMi3 ; //!MIXED two-photon invariant mass distribution for different centralities and PID + + TH3D ** fhReInvPt1 ; //!REAL two-photon invariant mass distribution for different centralities and PID, inverse pT + TH3D ** fhMiInvPt1 ; //!MIXED two-photon invariant mass distribution for different centralities and PID, inverse pT + TH3D ** fhReInvPt2 ; //!REAL two-photon invariant mass distribution for different centralities and PID, inverse pT + TH3D ** fhMiInvPt2 ; //!MIXED two-photon invariant mass distribution for different centralities and PID, inverse pT + TH3D ** fhReInvPt3 ; //!REAL two-photon invariant mass distribution for different centralities and PID, inverse pT + TH3D ** fhMiInvPt3 ; //!MIXED two-photon invariant mass distribution for different centralities and PID, inverse pT + + //Multiple cuts + TH2D ** fhRePtNCellAsymCuts ; //!REAL two-photon invariant mass distribution for different pt cut, n cell cuts and assymetry + TH2D ** fhRePIDBits ; //!REAL two-photon invariant mass distribution for different PID bits + TH3D * fhEvents; //!Number of events per centrality, RP, zbin TH2D * fhRealOpeningAngle ; //! Opening angle of pair versus pair energy @@ -123,7 +170,7 @@ class AliAnaPi0 : public AliAnaPartCorrBaseClass { TH2D * fhPrimOpeningAngle ; //! Opening angle of pair versus pair energy, primaries TH2D * fhPrimCosOpeningAngle ; //! Cosinus of opening angle of pair version pair energy, primaries - ClassDef(AliAnaPi0,9) + ClassDef(AliAnaPi0,10) } ; diff --git a/PWG4/PartCorrDep/AliAnaPi0EbE.cxx b/PWG4/PartCorrDep/AliAnaPi0EbE.cxx index c88ac03d30e..b4bf7fea21b 100755 --- a/PWG4/PartCorrDep/AliAnaPi0EbE.cxx +++ b/PWG4/PartCorrDep/AliAnaPi0EbE.cxx @@ -116,21 +116,22 @@ TObjString * AliAnaPi0EbE::GetAnalysisCuts() { //Save parameters used for analysis TString parList ; //this will be list of parameters used for this analysis. - char onePar[255] ; + const Int_t buffersize = 255; + char onePar[buffersize] ; - sprintf(onePar,"--- AliAnaPi0EbE ---\n") ; + snprintf(onePar,buffersize,"--- AliAnaPi0EbE ---\n") ; parList+=onePar ; - sprintf(onePar,"fAnaType=%d (Pi0 selection type) \n",fAnaType) ; + snprintf(onePar,buffersize,"fAnaType=%d (Pi0 selection type) \n",fAnaType) ; parList+=onePar ; if(fAnaType == kSSCalo){ - sprintf(onePar,"Calorimeter: %s\n",fCalorimeter.Data()) ; + snprintf(onePar,buffersize,"Calorimeter: %s\n",fCalorimeter.Data()) ; parList+=onePar ; - sprintf(onePar,"fMinDist =%2.2f (Minimal distance to bad channel to accept cluster) \n",fMinDist) ; + snprintf(onePar,buffersize,"fMinDist =%2.2f (Minimal distance to bad channel to accept cluster) \n",fMinDist) ; parList+=onePar ; - sprintf(onePar,"fMinDist2=%2.2f (Cuts on Minimal distance to study acceptance evaluation) \n",fMinDist2) ; + snprintf(onePar,buffersize,"fMinDist2=%2.2f (Cuts on Minimal distance to study acceptance evaluation) \n",fMinDist2) ; parList+=onePar ; - sprintf(onePar,"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study) \n",fMinDist3) ; + snprintf(onePar,buffersize,"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study) \n",fMinDist3) ; parList+=onePar ; } @@ -167,13 +168,13 @@ TList * AliAnaPi0EbE::GetCreateOutputObjects() outputContainer->Add(fhPtPi0) ; fhPhiPi0 = new TH2F - ("hPhiPi0","#phi_{#pi^{0}}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiPi0","#phi_{#pi^{0}}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiPi0->SetYTitle("#phi"); fhPhiPi0->SetXTitle("p_{T #pi^{0}} (GeV/c)"); outputContainer->Add(fhPhiPi0) ; fhEtaPi0 = new TH2F - ("hEtaPi0","#phi_{#pi^{0}}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaPi0","#phi_{#pi^{0}}",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaPi0->SetYTitle("#eta"); fhEtaPi0->SetXTitle("p_{T #pi^{0}} (GeV/c)"); outputContainer->Add(fhEtaPi0) ; @@ -188,13 +189,13 @@ TList * AliAnaPi0EbE::GetCreateOutputObjects() outputContainer->Add(fhPtMCPi0) ; fhPhiMCPi0 = new TH2F - ("hPhiMCPi0","Identified pi0 from pi0",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCPi0","Identified pi0 from pi0",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiMCPi0->SetYTitle("#phi"); fhPhiMCPi0->SetXTitle("p_{T #pi^{0}} (GeV/c)"); outputContainer->Add(fhPhiMCPi0) ; fhEtaMCPi0 = new TH2F - ("hEtaMCPi0","Identified pi0 from pi0",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCPi0","Identified pi0 from pi0",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaMCPi0->SetYTitle("#eta"); fhEtaMCPi0->SetXTitle("p_{T #pi^{0}} (GeV/c)"); outputContainer->Add(fhEtaMCPi0) ; @@ -205,13 +206,13 @@ TList * AliAnaPi0EbE::GetCreateOutputObjects() outputContainer->Add(fhPtMCNoPi0) ; fhPhiMCNoPi0 = new TH2F - ("hPhiMCNoPi0","Identified pi0 not from pi0",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCNoPi0","Identified pi0 not from pi0",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiMCNoPi0->SetYTitle("#phi"); fhPhiMCNoPi0->SetXTitle("p_{T #pi^{0}} (GeV/c)"); outputContainer->Add(fhPhiMCNoPi0) ; fhEtaMCNoPi0 = new TH2F - ("hEtaMCNoPi0","Identified pi0 not from pi0",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCNoPi0","Identified pi0 not from pi0",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaMCNoPi0->SetYTitle("#eta"); fhEtaMCNoPi0->SetXTitle("p_{T #pi^{0}} (GeV/c)"); outputContainer->Add(fhEtaMCNoPi0) ; @@ -228,7 +229,7 @@ TList * AliAnaPi0EbE::GetCreateOutputObjects() TList * nmsHistos = GetNeutralMesonSelection()->GetCreateOutputObjects() ; if(GetNeutralMesonSelection()->AreNeutralMesonSelectionHistosKept()) for(Int_t i = 0; i < nmsHistos->GetEntries(); i++) outputContainer->Add(nmsHistos->At(i)) ; - delete nmsHistos; + delete nmsHistos; } @@ -464,6 +465,16 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() //Search for pi0 in fCalorimeter with shower shape analysis TObjArray * pl = 0x0; + //Select the Calorimeter of the photon + if(fCalorimeter == "PHOS") + pl = GetAODPHOS(); + else if (fCalorimeter == "EMCAL") + pl = GetAODEMCAL(); + + if(!pl) { + Info("MakeShowerShapeIdentification","TObjArray with %s clusters is NULL!\n",fCalorimeter.Data()); + return; + } //Get vertex for photon momentum calculation Double_t vertex[] = {0,0,0} ; //vertex @@ -474,11 +485,6 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex2); } - //Select the Calorimeter of the photon - if(fCalorimeter == "PHOS") - pl = GetAODPHOS(); - else if (fCalorimeter == "EMCAL") - pl = GetAODEMCAL(); TLorentzVector mom ; for(Int_t icalo = 0; icalo < pl->GetEntriesFast(); icalo++){ diff --git a/PWG4/macros/AddTaskPartCorr.C b/PWG4/macros/AddTaskPartCorr.C index adaf552ce87..ffaa5115ba1 100644 --- a/PWG4/macros/AddTaskPartCorr.C +++ b/PWG4/macros/AddTaskPartCorr.C @@ -174,6 +174,7 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calori anapi0->SetDebug(-1);//10 for lots of messages anapi0->SetInputAODName(Form("Photons%s",calorimeter.Data())); anapi0->SetCalorimeter(calorimeter); + anapi0->SwitchOnMultipleCutAnalysis(); if(kSimulation){ anapi0->SwitchOnFiducialCut(); AliFiducialCut * fidCut1stYear = anapi0->GetFiducialCut(); -- 2.43.5