fhPhiConversion(0),fhEtaConversion(0),\r
//for comparisons with tracking detectors\r
fhPtHadron(0),fhPtNPEleTPC(0),fhPtNPEleTPCTRD(0),fhPtNPEleTTE(0),\r
- //for computing efficiency of IPSig tag\r
- fhBJetPt1x4(0),fhBJetPt2x3(0),fhBJetPt3x2(0),\r
+ //for computing efficiency of B-jet tags\r
+ fhBJetPt1x4(0),fhBJetPt2x3(0),fhBJetPt3x2(0),fhDVMJet(0),\r
//MC rate histograms/ntuple\r
fMCEleNtuple(0),fhMCBJetElePt(0),fhPtMCHadron(0),fhPtMCElectron(0)\r
{\r
//for comparisons with tracking detectors\r
fhPtHadron(g.fhPtHadron),fhPtNPEleTPC(g.fhPtNPEleTPC),\r
fhPtNPEleTPCTRD(g.fhPtNPEleTPCTRD),fhPtNPEleTTE(g.fhPtNPEleTTE),\r
- //for computing efficiency of IPSig tag\r
- fhBJetPt1x4(g.fhBJetPt1x4),fhBJetPt2x3(g.fhBJetPt2x3),fhBJetPt3x2(g.fhBJetPt3x2),\r
+ //for computing efficiency of B-jet tags\r
+ fhBJetPt1x4(g.fhBJetPt1x4),fhBJetPt2x3(g.fhBJetPt2x3),\r
+ fhBJetPt3x2(g.fhBJetPt3x2),fhDVMJet(g.fhDVMJet),\r
//MC rate histograms/ntuple\r
fMCEleNtuple(g.fMCEleNtuple),fhMCBJetElePt(g.fhMCBJetElePt),\r
fhPtMCHadron(g.fhPtMCHadron),fhPtMCElectron(g.fhPtMCElectron)\r
//for comparisons with tracking detectors\r
fhPtHadron = g.fhPtHadron; fhPtNPEleTPC = g.fhPtNPEleTPC; \r
fhPtNPEleTPCTRD = g.fhPtNPEleTPCTRD; fhPtNPEleTTE = g.fhPtNPEleTTE; \r
- //for computing efficiency of IPSig tag\r
- fhBJetPt1x4 = g.fhBJetPt1x4; fhBJetPt2x3 = g.fhBJetPt2x3; fhBJetPt3x2 = g.fhBJetPt3x2; \r
+ //for computing efficiency of B-jet tags\r
+ fhBJetPt1x4 = g.fhBJetPt1x4; fhBJetPt2x3 = g.fhBJetPt2x3; \r
+ fhBJetPt3x2 = g.fhBJetPt3x2; fhDVMJet = g.fhDVMJet;\r
//MC rate histograms/ntuple\r
fMCEleNtuple = g.fMCEleNtuple; fhMCBJetElePt = g.fhMCBJetElePt; \r
fhPtMCHadron = g.fhPtMCHadron; fhPtMCElectron = g.fhPtMCElectron; \r
fhBJetPt1x4 = new TH1F("hBJetPt1x4","tagged B-jet pT (1 track, ipSignif>4);p_{T}",1000,0.,100.);\r
fhBJetPt2x3 = new TH1F("hBJetPt2x3","tagged B-jet pT (2 track, ipSignif>3);p_{T}",1000,0.,100.);\r
fhBJetPt3x2 = new TH1F("hBJetPt3x2","tagged B-jet pT (3 track, ipSignif>2);p_{T}",1000,0.,100.);\r
+ fhDVMJet = new TH2F("hDVM_algo","# DVM jets passing vs Mc-Bjet",10,0,10,300,0.,300.);\r
\r
outputContainer->Add(fhBJetPt1x4);\r
outputContainer->Add(fhBJetPt2x3);\r
outputContainer->Add(fhBJetPt3x2);\r
+ outputContainer->Add(fhDVMJet);\r
\r
//MC Only histograms\r
\r
if(TMath::Abs(track->Eta())< 0.5 && TMath::Abs(imp[0])<1.0 && TMath::Abs(imp[1])<1.0) refmult2++;\r
fhImpactXY->Fill(imp[0]);\r
\r
+ //JLK CHECK\r
+ AliESDtrack esdTrack(track);\r
+ Double_t tpcpid[AliPID::kSPECIES];\r
+ esdTrack.GetTPCpid(tpcpid);\r
+ Double_t eProb = tpcpid[AliPID::kElectron];\r
+ printf("<%d> ESD eProb = %2.2f\n",itrk,eProb);\r
+\r
+\r
AliAODPid* pid = (AliAODPid*) track->GetDetPid();\r
if(pid == 0) {\r
if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillAOD() - No PID object - skipping track %d",itrk);\r
Int_t njets = (GetReader()->GetOutputEvent())->GetNJets();\r
if(njets > 0) {\r
if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillHistograms() - Jet AOD branch has %d jets. Performing b-jet tag analysis\n",njets);\r
- \r
+\r
for(Int_t ijet = 0; ijet < njets ; ijet++) {\r
AliAODJet * jet = (AliAODJet*)(GetReader()->GetOutputEvent())->GetJet(ijet) ;\r
if(GetDebug() > 3) {\r
\r
if(trackCounter[0] > fNTagTrkCut) ipsigJet = kTRUE;\r
\r
+ if(IsDataMC()) {\r
+ //determine tagging efficiency & mis-tagging rate\r
+ //using b-quarks from stack\r
+ Bool_t isTrueBjet = IsMcBJet(jet->Eta(), jet->Phi() ,stack);\r
+ if (isTrueBjet && GetDebug() > 0) printf("== True Bjet==\n");\r
+ if (dvmJet && GetDebug() > 0) printf("== found DVM jet==\n");\r
+\r
+ if(isTrueBjet && dvmJet) fhDVMJet->Fill(0.,jet->Pt()); // good tagged\r
+ if(isTrueBjet && !dvmJet) fhDVMJet->Fill(1.,jet->Pt()); // missed tagged\r
+ if(!isTrueBjet && dvmJet) fhDVMJet->Fill(2.,jet->Pt()); // fake tagged\r
+ if(!isTrueBjet && !dvmJet) fhDVMJet->Fill(3.,jet->Pt()); // others\r
+\r
+ if(isTrueBjet) {\r
+ if(trackCounter[1]>0) fhBJetPt1x4->Fill(jet->Pt());\r
+ if(trackCounter[2]>1) fhBJetPt2x3->Fill(jet->Pt());\r
+ if(trackCounter[3]>2) fhBJetPt3x2->Fill(jet->Pt());\r
+ }\r
+ }\r
+\r
//Fill bjet histograms here\r
if(!(eJet || ipsigJet || dvmJet)) fhJetType->Fill(0.,jet->Pt()); //none\r
if(eJet && !(ipsigJet || dvmJet)) fhJetType->Fill(1.,jet->Pt()); //only ejet\r
if(IsDataMC()) {\r
\r
//MC Jets\r
- TVector3 jetVect[4];\r
+ TVector3 bjetVect[4];\r
Int_t nPythiaGenJets = 0;\r
AliGenPythiaEventHeader* pythiaGenHeader = (AliGenPythiaEventHeader*)GetReader()->GetGenEventHeader();\r
if(pythiaGenHeader){\r
pythiaGenHeader->TriggerJet(ip,p);\r
TVector3 tempVect(p[0],p[1],p[2]);\r
if ( TMath::Abs(tempVect.Eta())>fJetEtaCut || tempVect.Phi() < fJetPhiMin || tempVect.Phi() > fJetPhiMax) continue;\r
- jetVect[iCount].SetXYZ(p[0], p[1], p[2]);\r
- iCount++;\r
+ //Only store it if it has a b-quark within dR < 0.2 of jet axis ?\r
+ if(IsMcBJet(tempVect.Eta(),tempVect.Phi(),stack)) {\r
+ bjetVect[iCount].SetXYZ(p[0], p[1], p[2]);\r
+ iCount++;\r
+ }\r
}\r
}\r
\r
mctag = GetMCAnalysisUtils()->CheckOrigin(ipart,GetReader(),input);\r
\r
if(GetMCSource(mctag)==1) { //bottom electron\r
- //See if it is within dR < 0.4 of a jet\r
+ //See if it is within dR < 0.4 of a bjet\r
for(Int_t ij = 0; ij < nPythiaGenJets; ij++) {\r
- Double_t deta = primary->Eta() - jetVect[ij].Eta();\r
- Double_t dphi = primary->Phi() - jetVect[ij].Phi();\r
+ Double_t deta = primary->Eta() - bjetVect[ij].Eta();\r
+ Double_t dphi = primary->Phi() - bjetVect[ij].Phi();\r
Double_t dR = TMath::Sqrt(deta*deta + dphi*dphi);\r
if(dR < 0.4) {\r
- fhMCBJetElePt->Fill(primary->Pt(),jetVect[ij].Pt());\r
+ fhMCBJetElePt->Fill(primary->Pt(),bjetVect[ij].Pt());\r
}\r
}\r
}\r
\r
}\r
\r
+//__________________________________________________________________\r
+Bool_t AliAnaElectron::IsMcBJet(Double_t eta, Double_t phi, AliStack* stack)\r
+{\r
+ //Check the jet eta,phi against that of the b-quark\r
+ //to decide whether it is an MC B-jet\r
+ Bool_t bjet=kFALSE;\r
+\r
+ // printf("MTH: McStack ,nparticles=%d \n", stack->GetNtrack() );\r
+ \r
+ for(Int_t ipart = 0; ipart < 100; ipart++) {\r
+\r
+ TParticle* primary = stack->Particle(ipart);\r
+ if (!primary) continue;\r
+ Int_t pdgcode = primary->GetPdgCode();\r
+ if ( TMath::Abs(pdgcode) != 5) continue;\r
+ \r
+ // printf("MTH: IsMcBJet : %d, pdg=%d : pt=%f \n", ipart, pdgcode, primary->Pt());\r
+ Double_t dphi = phi - primary->Phi();\r
+ Double_t deta = eta - primary->Eta();\r
+ Double_t dr = sqrt(deta*deta + dphi*dphi);\r
+ \r
+ if (dr < 0.2) {\r
+ bjet=kTRUE;\r
+ //printf("MTH: **** found matching MC-Bjet: PDG=%d, pt=%f,dr=%f \n", pdgcode, primary->Pt(),dr );\r
+ break;\r
+ }\r
+ }\r
+ return bjet;\r
+\r
+}\r
+\r
//__________________________________________________________________\r
void AliAnaElectron::Print(const Option_t * opt) const\r
{\r