fhTPCElectrons = new TH1F("fhTPCElectrons","",400,0,400);\r
outputContainer->Add(fhTPCElectrons);\r
\r
+ fhNVTX = new TH1F("fhNVTX","",20,0,20);\r
+ outputContainer->Add(fhNVTX);\r
\r
+ fhDVM1 = new TH1F("fhDVM1","",400,0,400);\r
+ outputContainer->Add(fhDVM1);\r
+ \r
+ fhDVM2 = new TH1F("fhDVM2","",400,0,400);\r
+ outputContainer->Add(fhDVM2);\r
+ \r
if(IsDataMC()){\r
fhEmcalMCE = new TH1F("fhEmcalMCE","",400,0,400);\r
outputContainer->Add(fhEmcalMCE);\r
fhSpecies = new TH1F("fhSpecies","",1000,0,1000);\r
outputContainer->Add(fhSpecies);\r
\r
- fhDVM1 = new TH1F("fhDVM1","",400,0,400);\r
- outputContainer->Add(fhDVM1);\r
- \r
- fhDVM2 = new TH1F("fhDVM2","",400,0,400);\r
- outputContainer->Add(fhDVM2);\r
- \r
- fhNVTX = new TH1F("fhNVTX","",20,0,20);\r
- outputContainer->Add(fhNVTX);\r
- \r
fhNVTXMC = new TH1F("fhNVTXMC","",20,0,20);\r
outputContainer->Add(fhNVTXMC);\r
}\r
fNElecEv=0;\r
if(fWriteNtuple)\r
events->Fill(fEventNumber);\r
-\r
+ \r
//This reads in tracks, extrapolates to EMCAL, does p/E selectrons, identifies electron candidates\r
//After candidates are obtained, btagging and saving into AOD.\r
AliStack *stack =0x0;\r
Int_t ntracks = GetAODCTS()->GetEntriesFast();\r
if(GetDebug() > 0)\r
printf("AliAnaBtag::MakeAnalysisFillAOD() - In CTS aod entries %d\n", ntracks);\r
-\r
+ \r
Int_t iCluster = -999;\r
Int_t ntot = cl->GetEntriesFast();\r
-\r
+ \r
//CLUSTER STUFF \r
for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
AliVCluster * clus = (AliVCluster*) (cl->At(iclus));\r
Float_t xclus[3];\r
clus->GetPosition(xclus);\r
TVector3 cluspos(xclus[0],xclus[1],xclus[2]);\r
-\r
+ \r
fhClusterMap->Fill(cluspos.Eta(),cluspos.Phi());\r
}\r
\r
\r
-\r
+ \r
for (Int_t itrk = 0; itrk < ntracks; itrk++) {////////////// track loop\r
iCluster = -999; //start with no match\r
AliAODTrack * track = (AliAODTrack*) (GetAODCTS()->At(itrk)) ;\r
if(track->GetLabel()<0){\r
if(GetDebug()>0)\r
- printf("Negative track label, aborting!\n");\r
+ printf("Negative track label, aborting!\n");\r
continue;\r
}\r
Double_t imp[2] = {-999.,-999.}; Double_t cov[3] = {-999.,-999.,-999.};\r
Bool_t dcaOkay = GetDCA(track,imp,cov); //homegrown dca calculation until AOD is fixed\r
if(!dcaOkay&&GetDebug()>0) printf("AliAnaBtag::FillAOD - Problem computing DCA to primary vertex for track %d. Skipping it...\n",itrk);\r
fhTracks->Fill(track->Pt(),1);\r
-\r
+ \r
if(track->Pt()<0)\r
continue;\r
-\r
+ \r
AliAODPid* pid = (AliAODPid*) track->GetDetPid();\r
if(pid == 0) {\r
if(GetDebug() > 0) printf("AliAnaBtag::MakeAnalysisFillAOD() - No PID object - skipping track %d",itrk);\r
Double_t tphi = pos.Phi();\r
Double_t teta = pos.Eta();\r
Double_t tmom = mom.Mag();\r
-\r
+ \r
Bool_t in = kFALSE;\r
if(track->Phi()*180./TMath::Pi() > 80. && track->Phi()*180./TMath::Pi() < 190. &&\r
- track->Eta() > -0.7 && track->Eta() < 0.7) in = kTRUE;\r
-\r
-\r
+ track->Eta() > -0.7 && track->Eta() < 0.7) in = kTRUE;\r
+ \r
+ \r
Double_t dEdx = pid->GetTPCsignal();\r
Int_t pidProb = track->GetMostProbablePID();\r
Bool_t tpcEle = kFALSE; if(dEdx > 70.) tpcEle = kTRUE;\r
Bool_t trkEle = kFALSE; if(pidProb == AliAODTrack::kElectron) trkEle = kTRUE;\r
Bool_t emcEle = kFALSE; \r
-\r
-\r
-\r
-\r
+ \r
+ \r
+ \r
+ \r
////////////////////////////////////////////////EMCAL//////////////////////\r
if(mom.Pt() > 1.0 && in) {\r
- fhTracks->Fill(track->Pt(),3);\r
- Double_t res = 999.;\r
- Double_t pOverE = -999.;\r
- \r
- //Track Matching parameters\r
- double minRes=100.;\r
- Double_t minR = 99;\r
+ fhTracks->Fill(track->Pt(),3);\r
+ Double_t res = 999.;\r
+ Double_t pOverE = -999.;\r
+ \r
+ //Track Matching parameters\r
+ double minRes=100.;\r
+ Double_t minR = 99;\r
Double_t minPe =-1;\r
Double_t minEp =-1;\r
Double_t minMult = -1;\r
Double_t minPt = -1;\r
-\r
- for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
- AliVCluster * clus = (AliVCluster*) (cl->At(iclus));\r
- if(!clus) continue;\r
-\r
- // new optimized from ben. 2010May\r
- if (clus->GetNCells() < 2 ) continue;\r
+ \r
+ for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
+ AliVCluster * clus = (AliVCluster*) (cl->At(iclus));\r
+ if(!clus) continue;\r
+ \r
+ // new optimized from ben. 2010May\r
+ if (clus->GetNCells() < 2 ) continue;\r
if (clus->GetNCells() > 35 ) continue;\r
if (clus->E() < 0 ) continue;\r
if (clus->GetDispersion() > 1.08 ) continue;\r
if (clus->GetM02() > 0.4 ) continue;\r
if (clus->GetM20() < 0 ) continue;\r
if (clus->GetM02() < 0.06 ) continue;\r
- \r
- \r
- Float_t x[3];\r
- clus->GetPosition(x);\r
- TVector3 cluspos(x[0],x[1],x[2]);\r
- Double_t deta = teta - cluspos.Eta();\r
- Double_t dphi = tphi - cluspos.Phi();\r
- if(dphi > TMath::Pi()) dphi -= 2*TMath::Pi();\r
- if(dphi < -TMath::Pi()) dphi += 2*TMath::Pi();\r
-\r
- res = sqrt(dphi*dphi + deta*deta);\r
- if(res<minRes) minRes=res; \r
-\r
- if(res < 0.0275) { // { //Optimized from Ben\r
- iCluster = iclus;\r
- Double_t energy = clus->E(); \r
- if(energy > 0) pOverE = tmom/energy;\r
- if (res< minR) {\r
+ \r
+ \r
+ Float_t x[3];\r
+ clus->GetPosition(x);\r
+ TVector3 cluspos(x[0],x[1],x[2]);\r
+ Double_t deta = teta - cluspos.Eta();\r
+ Double_t dphi = tphi - cluspos.Phi();\r
+ if(dphi > TMath::Pi()) dphi -= 2*TMath::Pi();\r
+ if(dphi < -TMath::Pi()) dphi += 2*TMath::Pi();\r
+ \r
+ res = sqrt(dphi*dphi + deta*deta);\r
+ if(res<minRes) minRes=res; \r
+ \r
+ if(res < 0.0275) { // { //Optimized from Ben\r
+ iCluster = iclus;\r
+ Double_t energy = clus->E(); \r
+ if(energy > 0) pOverE = tmom/energy;\r
+ if (res< minR) {\r
minR = res;\r
minPe = pOverE;\r
minEp = energy/tmom;\r
minMult = clus->GetNCells() ;\r
minPt = track->Pt();\r
}\r
- } else {\r
- //unmatched\r
- }//res cut\r
-\r
- }//calo cluster loop\r
- fhResidual->Fill(minRes);\r
-\r
- if(minPe > 0.9 && minPe < 1.08) emcEle = kTRUE;// if(minPe > fpOverEmin && minPe < fpOverEmax) emcEle = kTRUE;\r
+ } else {\r
+ //unmatched\r
+ }//res cut\r
+ \r
+ }//calo cluster loop\r
+ fhResidual->Fill(minRes);\r
+ \r
+ if(minPe > 0.9 && minPe < 1.08) emcEle = kTRUE;// if(minPe > fpOverEmin && minPe < fpOverEmax) emcEle = kTRUE;\r
\r
}//pt, fiducial selection = EMCAL ////////////////////END EMCAL/////////////////////////\r
-\r
-\r
-\r
-\r
+ \r
+ \r
+ \r
+ \r
////////////////////////////////////////////////////Electrons///////////////////// \r
if(emcEle ||tpcEle || trkEle) { //Obsolete (kinda...)\r
- fhTestalle->Fill(track->Pt());\r
-\r
- //B-tagging\r
- if(GetDebug() > 1) printf("Found Electron - do b-tagging\n");\r
- Int_t pairs1=0,start=0,stop=0;\r
- Int_t dvmbtag = GetDVMBtag(track,pairs1,start,stop); //add: get back #pairs, start stop in pair-Ntuple.\r
- if(GetDebug() > 0) printf("AliAnaBtag::MakeAnalysisFillAOD - Analyze, got back result from dvm: pair counts: pairs: %d, start %d, stop %d. \n",pairs1,start,stop);\r
- fhNVTX->Fill(dvmbtag);\r
-\r
- if(dvmbtag>0){\r
- fhDVM1->Fill(track->Pt());\r
- fhDVM1EtaPhi->Fill(track->Eta(),track->Phi()); \r
- }\r
- if(dvmbtag>1)\r
- fhDVM2->Fill(track->Pt());\r
- \r
- //Create particle to save in AOD///////////// Purpose of this is the AODJets needs to check against this.\r
- Double_t eMass = 0.511/1000; //mass in GeV\r
- Double_t eleE = sqrt(track->P()*track->P() + eMass*eMass);\r
- AliAODPWG4Particle tr = AliAODPWG4Particle(track->Px(),track->Py(),track->Pz(),eleE);\r
- tr.SetLabel(track->GetLabel());\r
- tr.SetCaloLabel(iCluster,-1); //sets the indices of the original caloclusters\r
- tr.SetTrackLabel(track->GetID(),-1); //sets the indices of the original tracks tr.SetTrackLabel(track->GetID(),-1) instead of itrk;\r
- tr.SetBtag(dvmbtag);\r
- if(track->Charge() < 0) tr.SetPdg(11); //electron is 11\r
- else tr.SetPdg(-11); //positron is -11 \r
-\r
- //Set detector flags\r
- Int_t emcflag=0,tpcflag=0,trdflag=0;\r
- if(emcEle){\r
- fhEmcalElectrons->Fill(track->Pt());\r
- emcflag=1;}\r
- if(trkEle){\r
- fhTRDElectrons->Fill(track->Pt());\r
- trdflag=1;}\r
- if(tpcEle){\r
- fhTPCElectrons->Fill(track->Pt());\r
- tpcflag=1;}\r
-\r
- if(emcEle) {//PID determined by EMCAL\r
- tr.SetDetector("EMCAL");\r
- } else {\r
- tr.SetDetector("CTS"); //PID determined by CTS\r
- }\r
-\r
-\r
- /////////////////////////MC stuff////////////////////////////////////////////////\r
- Int_t pdg = 0;\r
- if(IsDataMC()){\r
- stack=GetMCStack();\r
- if(!stack) {printf("AliAnaBtag::MakeAnalysisFillHistograms() - Crap, no stack: \n");\r
- }\r
- else{\r
- //Is it really an electron?\r
- TParticle *partX = stack->Particle(TMath::Abs(track->GetLabel()));\r
- pdg = partX->GetPdgCode();\r
- fhSpecies->Fill(TMath::Abs(pdg));\r
- if(TMath::Abs(pdg)==11){ //Check MC electrons\r
- if(emcEle)\r
- fhEmcalMCE->Fill(track->Pt());\r
- if(trkEle)\r
- fhTRDMCE->Fill(track->Pt());\r
- if(tpcEle)\r
- fhTPCMCE->Fill(track->Pt());\r
- }else{ //Fake histos!\r
- if(emcEle)\r
- fhEmcalMCEFake->Fill(track->Pt());\r
- if(trkEle)\r
- fhTRDMCEFake->Fill(track->Pt());\r
- if(tpcEle)\r
- fhTPCMCEFake->Fill(track->Pt());\r
- }\r
- if(TMath::Abs(pdg)==211){ //Check MC pions\r
- if(emcEle)\r
- fhEmcalMCP->Fill(track->Pt());\r
- if(trkEle)\r
- fhTRDMCP->Fill(track->Pt());\r
- if(tpcEle)\r
- fhTPCMCP->Fill(track->Pt());\r
- }\r
- if(TMath::Abs(pdg)==321){ //Check MC Kaons\r
- if(emcEle)\r
- fhEmcalMCK->Fill(track->Pt());\r
- if(trkEle)\r
- fhTRDMCK->Fill(track->Pt());\r
- if(tpcEle)\r
- fhTPCMCK->Fill(track->Pt());\r
- }\r
- }\r
- \r
- //Take care of where it came from (parent bit)\r
- tr.SetTag(GetMCAnalysisUtils()->CheckOrigin(tr.GetLabel(),GetReader(),tr.GetInputFileIndex())); //Gets a tag bit which contains info about super grandfather particle. Use (tag&(1<<11)), 11 for direct b, and 9 for B->C\r
-\r
- if(tr.GetTag()&(1<<9)||tr.GetTag()&(1<<11)) //MC particle from b-decay\r
- fhNVTXMC->Fill(dvmbtag);\r
-\r
- if(fWriteNtuple){\r
- fNElec++;\r
- fNElecEv++;\r
- electrons->Fill(fNElec,fEventNumber,fNElecEv,pairs1,start,stop,tpcflag,trdflag,emcflag,pdg,tr.GetTag(),tr.GetBtag(),tr.Pt());\r
-\r
-\r
- }\r
- \r
- if(GetDebug() > 0) \r
- printf("AliAnaBtag::MakeAnalysisFillAOD() - Origin of candidate (parent bit) %d\n",tr.GetTag());\r
- }//MonteCarlo MC done\r
- \r
- AddAODParticle(tr); \r
+ fhTestalle->Fill(track->Pt());\r
+ \r
+ //B-tagging\r
+ if(GetDebug() > 1) printf("Found Electron - do b-tagging\n");\r
+ Int_t pairs1=0,start=0,stop=0;\r
+ Int_t dvmbtag = GetDVMBtag(track,pairs1,start,stop); //add: get back #pairs, start stop in pair-Ntuple.\r
+ if(GetDebug() > 0) printf("AliAnaBtag::MakeAnalysisFillAOD - Analyze, got back result from dvm: pair counts: pairs: %d, start %d, stop %d. \n",pairs1,start,stop);\r
+ fhNVTX->Fill(dvmbtag);\r
+ \r
+ if(dvmbtag>0){\r
+ fhDVM1->Fill(track->Pt());\r
+ fhDVM1EtaPhi->Fill(track->Eta(),track->Phi()); \r
+ }\r
+ if(dvmbtag>1)\r
+ fhDVM2->Fill(track->Pt());\r
+ \r
+ //Create particle to save in AOD///////////// Purpose of this is the AODJets needs to check against this.\r
+ Double_t eMass = 0.511/1000; //mass in GeV\r
+ Double_t eleE = sqrt(track->P()*track->P() + eMass*eMass);\r
+ AliAODPWG4Particle tr = AliAODPWG4Particle(track->Px(),track->Py(),track->Pz(),eleE);\r
+ tr.SetLabel(track->GetLabel());\r
+ tr.SetCaloLabel(iCluster,-1); //sets the indices of the original caloclusters\r
+ tr.SetTrackLabel(track->GetID(),-1); //sets the indices of the original tracks tr.SetTrackLabel(track->GetID(),-1) instead of itrk;\r
+ tr.SetBtag(dvmbtag);\r
+ if(track->Charge() < 0) tr.SetPdg(11); //electron is 11\r
+ else tr.SetPdg(-11); //positron is -11 \r
+ \r
+ //Set detector flags\r
+ Int_t emcflag=0,tpcflag=0,trdflag=0;\r
+ if(emcEle){\r
+ fhEmcalElectrons->Fill(track->Pt());\r
+ emcflag=1;}\r
+ if(trkEle){\r
+ fhTRDElectrons->Fill(track->Pt());\r
+ trdflag=1;}\r
+ if(tpcEle){\r
+ fhTPCElectrons->Fill(track->Pt());\r
+ tpcflag=1;}\r
+ \r
+ if(emcEle) {//PID determined by EMCAL\r
+ tr.SetDetector("EMCAL");\r
+ } else {\r
+ tr.SetDetector("CTS"); //PID determined by CTS\r
+ }\r
+ \r
+ \r
+ /////////////////////////MC stuff////////////////////////////////////////////////\r
+ Int_t pdg = 0;\r
+ if(IsDataMC()){\r
+ stack=GetMCStack();\r
+ if(!stack) {printf("AliAnaBtag::MakeAnalysisFillHistograms() - Crap, no stack: \n");\r
+ }\r
+ else{\r
+ //Is it really an electron?\r
+ TParticle *partX = stack->Particle(TMath::Abs(track->GetLabel()));\r
+ pdg = partX->GetPdgCode();\r
+ fhSpecies->Fill(TMath::Abs(pdg));\r
+ if(TMath::Abs(pdg)==11){ //Check MC electrons\r
+ if(emcEle)\r
+ fhEmcalMCE->Fill(track->Pt());\r
+ if(trkEle)\r
+ fhTRDMCE->Fill(track->Pt());\r
+ if(tpcEle)\r
+ fhTPCMCE->Fill(track->Pt());\r
+ }else{ //Fake histos!\r
+ if(emcEle)\r
+ fhEmcalMCEFake->Fill(track->Pt());\r
+ if(trkEle)\r
+ fhTRDMCEFake->Fill(track->Pt());\r
+ if(tpcEle)\r
+ fhTPCMCEFake->Fill(track->Pt());\r
+ }\r
+ if(TMath::Abs(pdg)==211){ //Check MC pions\r
+ if(emcEle)\r
+ fhEmcalMCP->Fill(track->Pt());\r
+ if(trkEle)\r
+ fhTRDMCP->Fill(track->Pt());\r
+ if(tpcEle)\r
+ fhTPCMCP->Fill(track->Pt());\r
+ }\r
+ if(TMath::Abs(pdg)==321){ //Check MC Kaons\r
+ if(emcEle)\r
+ fhEmcalMCK->Fill(track->Pt());\r
+ if(trkEle)\r
+ fhTRDMCK->Fill(track->Pt());\r
+ if(tpcEle)\r
+ fhTPCMCK->Fill(track->Pt());\r
+ }\r
+ }\r
+ \r
+ //Take care of where it came from (parent bit)\r
+ tr.SetTag(GetMCAnalysisUtils()->CheckOrigin(tr.GetLabel(),GetReader(),tr.GetInputFileIndex())); //Gets a tag bit which contains info about super grandfather particle. Use (tag&(1<<11)), 11 for direct b, and 9 for B->C\r
+ \r
+ if(tr.GetTag()&(1<<9)||tr.GetTag()&(1<<11)) //MC particle from b-decay\r
+ fhNVTXMC->Fill(dvmbtag);\r
+ \r
+ if(fWriteNtuple){\r
+ fNElec++;\r
+ fNElecEv++;\r
+ electrons->Fill(fNElec,fEventNumber,fNElecEv,pairs1,start,stop,tpcflag,trdflag,emcflag,pdg,tr.GetTag(),tr.GetBtag(),tr.Pt());\r
+ \r
+ \r
+ }\r
+ \r
+ if(GetDebug() > 0) \r
+ printf("AliAnaBtag::MakeAnalysisFillAOD() - Origin of candidate (parent bit) %d\n",tr.GetTag());\r
+ }//MonteCarlo MC done\r
+ \r
+ AddAODParticle(tr); \r
}//electron\r
- \r
+ \r
} //pid check\r
}//track loop \r
if(GetDebug() > 1) printf("AliAnaBtag::MakeAnalysisFillAOD() End fill AODs \n"); \r