In case of MC particles analysis, PID should set electrons and photons distinctly in EMCAL
{
//Initialize the parameters of the PID.
- fEMCALPhotonWeight = 0.5 ;
- fEMCALPi0Weight = 0.5 ;
- fEMCALElectronWeight = 0.5 ;
- fEMCALChargeWeight = 0.5 ;
- fEMCALNeutralWeight = 0.5 ;
-
- fPHOSPhotonWeight = 0.5 ;
- fPHOSPi0Weight = 0.5 ;
- fPHOSElectronWeight = 0.5 ;
- fPHOSChargeWeight = 0.5 ;
- fPHOSNeutralWeight = 0.5 ;
+ fEMCALPhotonWeight = 0.6 ;
+ fEMCALPi0Weight = 0.6 ;
+ fEMCALElectronWeight = 0.6 ;
+ fEMCALChargeWeight = 0.6 ;
+ fEMCALNeutralWeight = 0.6 ;
+
+ fPHOSPhotonWeight = 0.6 ;
+ fPHOSPi0Weight = 0.6 ;
+ fPHOSElectronWeight = 0.6 ;
+ fPHOSChargeWeight = 0.6 ;
+ fPHOSNeutralWeight = 0.6 ;
//Formula to set the PID weight threshold for photon or pi0
//fPHOSWeightFormula = kTRUE;
pdg = kNeutralUnknown ;
}
else{//EMCAL
-
- if(pid[AliVCluster::kPhoton]+pid[AliVCluster::kElectron] > wPh) pdg = kPhoton ; //temporal sollution until track matching for electrons is considered
- //if(pid[AliVCluster::kPhoton] > wPh) pdg = kPhoton ;
- else if(pid[AliVCluster::kPi0] > wPi0) pdg = kPi0 ;
- //else if(pid[AliVCluster::kElectron] > wE) pdg = kElectron ;
+
+ if(pid[AliVCluster::kPhoton] > wPh) pdg = kPhoton ;
+ else if(pid[AliVCluster::kElectron] > wE) pdg = kElectron ;
+ else if(pid[AliVCluster::kPhoton]+pid[AliVCluster::kElectron] > wPh) pdg = kPhoton ; //temporal sollution until track matching for electrons is considered
+ else if(pid[AliVCluster::kPi0] > wPi0) pdg = kPi0 ;
else if(chargedHadronWeight + neutralHadronWeight > wCh) pdg = kChargedHadron ;
else if(neutralHadronWeight + chargedHadronWeight > wNe) pdg = kNeutralHadron ;
- else pdg = kNeutralUnknown ;
-
+ else pdg = kNeutralUnknown ;
}
if(fDebug > 0)printf("AliCaloPID::GetPdg:Final Pdg: %d, cluster energy %2.2f \n", pdg,energy);
// or other particle identification and correlations
// Separates generated particles into charged (CTS)
// and neutral (PHOS or EMCAL acceptance)
+// Now, it only works with data stored in Kinematics.root and
+// not in filtered Kinematics branch in AODs
//
//*-- Author: Gustavo Conesa (LNF-INFN)
//////////////////////////////////////////////////////////////////////////////
AliCaloTrackReader(), fDecayPi0(0),
fNeutralParticlesArray(0x0), fChargedParticlesArray(0x0),
fStatusArray(0x0), fKeepAllStatus(0), fCheckOverlap(0),
- fEMCALOverlapAngle(0),fPHOSOverlapAngle(0), fIndex2ndPhoton(0)
+ fEMCALOverlapAngle(0),fPHOSOverlapAngle(0), fIndex2ndPhoton(0),
+ fOnlyGeneratorParticles(kTRUE)
{
//Ctor
if(fChargedParticlesArray) delete fChargedParticlesArray ;
if(fNeutralParticlesArray) delete fNeutralParticlesArray ;
- if(fStatusArray) delete fStatusArray ;
+ if(fStatusArray) delete fStatusArray ;
}
fNeutralParticlesArray->SetAt(12,0); fNeutralParticlesArray->SetAt(14,1); fNeutralParticlesArray->SetAt(16,2);
fStatusArray = new TArrayI(1);
fStatusArray->SetAt(1,0);
-
- fKeepAllStatus = kTRUE;
+
+ fOnlyGeneratorParticles = kTRUE;
+ fKeepAllStatus = kTRUE;
- fCheckOverlap = kFALSE;
- fEMCALOverlapAngle = 2.5 * TMath::DegToRad();
- fPHOSOverlapAngle = 0.5 * TMath::DegToRad();
- fIndex2ndPhoton = -1;
+ fCheckOverlap = kFALSE;
+ fEMCALOverlapAngle = 2.5 * TMath::DegToRad();
+ fPHOSOverlapAngle = 0.5 * TMath::DegToRad();
+ fIndex2ndPhoton = -1;
- fDataType = kMC;
+ fDataType = kMC;
fReadStack = kTRUE;
- fReadAODMCParticles = kFALSE;
+ fReadAODMCParticles = kFALSE; //This class only works with Kinematics.root input.
//For this reader we own the objects of the arrays
- fAODCTS->SetOwner(kTRUE);
+ fAODCTS ->SetOwner(kTRUE);
fAODEMCAL->SetOwner(kTRUE);
- fAODPHOS->SetOwner(kTRUE);
+ fAODPHOS ->SetOwner(kTRUE);
}
Bool_t AliCaloTrackMCReader::FillInputEvent(const Int_t iEntry, const char * currentFileName){
//Fill the event counter and input lists that are needed, called by the analysis maker.
- fEventNumber = iEntry;
+ fEventNumber = iEntry;
fCurrentFileName = TString(currentFileName);
- fTrackMult = 0;
+ fTrackMult = 0;
//In case of analysis of events with jets, skip those with jet pt > 5 pt hard
if(fComparePtHardAndJetPt && GetStack()) {
if(!ComparePtHardAndJetPt()) return kFALSE ;
//Fill Vertex array
FillVertexArray();
- Int_t iParticle = 0 ;
- Double_t charge = 0.;
-
- for (iParticle = 0 ; iParticle < GetStack()->GetNtrack() ; iParticle++) {
+ Int_t iParticle = 0 ;
+ Double_t charge = 0.;
+ Int_t nparticles = GetStack()->GetNtrack() ;
+ if(fOnlyGeneratorParticles) nparticles=GetStack()->GetNprimary();
+ for (iParticle = 0 ; iParticle < nparticles ; iParticle++) {
TParticle * particle = GetStack()->Particle(iParticle);
TLorentzVector momentum;
Float_t p[3];
// Separates generated particles into charged (CTS)
// and neutral (PHOS or EMCAL acceptance)
//
+// Now, it only works with data stored in Kinematics.root and
+// not in filtered Kinematics branch in AODs
+//
//*-- Author: Gustavo Conesa (LNF-INFN)
//////////////////////////////////////////////////////////////////////////////
void SwitchOffStatusSelection() {fKeepAllStatus = kTRUE;}
Bool_t KeepParticleWithStatus(Int_t status) const ;
+ void SwitchOnOnlyGeneratorParticles() {fOnlyGeneratorParticles = kTRUE;}
+ void SwitchOffOnlyGeneratorParticles() {fOnlyGeneratorParticles = kFALSE;}
+
void GetVertex(Double_t v[3]) const ;
Double_t* GetVertex(const Int_t evtIndex) const {return fVertex[evtIndex];}
void GetVertex(Double_t vertex[3], const Int_t evtIndex) const
Float_t GetPHOSOverlapAngle() const {return fPHOSOverlapAngle ;}
void SetEMCALOverlapAngle(Float_t angle) {fEMCALOverlapAngle = angle;}
void SetPHOSOverlapAngle(Float_t angle) {fPHOSOverlapAngle = angle;}
-
+
AliESDCentrality* GetCentrality() const {return 0x0;}
private:
Float_t fEMCALOverlapAngle; // Aperture angle of photons from decay that is not resolved by EMCAL, in radians
Float_t fPHOSOverlapAngle; // Aperture angle of photons from decay that is not resolved by PHOS, in radians
Int_t fIndex2ndPhoton; // Check overlap of first decay photon already done, internal use.
-
- ClassDef(AliCaloTrackMCReader,3)
+ Bool_t fOnlyGeneratorParticles; // Use particles only generated by PYTHIA/HERWIG/... and not by the MC tranport G3/G4/FLUKA ...
+
+ ClassDef(AliCaloTrackMCReader,4)
} ;