fMassEtaMin(0), fMassEtaMax(0),
fMassPi0Min(0), fMassPi0Max(0),
fMassPhoMin(0), fMassPhoMax(0),
-fSplitEFracMin(0), fSplitWidthSigma(0)
+fSplitWidthSigma(0)
{
//Ctor
fMassEtaMin(0), fMassEtaMax(0),
fMassPi0Min(0), fMassPi0Max(0),
fMassPhoMin(0), fMassPhoMax(0),
-fSplitEFracMin(0), fSplitWidthSigma(0)
+fSplitWidthSigma(0)
{
//Ctor
fMassEtaMin(0), fMassEtaMax(0),
fMassPi0Min(0), fMassPi0Max(0),
fMassPhoMin(0), fMassPhoMax(0),
-fSplitEFracMin(0), fSplitWidthSigma(0)
+fSplitWidthSigma(0)
{
//Ctor
// fAsyMinParam[1][3] = 0.0000377; // pol3 param2 for NLM>2 , E < 25 GeV, PbPb
- fSplitEFracMin = 0. ; // no effect
+ fSplitEFracMin[0] = 0.0 ; // 0.96
+ fSplitEFracMin[1] = 0.0 ; // 0.96
+ fSplitEFracMin[2] = 0.0 ; // 0.7
+
fSplitWidthSigma = 3. ;
}
Float_t m02 = cluster->GetM02();
const Int_t nc = cluster->GetNCells();
Int_t absIdList[nc];
- Float_t maxEList [nc];
+ Float_t maxEList [nc];
mass = -1.;
angle = -1.;
e2 = cluster2.E();
// Consider clusters with splitted energy not too different to original cluster energy
- if((e1+e2)/eClus < fSplitEFracMin) return kNeutralUnknown ;
+ Float_t splitFracCut = 0;
+ if(nMax < 3) splitFracCut = fSplitEFracMin[nMax-1];
+ else splitFracCut = fSplitEFracMin[2];
+ if((e1+e2)/eClus < splitFracCut) return kNeutralUnknown ;
if(fDebug > 0) printf("\t pass Split E frac cut\n");
void SetClusterSplittingMinNCells(Int_t cut) { fSplitMinNCells = cut ; }
- void SetSplitEnergyFractionMinimum(Float_t min){ fSplitEFracMin = min ; }
- Float_t GetSplitEnergyFractionMinimum() const { return fSplitEFracMin ; }
+ void SetSplitEnergyFractionMinimum(Int_t i, Float_t min){ if (i < 3 && i >=0 ) fSplitEFracMin[i] = min ; }
+ Float_t GetSplitEnergyFractionMinimum(Int_t i) const { if( i < 3 && i >=0 ) return fSplitEFracMin[i] ; else return 0 ; }
Float_t GetPi0MinMass() const { return fMassPi0Min ; } // Simple cut case
Float_t GetEtaMinMass() const { return fMassEtaMin ; } // Simple cut case
Float_t fM02MinParam[2][6] ; // 4 param for pol3 fit on M02 minimum for pi0 selection (maximum for conversions)
Float_t fM02MaxParam[2][6] ; // 4 param for pol3 fit on M02 maximum for pi0 selection
Float_t fAsyMinParam[2][6] ; // 4 param for pol3 fit on asymmetry minimum, for 2 cases, NLM=1 and NLM>=2
- Float_t fSplitEFracMin ; // Do not use clusters with too large energy in cluster compared
- // to energy in splitted clusters
+ Float_t fSplitEFracMin[3] ; // Do not use clusters with too large energy in cluster compared
+ // to energy in splitted clusters, depeding on NLM
Float_t fSplitWidthSigma; // Cut on mass+-width*fSplitWidthSigma
fhNLocMax[0][matched]->Fill(en,nMax);
+ Int_t inlm = -1;
+ if (nMax == 1) inlm = 0;
+ else if(nMax == 2) inlm = 1;
+ else if(nMax > 2 ) inlm = 2;
+
if ( nMax == 1 )
{
fhM02NLocMax1[0][matched]->Fill(en,l0) ;
fhNLocMaxM02Cut[0][matched]->Fill(en,nMax);
if(IsDataMC()) fhNLocMaxM02Cut[mcindex][matched]->Fill(en,nMax);
-
+
+ Float_t splitFracMin = GetCaloPID()->GetSplitEnergyFractionMinimum(inlm) ;
+
if (nMax==1)
{
fhMassNLocMax1[0][matched]->Fill(en,mass );
// Effect of cuts in mass histograms
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum() && !matched)
+ if(!matched)
{
- fhMassSplitECutNLocMax1->Fill(en,mass );
if(m02OK)
{
fhMassM02CutNLocMax1->Fill(en,mass);
fhAsymM02CutNLocMax1->Fill(en,asym );
+ if(splitFrac > splitFracMin) fhMassSplitECutNLocMax1->Fill(en,mass );
} // m02
} // split frac
if(m02OK && asyOK)
{
fhSplitEFractionAfterCutsNLocMax1[0][matched]->Fill(en,splitFrac);
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum()) fhMassAfterCutsNLocMax1[0][matched]->Fill(en,mass);
+ if(splitFrac > splitFracMin) fhMassAfterCutsNLocMax1[0][matched]->Fill(en,mass);
if(!matched && IsDataMC() && fFillMCFractionHisto && mcindex==kmcPi0)
{
fhAsymNLocMax2[0][matched]->Fill(en,asym );
// Effect of cuts in mass histograms
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum() && !matched)
+ if(!matched)
{
- fhMassSplitECutNLocMax2->Fill(en,mass );
if(m02OK)
{
fhMassM02CutNLocMax2->Fill(en,mass);
fhAsymM02CutNLocMax2->Fill(en,asym );
+ if(splitFrac > splitFracMin) fhMassSplitECutNLocMax2->Fill(en,mass );
} // m02
} // split frac
if(m02OK && asyOK)
{
fhSplitEFractionAfterCutsNLocMax2[0][matched]->Fill(en,splitFrac);
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum()) fhMassAfterCutsNLocMax2[0][matched]->Fill(en,mass);
+ if(splitFrac >splitFracMin) fhMassAfterCutsNLocMax2[0][matched]->Fill(en,mass);
if(!matched && IsDataMC() && fFillMCFractionHisto && mcindex==kmcPi0)
{
fhAsymNLocMaxN[0][matched]->Fill(en,asym);
// Effect of cuts in mass histograms
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum() && !matched)
+ if(!matched)
{
- fhMassSplitECutNLocMaxN->Fill(en,mass );
if(m02OK)
{
fhMassM02CutNLocMaxN->Fill(en,mass);
fhAsymM02CutNLocMaxN->Fill(en,asym );
+ if(splitFrac > splitFracMin)fhMassSplitECutNLocMaxN->Fill(en,mass );
} // m02
} // split frac
if(m02OK && asyOK)
{
fhSplitEFractionAfterCutsNLocMaxN[0][matched]->Fill(en,splitFrac);
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum()) fhMassAfterCutsNLocMaxN[0][matched]->Fill(en,mass);
+ if(splitFrac > splitFracMin) fhMassAfterCutsNLocMaxN[0][matched]->Fill(en,mass);
if(!matched && IsDataMC() && fFillMCFractionHisto && mcindex==kmcPi0)
{
if(asyOK && m02OK)
{
fhSplitEFractionAfterCutsNLocMax1[mcindex][matched]->Fill(en,splitFrac);
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum())
+ if(splitFrac > splitFracMin)
fhMassAfterCutsNLocMax1[mcindex][matched]->Fill(en,mass);
}
if(asyOK && m02OK)
{
fhSplitEFractionAfterCutsNLocMax2[mcindex][matched]->Fill(en,splitFrac);
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum())
+ if(splitFrac >splitFracMin)
fhMassAfterCutsNLocMax2[mcindex][matched]->Fill(en,mass);
}
if(asyOK && m02OK)
{
fhSplitEFractionAfterCutsNLocMaxN[mcindex][matched]->Fill(en,splitFrac);
- if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum())
+ if(splitFrac > splitFracMin )
fhMassAfterCutsNLocMaxN[mcindex][matched]->Fill(en,mass);
}
fMinDist2 = 4.;
fMinDist3 = 5.;
+ fNLMECutMin[0] = 10.;
+ fNLMECutMin[1] = 6. ;
+ fNLMECutMin[2] = 6. ;
+
}
//__________________________________________________________________
continue ;
}
+ if(nMaxima == 1 && fNLMECutMin[0] > mom.E()) continue;
+ if(nMaxima == 2 && fNLMECutMin[1] > mom.E()) continue;
+ if(nMaxima > 2 && fNLMECutMin[2] > mom.E()) continue;
+
if(GetDebug() > 1)
printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - NLM %d accepted \n",nMaxima);
Int_t GetNLMCutMin() const { return fNLMCutMin ; }
Int_t GetNLMCutMax() const { return fNLMCutMax ; }
- void SetTimeCut(Double_t min, Double_t max) { fTimeCutMin = min;
+ void SetNLMMinEnergy(Int_t i, Float_t min) { if (i < 3 && i >=0 ) fNLMECutMin[i] = min ; }
+ Float_t GetNLMMinEnergy(Int_t i) const { if( i < 3 && i >=0 ) return fNLMECutMin[i] ; else return 0 ; }
+
+ void SetTimeCut(Double_t min, Double_t max) { fTimeCutMin = min;
fTimeCutMax = max ; }
Double_t GetTimeCutMin() const { return fTimeCutMin ; }
Double_t GetTimeCutMax() const { return fTimeCutMax ; }
void SwitchOffOnlySimpleHistoFill() { fFillOnlySimpleSSHisto = kFALSE ; }
+
//For histograms
enum mcTypes { kmcPhoton = 0, kmcConversion = 1, kmcPi0 = 2,
kmcEta = 3, kmcElectron = 4, kmcHadron = 5 };
Float_t fMinDist3; // One more cut on distance used for acceptance-efficiency study
Int_t fNLMCutMin ; // Remove clusters/cells with number of local maxima smaller than this value
Int_t fNLMCutMax ; // Remove clusters/cells with number of local maxima larger than this value
+ Bool_t fNLMECutMin[3] ; // Minimum energy of the cluster, depending on nlm.
+
Double_t fTimeCutMin ; // Remove clusters/cells with time smaller than this value, in ns
Double_t fTimeCutMax ; // Remove clusters/cells with time larger than this value, in ns
Bool_t fFillSelectClHisto; // Fill selected cluster histograms
Bool_t fFillOnlySimpleSSHisto; // Fill selected cluster histograms, selected SS histograms
+
//Only for combination of calorimeter and conversion photons, kIMCaloTracks
TString fInputAODGammaConvName; // Name of AOD branch with conversion photons
AliAnaPi0EbE( const AliAnaPi0EbE & pi0ebe) ; // cpy ctor
AliAnaPi0EbE & operator = (const AliAnaPi0EbE & pi0ebe) ; // cpy assignment
- ClassDef(AliAnaPi0EbE,23)
+ ClassDef(AliAnaPi0EbE,24)
} ;