fSumPtThreshold(0.),
fPtFraction(0.),
fICMethod(0),
-fPartInCone(0)
+fPartInCone(0),
+fDebug(-1)
{
//default ctor
Bool_t & isolated) const
{
//Search in cone around a candidate particle if it is isolated
+ Float_t ptC = pCandidate->Pt() ;
Float_t phiC = pCandidate->Phi() ;
if(phiC<0) phiC+=TMath::TwoPi();
Float_t etaC = pCandidate->Eta() ;
- Float_t ptC = pCandidate->Pt() ;
Float_t pt = -100. ;
Float_t eta = -100. ;
Float_t phi = -100. ;
nfrac = 0 ;
coneptsum = 0.;
isolated = kFALSE;
+
+ if(fDebug>0)
+ {
+ printf("AliIsolationCut::MakeIsolationCut() - Cadidate pT %2.2f, eta %2.2f, phi %2.2f, cone %1.2f, thres %2.2f, Fill AOD? %d",
+ pCandidate->Pt(), pCandidate->Eta(), pCandidate->Phi()*TMath::RadToDeg(), fConeSize,fPtThreshold,bFillAOD);
+ if(plCTS) printf(", nTracks %d" ,plCTS->GetEntriesFast());
+ if(plNe) printf(", nClusters %d",plNe ->GetEntriesFast());
+
+ printf("\n");
+ }
//Initialize the array with refrences
TObjArray * refclusters = 0x0;
rad = Radius(etaC, phiC, eta, phi);
+ if(fDebug>0)
+ printf("\t track %d, pT %2.2f, eta %1.2f, phi %2.2f, R candidate %2.2f", ipr,pt,eta,phi,rad);
+
if(rad < fConeSize)
{
+ if(fDebug>0) printf(" - inside candidate cone");
+
if(bFillAOD)
{
ntrackrefs++;
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++;
} // Inside cone
+
+ if(fDebug>0) printf("\n");
+
}// charged particle loop
+
+
}//Tracks
+
//Check neutral particles in cone.
if(plNe &&
(fPartInCone==kOnlyNeutral || fPartInCone==kNeutralAndCharged))
rad = Radius(etaC, phiC, eta, phi);
+ if(fDebug>0)
+ printf("\t cluster %d, pT %2.2f, eta %1.2f, phi %2.2f, R candidate %2.2f", ipr,pt,eta,phi,rad);
+
if(rad < fConeSize)
{
+ if(fDebug>0) printf(" - inside candidate cone");
+
if(bFillAOD)
{
nclusterrefs++;
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 fPtFraction*ptC<fPtThreshold then consider the fPtThreshold directly
}//in cone
+ if(fDebug>0) printf("\n");
+
}// neutral particle loop
}//neutrals
- //printf("Isolation Cut: in cone with: pT>pTthres %d, pT > pTfrac*pTcandidate %d \n",n,nfrac);
//Add reference arrays to AOD when filling AODs only
if(bFillAOD)
void SetPtFraction(Float_t pt) { fPtFraction = pt ; }
void SetICMethod(Int_t i ) { fICMethod = i ; }
void SetParticleTypeInCone(Int_t i) { fPartInCone = i ; }
-
+ void SetDebug(Int_t d) { fDebug = d ; }
private:
Float_t fConeSize ; // Size of the isolation cone
Int_t fPartInCone; // Type of particles inside cone:
// kNeutralAndCharged, kOnlyNeutral, kOnlyCharged
+ Int_t fDebug; // Debug level
+
AliIsolationCut( const AliIsolationCut & g) ; // cpy ctor
AliIsolationCut & operator = (const AliIsolationCut & g) ; // cpy assignment
- ClassDef(AliIsolationCut,4)
+ ClassDef(AliIsolationCut,5)
} ;
}
+//__________________________________
+void AliAnaParticleIsolation::Init()
+{
+ // Do some checks and init stuff
+
+ // In case of several cone and thresholds analysis, open the cuts for the filling of the
+ // track and cluster reference arrays in cone when done in the MakeAnalysisFillAOD().
+ // The different cones, thresholds are tested for this list of tracks, clusters.
+ if(fMakeSeveralIC)
+ {
+ printf("AliAnaParticleIsolation::Init() - Open default isolation cuts for multiple Isolation analysis\n");
+ GetIsolationCut()->SetPtThreshold(100);
+ GetIsolationCut()->SetPtFraction(100);
+ GetIsolationCut()->SetConeSize(1);
+ }
+}
+
//____________________________________________
void AliAnaParticleIsolation::InitParameters()
{
//If too small or too large pt, skip
if(aodinput->Pt() < GetMinPt() || aodinput->Pt() > GetMaxPt() ) continue ;
- //check if it is low pt trigger particle, then adjust the isolation method
- if(aodinput->Pt() < GetIsolationCut()->GetPtThreshold() ||
- aodinput->Pt() < GetIsolationCut()->GetSumPtThreshold())
+ //check if it is low pt trigger particle
+ if((aodinput->Pt() < GetIsolationCut()->GetPtThreshold() ||
+ aodinput->Pt() < GetIsolationCut()->GetSumPtThreshold()) &&
+ !fMakeSeveralIC)
{
continue ; //trigger should not come from underlying event
}
if(pt < GetMinPt() || pt > GetMaxPt() ) continue ;
// --- In case of redoing isolation from delta AOD ----
- if(fMakeSeveralIC) {
+ if(fMakeSeveralIC)
+ {
//Analysis of multiple IC at same time
MakeSeveralICAnalysis(aod);
+ continue;
}
else if(fReMakeIC)
{
Float_t ptC = ph->Pt();
Int_t tag = ph->GetTag();
+ if(GetDebug() > 0) printf("AliAnaParticleIsolation::MakeSeveralICAnalysis() - Isolate pT %2.2f\n",ptC);
+
//Keep original setting used when filling AODs, reset at end of analysis
Float_t ptthresorg = GetIsolationCut()->GetPtThreshold();
Float_t ptfracorg = GetIsolationCut()->GetPtFraction();
{
GetIsolationCut()->SetConeSize(fConeSizes[icone]);
coneptsum = 0 ;
-
+
//Loop on ptthresholds
for(Int_t ipt = 0; ipt<fNPtThresFrac ;ipt++)
{
n[icone][ipt]=0;
nfrac[icone][ipt]=0;
GetIsolationCut()->SetPtThreshold(fPtThresholds[ipt]);
+
GetIsolationCut()->MakeIsolationCut(ph->GetObjArray(GetAODObjArrayName()+"Tracks"),
ph->GetObjArray(GetAODObjArrayName()+"Clusters"),
GetReader(), GetCaloPID(),
n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
//Normal ptThreshold cut
+
+ if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeSeveralICAnalysis() - cone size %1.1f, ptThres %1.1f, n %d, nfrac %d, coneptsum %2.2f, isolated %d\n",
+ fConeSizes[icone],fPtThresholds[icone],n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated);
+
if(n[icone][ipt] == 0)
{
fhPtThresIsolated[icone][ipt]->Fill(ptC);
TList * GetCreateOutputObjects() ;
+ void Init() ;
+
void InitParameters() ;
void MakeAnalysisFillAOD() ;
AliAnaParticleIsolation( const AliAnaParticleIsolation & iso) ; // cpy ctor
AliAnaParticleIsolation & operator = (const AliAnaParticleIsolation & iso) ; // cpy assignment
- ClassDef(AliAnaParticleIsolation,10)
+ ClassDef(AliAnaParticleIsolation,11)
} ;