for(Int_t iMC = 0; iMC < fMCarray->GetEntries(); iMC++)
{
fMCparticle = (AliAODMCParticle*) fMCarray->At(iMC);
- fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
+ if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
Int_t pdg = fMCparticle->GetPdgCode();
- Int_t mpdg = fMCparticleMother->GetPdgCode();
+
double proX = fMCparticle->Xv();
double proY = fMCparticle->Yv();
double proR = sqrt(pow(proX,2)+pow(proY,2));
if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax && fMCparticle->Charge()!=0)
{
//to correct background
- if (TMath::Abs(pdg) == 11){
+ if (TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0){
+ Int_t mpdg = fMCparticleMother->GetPdgCode();
+
if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
if(proR<7){
{
fMCtrack = fMCstack->Particle(iMC);
- fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
+ if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
TParticle *particle=fMCstack->Particle(iMC);
Int_t pdg = fMCtrack->GetPdgCode();
- Int_t mpdg = fMCtrackMother->GetPdgCode();
+
if(TMath::Abs(pdg)==111) fPtMCpi0->Fill(fMCtrack->Pt());
if(TMath::Abs(pdg)==221) fPtMCeta->Fill(fMCtrack->Pt());
{
//to correct background
- if (TMath::Abs(pdg) == 11){
+ if (TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0){
+ Int_t mpdg = fMCtrackMother->GetPdgCode();
if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
Double_t proR=particle->R();
if(proR<7){
if(track->Charge()>0) fCharge_p->Fill(fPt);
fMCparticle = (AliAODMCParticle*) fMCarray->At(track->GetLabel());
- fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
+ if(fMCparticle->GetMother()>0) fMCparticleMother = (AliAODMCParticle*) fMCarray->At(fMCparticle->GetMother());
Int_t pdg = fMCparticle->GetPdgCode();
- Int_t mpdg = fMCparticleMother->GetPdgCode();
-
+
if(fMCparticle->Eta()>=fEtaCutMin && fMCparticle->Eta()<=fEtaCutMax ){
- if( TMath::Abs(pdg) == 11 ){
+ if( TMath::Abs(pdg) == 11 && fMCparticle->GetMother()>0 ){
+ Int_t mpdg = fMCparticleMother->GetPdgCode();
if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
fPtMCelectronAfterAll_nonPrimary->Fill(fMCparticle->Pt()); //numerator for the total efficiency, non Primary track
}
if(track->Charge()>0) fCharge_p->Fill(fPt);
fMCtrack = fMCstack->Particle(track->GetLabel());
+ if(fMCtrack->GetFirstMother()>0) fMCtrackMother = fMCstack->Particle(fMCtrack->GetFirstMother());
+
Int_t pdg = fMCtrack->GetPdgCode();
+
if(fMCtrack->Eta()>=fEtaCutMin && fMCtrack->Eta()<=fEtaCutMax){
- if( TMath::Abs(pdg) == 11) fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
+ if( TMath::Abs(pdg) == 11 && fMCtrack->GetFirstMother()>0 ){
+ Int_t mpdg = fMCtrackMother->GetPdgCode();
+ if(TMath::Abs(mpdg) == 221 || TMath::Abs(mpdg) == 22 || TMath::Abs(mpdg) == 111){
+ fPtMCelectronAfterAll_nonPrimary->Fill(fMCtrack->Pt()); //numerator for the total efficiency, non Primary track
+ }
+ }
if( TMath::Abs(pdg) == 11 && fMCstack->IsPhysicalPrimary(track->GetLabel())) fPtMCelectronAfterAll_Primary->Fill(fMCtrack->Pt());
}
continue;
}
+ //--- Get MC informtion
+
int parentlabel = 99999;
int parentPID = 99999;
int grand_parentlabel = 99999;
} // end of mcLabel>-1
- } // end of MC info.
+ } // <------ end of MC info.
//cout << "Pi0 = " << mcOrgPi0 << " ; Eta = " << mcOrgEta << endl;
//printf("weight = %f\n",mcWeight);
if(TMath::Abs(track->Eta())>0.6) continue;
- if(TMath::Abs(track->Pt()<2.0)) continue;
+ if(TMath::Abs(track->Pt()<2.5)) continue;
fTrackPtBefTrkCuts->Fill(track->Pt());
// RecKine: ITSTPC cuts
Double_t mom = -999., eop=-999., pt = -999., dEdx=-999., fTPCnSigma=-10, phi=-999., eta=-999.;
pt = track->Pt();
- if(pt<2.0)continue;
-
- // Track extrapolation
+ if(pt<2.5)continue;
//Int_t charge = track->Charge();
fTrkpt->Fill(pt);
*/
//cout << "correction = " << fTPCnSigma << endl;
+ //--- track cluster match
+
double ncells = -1.0;
double m20 = -1.0;
double m02 = -1.0;
double disp = -1.0;
double rmatch = -1.0;
double nmatch = -1.0;
- double oppstatus = 0.0;
+ //double oppstatus = 0.0;
double emctof = 0.0;
Bool_t MaxEmatch = kFALSE;
- Bool_t fFlagPhotonicElec = kFALSE;
- Bool_t fFlagConvinatElec = kFALSE;
-
Int_t clsId = track->GetEMCALcluster();
if (clsId>0){
AliESDCaloCluster *clust = fESD->GetCaloCluster(clsId);
nmatch = clust->GetNTracksMatched();
emctof = clust->GetTOF();
//cout << "emctof = " << emctof << endl;
-
- if(fTPCnSigma>-1.5 && fTPCnSigma<3.0)
- {
- if(fSetKFpart)
- {
- SelectPhotonicElectron(iTracks,cent,track,fFlagPhotonicElec,fFlagConvinatElec,fTPCnSigma,m20,eop,mcele,mcWeight,iHijing,mcOrgPi0,mcOrgEta);
- }
- else
- {
- SelectPhotonicElectron2(iTracks,cent,track,fFlagPhotonicElec,fFlagConvinatElec,fTPCnSigma,m20,eop,mcele,mcWeight,iHijing,mcOrgPi0,mcOrgEta);
- }
- }
- if(fFlagPhotonicElec)oppstatus = 1.0;
- if(fFlagConvinatElec)oppstatus = 2.0;
- if(fFlagPhotonicElec && fFlagConvinatElec)oppstatus = 3.0;
-
- //cout << "eop org = "<< eop << endl;
- if(mcLabel>-1.0)
+ cout << "eop org = "<< eop << endl;
+ double eoporg = eop;
+ if(fmcData)
{
double mceopcorr = MCEopMeanCorrection(pt,cent);
eop += mceopcorr;
}
- //cout << "eop corr = " << eop << endl;
+ cout << "eop corr = " << eop << endl;
double valdedx[16];
valdedx[0] = pt; valdedx[1] = nITS; valdedx[2] = phi; valdedx[3] = eta; valdedx[4] = fTPCnSigma;
valdedx[5] = eop; valdedx[6] = rmatch; valdedx[7] = ncells, valdedx[8] = nmatch; valdedx[9] = m20; valdedx[10] = mcpT;
- valdedx[11] = cent; valdedx[12] = dEdx; valdedx[13] = oppstatus; valdedx[14] = nTPCcl;
+ //valdedx[11] = cent; valdedx[12] = dEdx; valdedx[13] = oppstatus; valdedx[14] = nTPCcl;
+ valdedx[11] = cent; valdedx[12] = dEdx; valdedx[13] = eoporg; valdedx[14] = nTPCcl;
valdedx[15] = mcele;
- //fEleInfo->Fill(valdedx);
+ fEleInfo->Fill(valdedx);
}
}
fElenSigma->Fill(valEop);
}
*/
- // ============ PID
+ // --- tarck cut & e ID
if(nITS<2.5)continue;
if(nTPCcl<100)continue;
fTPCnsigma->Fill(mom,fTPCnSigma);
if(fTPCnSigma >= -1.0 && fTPCnSigma <= 3)fTrkEovPBef->Fill(pt,eop);
- Int_t pidpassed = 1;
-
- // check reco eff. with TPC
-
- double phoval[5];
- phoval[0] = cent;
- phoval[1] = pt;
- phoval[2] = fTPCnSigma;
- phoval[3] = iHijing;
- phoval[4] = mcMompT;
-
- if((fTPCnSigma >= -1.0 && fTPCnSigma <= 3) && mcele>-1 && mcPho && mcOrgPi0)
- {
- if(iHijing==1)mcWeight = 1.0;
- fIncpTMCpho_pi0e_TPC->Fill(phoval,mcWeight);
- if(fFlagPhotonicElec) fPhoElecPtMC_pi0e_TPC->Fill(phoval,mcWeight);
- if(fFlagConvinatElec) fSameElecPtMC_pi0e_TPC->Fill(phoval,mcWeight);
- }
+ //--- track accepted by HFE
- //--- track accepted
+ Int_t pidpassed = 1;
AliHFEpidObject hfetrack;
hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
hfetrack.SetRecTrack(track);
if(!fPID->IsSelected(&hfetrack, NULL, "", fPIDqa)) pidpassed = 0;
if(pidpassed==0) continue;
-
+
+ //--- photonic ID
+
+ Bool_t fFlagPhotonicElec = kFALSE;
+ Bool_t fFlagConvinatElec = kFALSE;
+
+ if(fSetKFpart)
+ {
+ SelectPhotonicElectron(iTracks,cent,track,fFlagPhotonicElec,fFlagConvinatElec,fTPCnSigma,m20,eop,mcele,mcWeight,iHijing,mcOrgPi0,mcOrgEta);
+ }
+ else
+ {
+ SelectPhotonicElectron2(iTracks,cent,track,fFlagPhotonicElec,fFlagConvinatElec,fTPCnSigma,m20,eop,mcele,mcWeight,iHijing,mcOrgPi0,mcOrgEta);
+ }
+
+ //--- check reco eff. with TPC
+ double phoval[5];
+ phoval[0] = cent;
+ phoval[1] = pt;
+ phoval[2] = fTPCnSigma;
+ phoval[3] = iHijing;
+ phoval[4] = mcMompT;
+
+ if((fTPCnSigma >= -1.0 && fTPCnSigma <= 3) && mcele>-1 && mcPho && mcOrgPi0)
+ {
+ if(iHijing==1)mcWeight = 1.0;
+ fIncpTMCpho_pi0e_TPC->Fill(phoval,mcWeight);
+ if(fFlagPhotonicElec) fPhoElecPtMC_pi0e_TPC->Fill(phoval,mcWeight);
+ if(fFlagConvinatElec) fSameElecPtMC_pi0e_TPC->Fill(phoval,mcWeight);
+ }
+
+ //+++++++ E/p cut ++++++++++++++++
+
+ if(eop<0.9 || eop>1.3)continue;
+
fTrkEovPAft->Fill(pt,eop);
fdEdxAft->Fill(mom,fTPCnSigma);
if(!fPID->GetNumberOfPIDdetectors())
{
fPID->AddDetector("TPC", 0);
- fPID->AddDetector("EMCAL", 1);
+ //fPID->AddDetector("EMCAL", 1); <--- apply PID selection in task
}
Double_t params[4];
const Double_t kMaxP = 20.;
// 1st histogram: TPC dEdx with/without EMCAL (p, pT, TPC Signal, phi, eta, Sig, e/p, ,match, cell, M02, M20, Disp, Centrality, select)
- Int_t nBins[16] = { 100, 7, 60, 20, 90, 250, 25, 40, 10, 200, 100, 100, 500, 5, 100, 8};
- Double_t min[16] = {kMinP, -0.5, 1.0, -1.0, -5.0, 0, 0, 0, 0.0, 0.0, 0.0, 0, 0, -0.5, 80, -1.5};
- Double_t max[16] = {kMaxP, 6.5, 4.0, 1.0, 4.0, 2.5, 0.05, 40, 10, 2.0, 20.0, 100, 100, 4.5, 180, 6.5};
+ Int_t nBins[16] = { 100, 7, 60, 20, 90, 100, 25, 40, 10, 100, 100, 10, 250, 100, 100, 8};
+ Double_t min[16] = {kMinP, -0.5, 1.0, -1.0, -5.0, 0, 0, 0, 0.0, 0.0, 0.0, 0, 0, 0, 80, -1.5};
+ Double_t max[16] = {kMaxP, 6.5, 4.0, 1.0, 4.0, 2.0, 0.05, 40, 10, 1.0, 20.0, 100, 100, 2.0, 180, 6.5};
fEleInfo = new THnSparseD("fEleInfo", "Electron Info; pT [GeV/c]; TPC signal;phi;eta;nSig; E/p;Rmatch;Ncell;clsF;M20;mcpT;Centrality;charge;opp;same;trigCond;MCele", 16, nBins, min, max);
fOutputList->Add(fEleInfo);
shift = fcorr0->Eval(pTmc)-fcorr1->Eval(pTmc);
+ fcorr0->Delete();
+ fcorr1->Delete();
+
return shift;
}