#include "AliESDtrack.h"\r
#include "AliAODJet.h"\r
#include "AliAODEvent.h"\r
+#include "AliGenPythiaEventHeader.h"\r
\r
ClassImp(AliAnaElectron)\r
\r
fpOverEmin(0.),fpOverEmax(0.),fResidualCut(0.),\r
fDrCut(0.),fPairDcaCut(0.),fDecayLenCut(0.),fImpactCut(0.),\r
fAssocPtCut(0.),fMassCut(0.),fSdcaCut(0.),fITSCut(0),\r
- fNTagTrkCut(0),fIPSigCut(0.),\r
+ fNTagTrkCut(0),fIPSigCut(0.),fJetEtaCut(0.3),fJetPhiMin(1.8),fJetPhiMax(2.9),\r
fWriteNtuple(kFALSE),\r
+ //event QA histos\r
+ fhImpactXY(0),fhRefMult(0),fhRefMult2(0),\r
//matching checks\r
- fEleNtuple(0),\r
- fh1pOverE(0),fh1dR(0),fh2EledEdx(0),fh2MatchdEdx(0),fh2dEtadPhi(0),\r
- fh2dEtadPhiMatched(0),fh2dEtadPhiUnmatched(0),\r
- fh2TrackPVsClusterE(0),fh2TrackPtVsClusterE(0),fh2TrackPhiVsClusterPhi(0),fh2TrackEtaVsClusterEta(0),\r
+ fh1pOverE(0),fh1EOverp(0),fh1dR(0),fh2EledEdx(0),fh2MatchdEdx(0),fh2dEtadPhi(0),\r
+ fh2dEtadPhiMatched(0),fh2dEtadPhiUnmatched(0),fh2TrackPVsClusterE(0),\r
+ fh2TrackPtVsClusterE(0),fh2TrackPhiVsClusterPhi(0),fh2TrackEtaVsClusterEta(0),\r
//Photonic electron checks\r
fh1OpeningAngle(0),fh1MinvPhoton(0),\r
- //reco\r
+ //Reconstructed electrons\r
fhPtElectron(0),fhPhiElectron(0),fhEtaElectron(0),\r
fhPtNPE(0),fhPhiNPE(0),fhEtaNPE(0),\r
fhPtPE(0),fhPhiPE(0),fhEtaPE(0),\r
- fhPtConversion(0),fhPhiConversion(0),fhEtaConversion(0),\r
- fhPtBottom(0),fhPhiBottom(0),fhEtaBottom(0),\r
- fhPtCharm(0),fhPhiCharm(0),fhEtaCharm(0),\r
- fhPtCFromB(0),fhPhiCFromB(0),fhEtaCFromB(0),\r
- fhPtDalitz(0),fhPhiDalitz(0),fhEtaDalitz(0),\r
- fhPtWDecay(0),fhPhiWDecay(0),fhEtaWDecay(0),\r
- fhPtZDecay(0),fhPhiZDecay(0),fhEtaZDecay(0),\r
- fhPtAll(0),fhPhiAll(0),fhEtaAll(0),\r
- fhPtUnknown(0),fhPhiUnknown(0),fhEtaUnknown(0),\r
- fhPtMisidentified(0),fhPhiMisidentified(0),fhEtaMisidentified(0),\r
- fhPtHadron(0),fhPtEleTrkDet(0),\r
- //event QA\r
- fhImpactXY(0),fhRefMult(0),fhRefMult2(0),\r
- //B-tagging\r
- fhDVMBtagCut1(0),fhDVMBtagCut2(0),fhDVMBtagCut3(0),fhDVMBtagQA1(0),fhDVMBtagQA2(0),fhDVMBtagQA3(0),\r
- fhDVMBtagQA4(0),fhDVMBtagQA5(0),fhIPSigBtagQA1(0),fhIPSigBtagQA2(0),\r
- //B-jets\r
- fhJetType(0),fhBJetXsiFF(0),fhBJetPtFF(0),fhBJetEtaPhi(0),fhNonBJetXsiFF(0),fhNonBJetPtFF(0),fhNonBJetEtaPhi(0),\r
- //MC\r
- fMCEleNtuple(0),fhPtMCHadron(0),fhPtMCBottom(0),fhPtMCCharm(0),fhPtMCCFromB(0),fhPtMCConversion(0),\r
- fhPtMCDalitz(0),fhPtMCWDecay(0),fhPtMCZDecay(0),fhPtMCUnknown(0)\r
+ //DVM B-tagging\r
+ fhDVMBtagCut1(0),fhDVMBtagCut2(0),fhDVMBtagCut3(0),fhDVMBtagQA1(0),fhDVMBtagQA2(0),\r
+ fhDVMBtagQA3(0),fhDVMBtagQA4(0),fhDVMBtagQA5(0),\r
+ //IPSig B-tagging\r
+ fhIPSigBtagQA1(0),fhIPSigBtagQA2(0),fhTagJetPt1x4(0),fhTagJetPt2x3(0),fhTagJetPt3x2(0),\r
+ //B-Jet histograms\r
+ fhJetType(0),fhBJetXsiFF(0),fhBJetPtFF(0),fhBJetEtaPhi(0),\r
+ fhNonBJetXsiFF(0),fhNonBJetPtFF(0),fhNonBJetEtaPhi(0),\r
+ /////////////////////////////////////////////////////////////\r
+ //Histograms that rely on MC info (not filled for real data)\r
+ fEleNtuple(0),\r
+ //reco electrons from various sources\r
+ 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
+ //MC rate histograms/ntuple\r
+ fMCEleNtuple(0),fhMCBJetElePt(0),fhPtMCHadron(0),fhPtMCElectron(0)\r
{\r
//default ctor\r
\r
fDrCut(g.fDrCut),fPairDcaCut(g.fPairDcaCut),fDecayLenCut(g.fDecayLenCut),fImpactCut(g.fImpactCut),\r
fAssocPtCut(g.fAssocPtCut),fMassCut(g.fMassCut),fSdcaCut(g.fSdcaCut),fITSCut(g.fITSCut),\r
fNTagTrkCut(g.fNTagTrkCut),fIPSigCut(g.fIPSigCut),\r
+ fJetEtaCut(g.fJetEtaCut),fJetPhiMin(g.fJetPhiMin),fJetPhiMax(g.fJetPhiMax),\r
fWriteNtuple(g.fWriteNtuple),\r
+ //event QA histos\r
+ fhImpactXY(g.fhImpactXY),fhRefMult(g.fhRefMult),fhRefMult2(g.fhRefMult2),\r
//matching checks\r
- fEleNtuple(g.fEleNtuple),\r
- fh1pOverE(g.fh1pOverE),fh1dR(g.fh1dR),\r
- fh2EledEdx(g.fh2EledEdx),fh2MatchdEdx(g.fh2MatchdEdx),fh2dEtadPhi(g.fh2dEtadPhi),\r
+ fh1pOverE(g.fh1pOverE),fh1EOverp(g.fh1EOverp),fh1dR(g.fh1dR),fh2EledEdx(g.fh2EledEdx),\r
+ fh2MatchdEdx(g.fh2MatchdEdx),fh2dEtadPhi(g.fh2dEtadPhi),\r
fh2dEtadPhiMatched(g.fh2dEtadPhiMatched),fh2dEtadPhiUnmatched(g.fh2dEtadPhiUnmatched),\r
fh2TrackPVsClusterE(g.fh2TrackPVsClusterE),fh2TrackPtVsClusterE(g.fh2TrackPtVsClusterE),\r
fh2TrackPhiVsClusterPhi(g.fh2TrackPhiVsClusterPhi),fh2TrackEtaVsClusterEta(g.fh2TrackEtaVsClusterEta),\r
//Photonic electron checks\r
fh1OpeningAngle(g.fh1OpeningAngle),fh1MinvPhoton(g.fh1MinvPhoton),\r
- //reco\r
+ //Reconstructed electrons\r
fhPtElectron(g.fhPtElectron),fhPhiElectron(g.fhPhiElectron),fhEtaElectron(g.fhEtaElectron),\r
fhPtNPE(g.fhPtNPE),fhPhiNPE(g.fhPhiNPE),fhEtaNPE(g.fhEtaNPE),\r
fhPtPE(g.fhPtPE),fhPhiPE(g.fhPhiPE),fhEtaPE(g.fhEtaPE),\r
- fhPtConversion(g.fhPtConversion),fhPhiConversion(g.fhPhiConversion),fhEtaConversion(g.fhEtaConversion),\r
- fhPtBottom(g.fhPtBottom),fhPhiBottom(g.fhPhiBottom),fhEtaBottom(g.fhEtaBottom),\r
- fhPtCharm(g.fhPtCharm),fhPhiCharm(g.fhPhiCharm),fhEtaCharm(g.fhEtaCharm),\r
- fhPtCFromB(g.fhPtCFromB),fhPhiCFromB(g.fhPhiCFromB),fhEtaCFromB(g.fhEtaCFromB),\r
- fhPtDalitz(g.fhPtDalitz),fhPhiDalitz(g.fhPhiDalitz),fhEtaDalitz(g.fhEtaDalitz),\r
- fhPtWDecay(g.fhPtWDecay),fhPhiWDecay(g.fhPhiWDecay),fhEtaWDecay(g.fhEtaWDecay),\r
- fhPtZDecay(g.fhPtZDecay),fhPhiZDecay(g.fhPhiZDecay),fhEtaZDecay(g.fhEtaZDecay),\r
- fhPtAll(g.fhPtAll),fhPhiAll(g.fhPhiAll),fhEtaAll(g.fhEtaAll),\r
- fhPtUnknown(g.fhPtUnknown),fhPhiUnknown(g.fhPhiUnknown),fhEtaUnknown(g.fhEtaUnknown),\r
- fhPtMisidentified(g.fhPtMisidentified),fhPhiMisidentified(g.fhPhiMisidentified),fhEtaMisidentified(g.fhEtaMisidentified),\r
- fhPtHadron(g.fhPtHadron),fhPtEleTrkDet(g.fhPtEleTrkDet),\r
- //event QA\r
- fhImpactXY(g.fhImpactXY),fhRefMult(g.fhRefMult),fhRefMult2(g.fhRefMult2),\r
- //B-tagging\r
+ //DVM B-tagging\r
fhDVMBtagCut1(g.fhDVMBtagCut1),fhDVMBtagCut2(g.fhDVMBtagCut2),fhDVMBtagCut3(g.fhDVMBtagCut3),\r
- fhDVMBtagQA1(g.fhDVMBtagQA1),fhDVMBtagQA2(g.fhDVMBtagQA2),fhDVMBtagQA3(g.fhDVMBtagQA3),\r
- fhDVMBtagQA4(g.fhDVMBtagQA4),fhDVMBtagQA5(g.fhDVMBtagQA5),fhIPSigBtagQA1(g.fhIPSigBtagQA1),\r
- fhIPSigBtagQA2(g.fhIPSigBtagQA2),\r
- //B-jets\r
- fhJetType(g.fhJetType),fhBJetXsiFF(g.fhBJetXsiFF),fhBJetPtFF(g.fhBJetPtFF),fhBJetEtaPhi(g.fhBJetEtaPhi),\r
- fhNonBJetXsiFF(g.fhNonBJetXsiFF),fhNonBJetPtFF(g.fhNonBJetPtFF),fhNonBJetEtaPhi(g.fhNonBJetEtaPhi),\r
- //MC\r
- fMCEleNtuple(g.fMCEleNtuple),fhPtMCHadron(g.fhPtMCHadron),fhPtMCBottom(g.fhPtMCBottom),\r
- fhPtMCCharm(g.fhPtMCCharm),fhPtMCCFromB(g.fhPtMCCFromB),fhPtMCConversion(g.fhPtMCConversion),\r
- fhPtMCDalitz(g.fhPtMCDalitz),fhPtMCWDecay(g.fhPtMCWDecay),\r
- fhPtMCZDecay(g.fhPtMCZDecay),fhPtMCUnknown(g.fhPtMCUnknown)\r
+ fhDVMBtagQA1(g.fhDVMBtagQA1),fhDVMBtagQA2(g.fhDVMBtagQA2),\r
+ fhDVMBtagQA3(g.fhDVMBtagQA3),fhDVMBtagQA4(g.fhDVMBtagQA4),fhDVMBtagQA5(g.fhDVMBtagQA5),\r
+ //IPSig B-tagging\r
+ fhIPSigBtagQA1(g.fhIPSigBtagQA1),fhIPSigBtagQA2(g.fhIPSigBtagQA2),\r
+ fhTagJetPt1x4(g.fhTagJetPt1x4),fhTagJetPt2x3(g.fhTagJetPt2x3),fhTagJetPt3x2(g.fhTagJetPt3x2),\r
+ //B-Jet histograms\r
+ fhJetType(g.fhJetType),fhBJetXsiFF(g.fhBJetXsiFF),fhBJetPtFF(g.fhBJetPtFF),\r
+ fhBJetEtaPhi(g.fhBJetEtaPhi),fhNonBJetXsiFF(g.fhNonBJetXsiFF),fhNonBJetPtFF(g.fhNonBJetPtFF),\r
+ fhNonBJetEtaPhi(g.fhNonBJetEtaPhi),\r
+ /////////////////////////////////////////////////////////////\r
+ //Histograms that rely on MC info (not filled for real data)\r
+ fEleNtuple(g.fEleNtuple),\r
+ //reco electrons from various sources\r
+ fhPhiConversion(g.fhPhiConversion),fhEtaConversion(g.fhEtaConversion),\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
+ //MC rate histograms/ntuple\r
+ fMCEleNtuple(g.fMCEleNtuple),fhMCBJetElePt(g.fhMCBJetElePt),\r
+ fhPtMCHadron(g.fhPtMCHadron),fhPtMCElectron(g.fhPtMCElectron)\r
{\r
// cpy ctor\r
\r
fITSCut = g.fITSCut;\r
fNTagTrkCut = g.fNTagTrkCut;\r
fIPSigCut = g.fIPSigCut;\r
+ fJetEtaCut = g.fJetEtaCut;\r
+ fJetPhiMin = g.fJetPhiMin;\r
+ fJetPhiMax = g.fJetPhiMax;\r
fWriteNtuple = g.fWriteNtuple;\r
- fEleNtuple = g.fEleNtuple;\r
+ //event QA histos\r
+ fhImpactXY = g.fhImpactXY;\r
+ fhRefMult = g.fhRefMult;\r
+ fhRefMult2 = g.fhRefMult2;\r
+ //matching checks\r
fh1pOverE = g.fh1pOverE;\r
- fh1dR = g.fh1dR;\r
+ fh1EOverp = g.fh1EOverp;\r
+ fh1dR = g.fh1dR;\r
fh2EledEdx = g.fh2EledEdx;\r
fh2MatchdEdx = g.fh2MatchdEdx;\r
fh2dEtadPhi = g.fh2dEtadPhi;\r
fh2TrackPVsClusterE = g.fh2TrackPVsClusterE;\r
fh2TrackPtVsClusterE = g.fh2TrackPtVsClusterE;\r
fh2TrackPhiVsClusterPhi = g.fh2TrackPhiVsClusterPhi;\r
- fh2TrackEtaVsClusterEta = g.fh2TrackEtaVsClusterEta; \r
+ fh2TrackEtaVsClusterEta = g.fh2TrackEtaVsClusterEta;\r
+ //Photonic electron checks\r
fh1OpeningAngle = g.fh1OpeningAngle;\r
fh1MinvPhoton = g.fh1MinvPhoton;\r
- fhPtElectron = g.fhPtElectron;\r
- fhPhiElectron = g.fhPhiElectron;\r
- fhEtaElectron = g.fhEtaElectron;\r
+ //Reconstructed electrons\r
+ fhPtElectron = g.fhPtElectron; \r
+ fhPhiElectron = g.fhPhiElectron; \r
+ fhEtaElectron = g.fhEtaElectron; \r
fhPtNPE = g.fhPtNPE;\r
fhPhiNPE = g.fhPhiNPE;\r
- fhEtaNPE = g.fhEtaNPE;\r
+ fhEtaNPE = g.fhEtaNPE; \r
fhPtPE = g.fhPtPE;\r
fhPhiPE = g.fhPhiPE;\r
- fhEtaPE = g.fhEtaPE;\r
- fhPtConversion = g.fhPtConversion;\r
- fhPhiConversion = g.fhPhiConversion;\r
- fhEtaConversion = g.fhEtaConversion;\r
- fhPtBottom = g.fhPtBottom;\r
- fhPhiBottom = g.fhPhiBottom;\r
- fhEtaBottom = g.fhEtaBottom;\r
- fhPtCharm = g.fhPtCharm;\r
- fhPhiCharm = g.fhPhiCharm;\r
- fhEtaCharm = g.fhEtaCharm;\r
- fhPtCFromB = g.fhPtCFromB;\r
- fhPhiCFromB = g.fhPhiCFromB;\r
- fhEtaCFromB = g.fhEtaCFromB;\r
- fhPtDalitz = g.fhPtDalitz;\r
- fhPhiDalitz = g.fhPhiDalitz;\r
- fhEtaDalitz = g.fhEtaDalitz;\r
- fhPtWDecay = g.fhPtWDecay;\r
- fhPhiWDecay = g.fhPhiWDecay;\r
- fhEtaWDecay = g.fhEtaWDecay;\r
- fhPtZDecay = g.fhPtZDecay;\r
- fhPhiZDecay = g.fhPhiZDecay;\r
- fhEtaZDecay = g.fhEtaZDecay;\r
- fhPtAll = g.fhPtAll;\r
- fhPhiAll = g.fhPhiAll;\r
- fhEtaAll = g.fhEtaAll;\r
- fhPtUnknown = g.fhPtUnknown;\r
- fhPhiUnknown = g.fhPhiUnknown;\r
- fhEtaUnknown = g.fhEtaUnknown;\r
- fhPtMisidentified = g.fhPtMisidentified;\r
- fhPhiMisidentified = g.fhPhiMisidentified;\r
- fhEtaMisidentified = g.fhEtaMisidentified;\r
-\r
- fhPtHadron = g.fhPtHadron;\r
- fhPtEleTrkDet = g.fhPtEleTrkDet;\r
-\r
- //event QA\r
- fhImpactXY = g.fhImpactXY;\r
- fhRefMult = g.fhRefMult;\r
- fhRefMult2 = g.fhRefMult2;\r
-\r
- //B-tagging\r
+ fhEtaPE = g.fhEtaPE; \r
+ //DVM B-tagging\r
fhDVMBtagCut1 = g.fhDVMBtagCut1;\r
- fhDVMBtagCut2 = g.fhDVMBtagCut2;\r
- fhDVMBtagCut3 = g.fhDVMBtagCut3;\r
- fhDVMBtagQA1 = g.fhDVMBtagQA1;\r
- fhDVMBtagQA2 = g.fhDVMBtagQA2;\r
- fhDVMBtagQA3 = g.fhDVMBtagQA3;\r
- fhDVMBtagQA4 = g.fhDVMBtagQA4;\r
- fhDVMBtagQA5 = g.fhDVMBtagQA5;\r
- fhIPSigBtagQA1 = g.fhIPSigBtagQA1;\r
- fhIPSigBtagQA2 = g.fhIPSigBtagQA2;\r
-\r
- fhJetType = g.fhJetType;\r
- fhBJetXsiFF = g.fhBJetXsiFF;\r
- fhBJetPtFF = g.fhBJetPtFF;\r
- fhBJetEtaPhi = g.fhBJetEtaPhi;\r
- fhNonBJetXsiFF = g.fhNonBJetXsiFF;\r
- fhNonBJetPtFF = g.fhNonBJetPtFF;\r
- fhNonBJetEtaPhi = g.fhNonBJetEtaPhi;\r
-\r
- fMCEleNtuple = g.fMCEleNtuple;\r
- fhPtMCHadron = g.fhPtMCHadron;\r
- fhPtMCBottom = g.fhPtMCBottom;\r
- fhPtMCCharm = g.fhPtMCCharm;\r
- fhPtMCCFromB = g.fhPtMCCFromB;\r
- fhPtMCConversion = g.fhPtMCConversion;\r
- fhPtMCDalitz = g.fhPtMCDalitz;\r
- fhPtMCWDecay = g.fhPtMCWDecay;\r
- fhPtMCZDecay = g.fhPtMCZDecay;\r
- fhPtMCUnknown = g.fhPtMCUnknown;\r
+ fhDVMBtagCut2 = g.fhDVMBtagCut2; \r
+ fhDVMBtagCut3 = g.fhDVMBtagCut3; \r
+ fhDVMBtagQA1 = g.fhDVMBtagQA1; \r
+ fhDVMBtagQA2 = g.fhDVMBtagQA2; \r
+ fhDVMBtagQA3 = g.fhDVMBtagQA3; \r
+ fhDVMBtagQA4 = g.fhDVMBtagQA4; \r
+ fhDVMBtagQA5 = g.fhDVMBtagQA5; \r
+ //IPSig B-tagging\r
+ fhIPSigBtagQA1 = g.fhIPSigBtagQA1; \r
+ fhIPSigBtagQA2 = g.fhIPSigBtagQA2; \r
+ fhTagJetPt1x4 = g.fhTagJetPt1x4; \r
+ fhTagJetPt2x3 = g.fhTagJetPt2x3; \r
+ fhTagJetPt3x2 = g.fhTagJetPt3x2; \r
+ //B-Jet histograms\r
+ fhJetType = g.fhJetType; \r
+ fhBJetXsiFF = g.fhBJetXsiFF; \r
+ fhBJetPtFF = g.fhBJetPtFF; \r
+ fhBJetEtaPhi = g.fhBJetEtaPhi; \r
+ fhNonBJetXsiFF = g.fhNonBJetXsiFF; \r
+ fhNonBJetPtFF = g.fhNonBJetPtFF; \r
+ fhNonBJetEtaPhi = g.fhNonBJetEtaPhi; \r
+ /////////////////////////////////////////////////////////////\r
+ //Histograms that rely on MC info (not filled for real data)\r
+ fEleNtuple = g.fEleNtuple; \r
+ //reco electrons from various sources\r
+ fhPhiConversion = g.fhPhiConversion; \r
+ fhEtaConversion = g.fhEtaConversion;\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
+ //MC rate histograms/ntuple\r
+ fMCEleNtuple = g.fMCEleNtuple; fhMCBJetElePt = g.fhMCBJetElePt; \r
+ fhPtMCHadron = g.fhPtMCHadron; fhPtMCElectron = g.fhPtMCElectron; \r
\r
return *this;\r
\r
// store them in outputContainer\r
TList * outputContainer = new TList() ; \r
outputContainer->SetName("ElectronHistos") ; \r
- \r
- //created ele ntuple for further analysis\r
- if(fWriteNtuple) {\r
- fEleNtuple = new TNtuple("EleNtuple","Electron Ntuple","tmctag:cmctag:pt:phi:eta:p:E:deta:dphi:nCells:dEdx:pidProb:impXY:impZ");\r
- outputContainer->Add(fEleNtuple) ;\r
- }\r
\r
Int_t nptbins = GetHistoNPtBins();\r
Int_t nphibins = GetHistoNPhiBins();\r
Float_t phimin = GetHistoPhiMin();\r
Float_t etamin = GetHistoEtaMin(); \r
\r
- fh1pOverE = new TH1F("h1pOverE","EMCAL-TRACK matches p/E",100,0.,10.);\r
+ //event QA\r
+ fhImpactXY = new TH1F("hImpactXY","Impact parameter for all tracks",200,-10,10.);\r
+ fhRefMult = new TH1F("hRefMult" ,"refmult QA: " ,100,0,200);\r
+ fhRefMult2 = new TH1F("hRefMult2" ,"refmult2 QA: " ,100,0,200);\r
+\r
+ outputContainer->Add(fhImpactXY);\r
+ outputContainer->Add(fhRefMult);\r
+ outputContainer->Add(fhRefMult2);\r
+ \r
+ //matching checks\r
+ fh1pOverE = new TH1F("h1pOverE","EMCAL-TRACK matches p/E",200,0.,10.);\r
+ fh1EOverp = new TH1F("h1EOverp","EMCAL-TRACK matches E/p",200,0.,10.);\r
fh1dR = new TH1F("h1dR","EMCAL-TRACK matches dR",300, 0.,TMath::Pi());\r
fh2EledEdx = new TH2F("h2EledEdx","dE/dx vs. p for electrons",200,0.,50.,200,0.,400.);\r
fh2MatchdEdx = new TH2F("h2MatchdEdx","dE/dx vs. p for all matches",200,0.,50.,200,0.,400.);\r
fh2TrackEtaVsClusterEta = new TH2F("h2TrackEtaVsClusterEta","h2TrackEtaVsClusterEta",netabins,etamin,etamax,netabins,etamin,etamax);\r
\r
outputContainer->Add(fh1pOverE) ; \r
+ outputContainer->Add(fh1EOverp) ; \r
outputContainer->Add(fh1dR) ; \r
outputContainer->Add(fh2EledEdx) ;\r
outputContainer->Add(fh2MatchdEdx) ;\r
outputContainer->Add(fh1OpeningAngle);\r
outputContainer->Add(fh1MinvPhoton);\r
\r
+ //Reconstructed electrons\r
fhPtElectron = new TH1F("hPtElectron","Electron pT",nptbins,ptmin,ptmax);\r
fhPhiElectron = new TH2F("hPhiElectron","Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
fhEtaElectron = new TH2F("hEtaElectron","Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
outputContainer->Add(fhPhiPE) ; \r
outputContainer->Add(fhEtaPE) ;\r
\r
- fhPtHadron = new TH1F("hPtHadron","Charged hadrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtEleTrkDet = new TH1F("hPtEleTrkDet","Electrons identified by tracking detectors w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
-\r
- outputContainer->Add(fhPtHadron);\r
- outputContainer->Add(fhPtEleTrkDet);\r
-\r
- //event QA\r
- fhImpactXY = new TH1F("hImpactXY","Impact parameter for all tracks",200,-10,10.);\r
- fhRefMult = new TH1F("hRefMult" ,"refmult QA: " ,100,0,200);\r
- fhRefMult2 = new TH1F("hRefMult2" ,"refmult2 QA: " ,100,0,200);\r
-\r
- outputContainer->Add(fhImpactXY);\r
- outputContainer->Add(fhRefMult);\r
- outputContainer->Add(fhRefMult2);\r
-\r
//B-tagging\r
fhDVMBtagCut1 = new TH2F("hdvmbtag_cut1","DVM B-tag result cut1", 10,0,10 ,nptbins,ptmin,ptmax);\r
fhDVMBtagCut2 = new TH2F("hdvmbtag_cut2","DVM B-tag result cut2", 10,0,10 ,nptbins,ptmin,ptmax);\r
fhDVMBtagQA3 = new TH1F("hdvmbtag_qa3" ,"DVM B-tag QA: ITS-Hits electron" ,7,0,7);\r
fhDVMBtagQA4 = new TH1F("hdvmbtag_qa4" ,"DVM B-tag QA: IP d electron" ,200,-3,3);\r
fhDVMBtagQA5 = new TH1F("hdvmbtag_qa5" ,"DVM B-tag QA: IP z electron" ,200,-3,3);\r
- fhIPSigBtagQA1 = new TH1F("hipsigbtag_qa1" ,"IPSig B-tag QA: # tag tracks", 20,0,20);\r
- fhIPSigBtagQA2 = new TH1F("hipsigbtag_qa2" ,"IPSig B-tag QA: IP significance", 200,-10.,10.);\r
\r
outputContainer->Add(fhDVMBtagCut1) ;\r
outputContainer->Add(fhDVMBtagCut2) ;\r
outputContainer->Add(fhDVMBtagQA3) ;\r
outputContainer->Add(fhDVMBtagQA4) ;\r
outputContainer->Add(fhDVMBtagQA5) ;\r
+\r
+ //IPSig B-tagging\r
+ fhIPSigBtagQA1 = new TH1F("hipsigbtag_qa1" ,"IPSig B-tag QA: # tag tracks", 20,0,20);\r
+ fhIPSigBtagQA2 = new TH1F("hipsigbtag_qa2" ,"IPSig B-tag QA: IP significance", 200,-10.,10.);\r
+ fhTagJetPt1x4 = new TH1F("hTagJetPt1x4","tagged jet pT (1 track, ipSignif>4);p_{T}",1000,0.,100.);\r
+ fhTagJetPt2x3 = new TH1F("hTagJetPt2x3","tagged jet pT (2 track, ipSignif>3);p_{T}",1000,0.,100.);\r
+ fhTagJetPt3x2 = new TH1F("hTagJetPt3x2","tagged jet pT (3 track, ipSignif>2);p_{T}",1000,0.,100.);\r
+\r
outputContainer->Add(fhIPSigBtagQA1) ;\r
outputContainer->Add(fhIPSigBtagQA2) ;\r
+ outputContainer->Add(fhTagJetPt1x4);\r
+ outputContainer->Add(fhTagJetPt2x3);\r
+ outputContainer->Add(fhTagJetPt3x2);\r
\r
+ //B-Jet histograms\r
fhJetType = new TH2F("hJetType","# jets passing each tag method vs jet pt",10,0,10,300,0.,300.);\r
fhBJetXsiFF = new TH2F("hBJetXsiFF","B-jet #Xsi Frag. Fn.",100,0.,10.,300,0.,300.);\r
fhBJetPtFF = new TH2F("hBJetPtFF","B-jet p_{T} Frag. Fn.",nptbins,ptmin,ptmax,300,0.,300.);\r
outputContainer->Add(fhNonBJetPtFF);\r
outputContainer->Add(fhNonBJetEtaPhi);\r
\r
+ //Histograms that use MC information\r
if(IsDataMC()){\r
- \r
- fhPtConversion = new TH1F("hPtConversion","Conversion electron pT",nptbins,ptmin,ptmax);\r
+\r
+ //electron ntuple for further analysis\r
+ if(fWriteNtuple) {\r
+ fEleNtuple = new TNtuple("EleNtuple","Electron Ntuple","tmctag:cmctag:pt:phi:eta:p:E:deta:dphi:nCells:dEdx:pidProb:impXY:impZ");\r
+ outputContainer->Add(fEleNtuple) ;\r
+ }\r
+\r
+ //electrons from various MC sources\r
fhPhiConversion = new TH2F("hPhiConversion","Conversion Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
fhEtaConversion = new TH2F("hEtaConversion","Conversion Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtBottom = new TH1F("hPtBottom","Bottom electron pT",nptbins,ptmin,ptmax);\r
- fhPhiBottom = new TH2F("hPhiBottom","Bottom Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaBottom = new TH2F("hEtaBottom","Bottom Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtCharm = new TH1F("hPtCharm","Charm electron pT",nptbins,ptmin,ptmax);\r
- fhPhiCharm = new TH2F("hPhiCharm","Charm Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaCharm = new TH2F("hEtaCharm","Charm Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtCFromB = new TH1F("hPtCFromB","Charm from Bottom electron pT",nptbins,ptmin,ptmax);\r
- fhPhiCFromB = new TH2F("hPhiCFromB","Charm from Bottom Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaCFromB = new TH2F("hEtaCFromB","Charm from Bottom Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtDalitz = new TH1F("hPtDalitz","Dalitz electron pT",nptbins,ptmin,ptmax);\r
- fhPhiDalitz = new TH2F("hPhiDalitz","Dalitz Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaDalitz = new TH2F("hEtaDalitz","Dalitz Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtWDecay = new TH1F("hPtWDecay","W-boson Electron pT",nptbins,ptmin,ptmax);\r
- fhPhiWDecay = new TH2F("hPhiWDecay","W-boson electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaWDecay = new TH2F("hEtaWDecay","W-boson Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtZDecay = new TH1F("hPtZDecay","Z-boson electron pT",nptbins,ptmin,ptmax);\r
- fhPhiZDecay = new TH2F("hPhiZDecay","Z-boson Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaZDecay = new TH2F("hEtaZDecay","Z-boson Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtAll = new TH1F("hPtAll","All electron pT",nptbins,ptmin,ptmax);\r
- fhPhiAll = new TH2F("hPhiAll","All Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaAll = new TH2F("hEtaAll","All Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtUnknown = new TH1F("hPtUnknown","Unknown electron pT",nptbins,ptmin,ptmax);\r
- fhPhiUnknown = new TH2F("hPhiUnknown","Unknown Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaUnknown = new TH2F("hEtaUnknown","Unknown Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
- fhPtMisidentified = new TH1F("hPtMisidentified","Misidentified electron pT",nptbins,ptmin,ptmax);\r
- fhPhiMisidentified = new TH2F("hPhiMisidentified","Misidentified Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
- fhEtaMisidentified = new TH2F("hEtaMisidentified","Misidentified Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
-\r
- outputContainer->Add(fhPtConversion);\r
+\r
outputContainer->Add(fhPhiConversion);\r
outputContainer->Add(fhEtaConversion);\r
- outputContainer->Add(fhPtBottom);\r
- outputContainer->Add(fhPhiBottom);\r
- outputContainer->Add(fhEtaBottom);\r
- outputContainer->Add(fhPtCharm);\r
- outputContainer->Add(fhPhiCharm);\r
- outputContainer->Add(fhEtaCharm);\r
- outputContainer->Add(fhPtCFromB);\r
- outputContainer->Add(fhPhiCFromB);\r
- outputContainer->Add(fhEtaCFromB);\r
- outputContainer->Add(fhPtDalitz);\r
- outputContainer->Add(fhPhiDalitz);\r
- outputContainer->Add(fhEtaDalitz);\r
- outputContainer->Add(fhPtWDecay);\r
- outputContainer->Add(fhPhiWDecay);\r
- outputContainer->Add(fhEtaWDecay);\r
- outputContainer->Add(fhPtZDecay);\r
- outputContainer->Add(fhPhiZDecay);\r
- outputContainer->Add(fhEtaZDecay);\r
- outputContainer->Add(fhPtAll);\r
- outputContainer->Add(fhPhiAll);\r
- outputContainer->Add(fhEtaAll);\r
- outputContainer->Add(fhPtUnknown);\r
- outputContainer->Add(fhPhiUnknown);\r
- outputContainer->Add(fhEtaUnknown);\r
- outputContainer->Add(fhPtMisidentified);\r
- outputContainer->Add(fhPhiMisidentified);\r
- outputContainer->Add(fhEtaMisidentified);\r
+\r
+ //Bins along y-axis are: 0 - unfiltered, 1 - bottom, 2 - charm, 3 - charm from bottom,\r
+ //4 - conversion, 5 - Dalitz, 6 - W and Z, 7 - junk/unknown, 8 - misidentified\r
+\r
+ //histograms for comparison to tracking detectors\r
+ fhPtHadron = new TH2F("hPtHadron","Charged hadrons w/in EMCAL acceptance",nptbins,ptmin,ptmax,10,0,10);\r
+ fhPtNPEleTPC = new TH2F("hPtNPEleTPC","Non-phot. Electrons identified by TPC w/in EMCAL acceptance",nptbins,ptmin,ptmax,10,0,10);\r
+ fhPtNPEleTPCTRD = new TH2F("hPtNPEleTPCTRD","Non-phot. Electrons identified by TPC+TRD w/in EMCAL acceptance",nptbins,ptmin,ptmax,10,0,10);\r
+ fhPtNPEleTTE = new TH2F("hPtNPEleTTE","Non-phot. Electrons identified by TPC+TRD+EMCAL w/in EMCAL acceptance",nptbins,ptmin,ptmax,10,0,10);\r
+\r
+ outputContainer->Add(fhPtHadron);\r
+ outputContainer->Add(fhPtNPEleTPC);\r
+ outputContainer->Add(fhPtNPEleTPCTRD);\r
+ outputContainer->Add(fhPtNPEleTTE);\r
+\r
+ //for computing efficiency of IPSig tag\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
+\r
+ outputContainer->Add(fhBJetPt1x4);\r
+ outputContainer->Add(fhBJetPt2x3);\r
+ outputContainer->Add(fhBJetPt3x2);\r
+\r
+ //MC Only histograms\r
\r
- //created ele ntuple for further analysis\r
+ //MC ele ntuple for further analysis\r
if(fWriteNtuple) {\r
fMCEleNtuple = new TNtuple("MCEleNtuple","MC Electron Ntuple","mctag:pt:phi:eta:x:y:z");\r
outputContainer->Add(fMCEleNtuple) ;\r
}\r
\r
+ fhMCBJetElePt = new TH2F("hMCBJetElePt","MC B-jet pT vs. electron pT",300,0.,300.,300,0.,300.);\r
fhPtMCHadron = new TH1F("hPtMCHadron","MC Charged hadrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtMCBottom = new TH1F("hPtMCBottom","MC Bottom electrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtMCCharm = new TH1F("hPtMCCharm","MC Charm electrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtMCCFromB = new TH1F("hPtMCCFromB","MC Charm from Bottom electrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtMCConversion = new TH1F("hPtMCConversion","MC Conversion electrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtMCDalitz = new TH1F("hPtMCDalitz","MC Dalitz electrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtMCWDecay = new TH1F("hPtMCWDecay","MC W Decay electrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtMCZDecay = new TH1F("hPtMCZDecay","MC Z Decay electrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
- fhPtMCUnknown = new TH1F("hPtMCUnknown","MC Unknown electrons w/in EMCAL acceptance",nptbins,ptmin,ptmax);\r
\r
+ //Bins along y-axis are: 0 - unfiltered, 1 - bottom, 2 - charm, 3 - charm from bottom,\r
+ //4 - conversion, 5 - Dalitz, 6 - W and Z, 7 - junk/unknown\r
+ fhPtMCElectron = new TH2F("hPtMCElectron","MC electrons from various sources w/in EMCAL acceptance",nptbins,ptmin,ptmax,10,0,10);\r
+\r
+ outputContainer->Add(fhMCBJetElePt);\r
outputContainer->Add(fhPtMCHadron);\r
- outputContainer->Add(fhPtMCBottom);\r
- outputContainer->Add(fhPtMCCharm);\r
- outputContainer->Add(fhPtMCCFromB);\r
- outputContainer->Add(fhPtMCConversion);\r
- outputContainer->Add(fhPtMCDalitz);\r
- outputContainer->Add(fhPtMCWDecay);\r
- outputContainer->Add(fhPtMCZDecay);\r
- outputContainer->Add(fhPtMCUnknown);\r
+ outputContainer->Add(fhPtMCElectron);\r
\r
}//Histos with MC\r
\r
//IPSig B-tagging\r
fNTagTrkCut = 2;\r
fIPSigCut = 3.0;\r
+ //Jet fiducial cuts\r
+ fJetEtaCut = 0.3;\r
+ fJetPhiMin = 1.8;\r
+ fJetPhiMax = 2.9;\r
}\r
\r
//__________________________________________________________________\r
Double_t pOverE = -999.;\r
\r
Int_t pidProb = track->GetMostProbablePID();\r
- if(pidProb == AliAODTrack::kPion || pidProb == AliAODTrack::kKaon || pidProb == AliAODTrack::kProton) fhPtHadron->Fill(track->Pt());\r
- if(pidProb == AliAODTrack::kElectron) fhPtEleTrkDet->Fill(track->Pt());\r
- \r
- Bool_t isElectron = kFALSE; \r
+ Bool_t tpcEle = kFALSE; if(dEdx > 70.) tpcEle = kTRUE;\r
+ Bool_t trkEle = kFALSE; if(pidProb == AliAODTrack::kElectron) trkEle = kTRUE;\r
+ Bool_t trkChgHad = kFALSE; if(pidProb == AliAODTrack::kPion || pidProb == AliAODTrack::kKaon || pidProb == AliAODTrack::kProton) trkChgHad = kTRUE;\r
+\r
+ Int_t tmctag = -1;\r
+\r
+ //Check against V0 for conversion, only if it is flagged as electron\r
+ Bool_t photonic = kFALSE;\r
+ if(tpcEle || trkEle) photonic = PhotonicV0(itrk);\r
+ if(trkEle && !photonic) fhPtNPEleTPCTRD->Fill(track->Pt(),0); //0 = no MC info\r
+ if(tpcEle && !photonic) fhPtNPEleTPC->Fill(track->Pt(),0); //0 = no MC info\r
+\r
+ if(trkChgHad) fhPtHadron->Fill(track->Pt(),0); //0 = no MC info\r
+ if(IsDataMC()) {\r
+ //Input from second AOD?\r
+ Int_t input = 0;\r
+ if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) input = 1;\r
+ tmctag = GetMCAnalysisUtils()->CheckOrigin(track->GetLabel(),GetReader(),input);\r
+\r
+ if(trkChgHad) fhPtHadron->Fill(track->Pt(),GetMCSource(tmctag));\r
+ if(tpcEle && !photonic) fhPtNPEleTPC->Fill(track->Pt(),GetMCSource(tmctag));\r
+ if(trkEle && !photonic) fhPtNPEleTPCTRD->Fill(track->Pt(),GetMCSource(tmctag));\r
+ }\r
+\r
+ Bool_t emcEle = kFALSE; \r
//For tracks in EMCAL acceptance, pair them with all clusters\r
//and fill the dEta vs dPhi for these pairs:\r
for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
fh2dEtadPhiMatched->Fill(deta,dphi);\r
iCluster = iclus;\r
\r
- Int_t tmctag = -1;\r
Int_t cmctag = -1;\r
\r
- if(IsDataMC()) {\r
- //Input from second AOD?\r
- Int_t input = 0;\r
- if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) input = 1;\r
- tmctag = GetMCAnalysisUtils()->CheckOrigin(track->GetLabel(),GetReader(),input);\r
- \r
+ if(IsDataMC()) { \r
//Do you want the cluster or the track label?\r
- input = 0;\r
+ Int_t input = 0;\r
if(GetReader()->GetAODEMCALNormalInputEntries() <= iclus) input = 1;\r
cmctag = GetMCAnalysisUtils()->CheckOrigin(clus->GetLabel(0),GetReader(),input);\r
}\r
Double_t energy = clus->E(); \r
if(energy > 0) pOverE = tmom/energy;\r
fh1pOverE->Fill(pOverE);\r
+ fh1EOverp->Fill(energy/tmom);\r
\r
Int_t mult = clus->GetNCells();\r
if(mult < 2 && GetDebug() > 0) printf("Single digit cluster.\n");\r
//////////////////////////////\r
//Electron cuts happen here!//\r
//////////////////////////////\r
- if(pOverE > fpOverEmin && pOverE < fpOverEmax) isElectron = kTRUE;\r
+ if(pOverE > fpOverEmin && pOverE < fpOverEmax) emcEle = kTRUE;\r
} else {\r
fh2dEtadPhiUnmatched->Fill(deta,dphi);\r
}\r
///////////////////////////\r
//Fill AOD with electrons//\r
///////////////////////////\r
- if(isElectron) {\r
- \r
+ if(emcEle || trkEle) {\r
+\r
//B-tagging\r
if(GetDebug() > 1) printf("Found Electron - do b-tagging\n");\r
Int_t dvmbtag = GetDVMBtag(track); bt += dvmbtag;\r
tr.SetLabel(track->GetLabel());\r
tr.SetCaloLabel(iCluster,-1); //sets the indices of the original caloclusters\r
tr.SetTrackLabel(itrk,-1); //sets the indices of the original tracks\r
- tr.SetDetector(fCalorimeter);\r
+ if(emcEle) //PID determined by EMCAL\r
+ tr.SetDetector(fCalorimeter);\r
+ else\r
+ tr.SetDetector("CTS"); //PID determined by CTS\r
if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) tr.SetInputFileIndex(1);\r
//Make this preserve sign of particle\r
if(track->Charge() < 0) tr.SetPdg(11); //electron is 11\r
}//pid check\r
}//track loop \r
\r
- //FIXME: Should we also check from the calocluster side, just in\r
- //case?\r
fhRefMult->Fill(refmult);\r
fhRefMult2->Fill(refmult2);\r
\r
////////////////////////////////////\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",njets);\r
+ if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillHistograms() - Jet AOD branch has %d jets. Performing b-jet tag analysis\n",njets);\r
\r
for(Int_t ijet = 0; ijet < njets ; ijet++) {\r
AliAODJet * jet = (AliAODJet*)(GetReader()->GetOutputEvent())->GetJet(ijet) ;\r
printf("AliAODJet ijet = %d\n",ijet);\r
jet->Print("");\r
}\r
+ //Skip jets not inside a smaller fiducial volume to ensure that\r
+ //they are completely contained in the EMCAL\r
+ if(TMath::Abs(jet->Eta()) > fJetEtaCut) continue;\r
+ if(jet->Phi() < fJetPhiMin || jet->Phi() > fJetPhiMax) continue;\r
+\r
//To "tag" the jet, we will look for it to pass our various criteria\r
//For e jet tag, we just look to see which ones have NPEs\r
//For DVM jet tag, we will look for DVM electrons\r
Bool_t ipsigJet = kFALSE;\r
TRefArray* rt = jet->GetRefTracks();\r
Int_t ntrk = rt->GetEntries();\r
- Int_t trackCounter = 0; //for ipsig\r
+ Int_t trackCounter[4] = {0,0,0,0}; //for ipsig\r
for(Int_t itrk = 0; itrk < ntrk; itrk++) {\r
- AliAODTrack* jetTrack = (AliAODTrack*)jet->GetTrack(itrk);\r
- if( GetIPSignificance(jetTrack, jet->Phi()) > fIPSigCut) trackCounter++;\r
+ AliAODTrack* jetTrack = (AliAODTrack*)jet->GetTrack(itrk);\r
+ if( GetIPSignificance(jetTrack, jet->Phi()) > fIPSigCut) trackCounter[0]++;\r
+ if( GetIPSignificance(jetTrack, jet->Phi()) > 4.) trackCounter[1]++;\r
+ if( GetIPSignificance(jetTrack, jet->Phi()) > 3.) trackCounter[2]++;\r
+ if( GetIPSignificance(jetTrack, jet->Phi()) > 2.) trackCounter[3]++;\r
Bool_t isNPE = CheckTrack(jetTrack,"NPE");\r
if(isNPE) eJet = kTRUE;\r
Bool_t isDVM = CheckTrack(jetTrack,"DVM");\r
if(isDVM) dvmJet = kTRUE;\r
}\r
- fhIPSigBtagQA1->Fill(trackCounter);\r
- if(trackCounter > fNTagTrkCut) ipsigJet = kTRUE;\r
+ fhIPSigBtagQA1->Fill(trackCounter[0]);\r
+ if(trackCounter[1]>0) fhTagJetPt1x4->Fill(jet->Pt());\r
+ if(trackCounter[2]>1) fhTagJetPt2x3->Fill(jet->Pt());\r
+ if(trackCounter[3]>2) fhTagJetPt3x2->Fill(jet->Pt());\r
+\r
+ if(trackCounter[0] > fNTagTrkCut) ipsigJet = kTRUE;\r
\r
//Fill bjet histograms here\r
if(!(eJet || ipsigJet || dvmJet)) fhJetType->Fill(0.,jet->Pt()); //none\r
if(dvmJet && ipsigJet && !eJet) fhJetType->Fill(6.,jet->Pt()); //dvm & ipsig\r
if(dvmJet && ipsigJet && eJet) fhJetType->Fill(7.,jet->Pt()); //all\r
\r
+ if(eJet || ipsigJet || dvmJet) fhBJetEtaPhi->Fill(jet->Eta(),jet->Phi());\r
+ else fhNonBJetEtaPhi->Fill(jet->Eta(),jet->Phi());\r
+\r
for(Int_t itrk = 0; itrk < ntrk; itrk++) {\r
AliAODTrack* jetTrack = (AliAODTrack*)jet->GetTrack(itrk);\r
Double_t xsi = TMath::Log(jet->Pt()/jetTrack->Pt());\r
if(eJet || ipsigJet || dvmJet) {\r
if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillHistograms - We have a bjet!\n");\r
-\r
fhBJetXsiFF->Fill(xsi,jet->Pt());\r
fhBJetPtFF->Fill(jetTrack->Pt(),jet->Pt());\r
- fhBJetEtaPhi->Fill(jet->Eta(),jet->Phi());\r
} else {\r
//Fill non-bjet histograms here\r
fhNonBJetXsiFF->Fill(xsi,jet->Pt());\r
fhNonBJetPtFF->Fill(jetTrack->Pt(),jet->Pt());\r
- fhNonBJetEtaPhi->Fill(jet->Eta(),jet->Phi());\r
}\r
}\r
+\r
} //jet loop\r
} //jets exist\r
\r
printf("AliAnaElectron::MakeAnalysisFillHistograms() - PDG %d, MC TAG %d, Calorimeter %s\n", ele->GetPdg(),ele->GetTag(), (ele->GetDetector()).Data()) ;\r
\r
if(TMath::Abs(pdg) != AliCaloPID::kElectron) continue; \r
- if(ele->GetDetector() != fCalorimeter) continue;\r
\r
if(GetDebug() > 1) \r
printf("AliAnaElectron::MakeAnalysisFillHistograms() - ID Electron: pt %f, phi %f, eta %f\n", ele->Pt(),ele->Phi(),ele->Eta()) ;\r
\r
+ //MC tag of this electron\r
+ Int_t mctag = ele->GetTag();\r
+\r
//Filter for photonic electrons based on opening angle and Minv\r
//cuts, also fill histograms\r
Bool_t photonic = kFALSE;\r
Bool_t photonic1 = kFALSE;\r
- photonic1 = IsItPhotonic(ele); //check against primaries\r
+ photonic1 = PhotonicPrim(ele); //check against primaries\r
if(photonic1) ph1++;\r
Bool_t photonic2 = kFALSE;\r
- photonic2 = IsItPhotonic2(ele); //check against V0s\r
+ photonic2 = PhotonicV0(ele->GetTrackLabel(0)); //check against V0s\r
if(photonic2) ph2++;\r
if(photonic1 && photonic2) phB++;\r
if(photonic1 || photonic2) photonic = kTRUE;\r
Float_t ptele = ele->Pt();\r
Float_t phiele = ele->Phi();\r
Float_t etaele = ele->Eta();\r
- \r
+\r
+ //"Best reconstructed electron spectrum" = EMCAL or tracking\r
+ //detectors say it is an electron and it does not form a V0\r
+ //with Minv near a relevant resonance\r
+ if(!photonic) {\r
+ fhPtNPEleTTE->Fill(ptele,0); //0 = no MC info\r
+ if(IsDataMC()) fhPtNPEleTTE->Fill(ptele,GetMCSource(mctag));\r
+ }\r
+\r
+ //kept for historical reasons?\r
fhPtElectron ->Fill(ptele);\r
fhPhiElectron ->Fill(ptele,phiele);\r
fhEtaElectron ->Fill(ptele,etaele);\r
}\r
\r
if(IsDataMC()){\r
- Int_t tag = ele->GetTag();\r
- if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)) {\r
- fhPtAll ->Fill(ptele);\r
- fhPhiAll ->Fill(ptele,phiele);\r
- fhEtaAll ->Fill(ptele,etaele); \r
-\r
- if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)){\r
- fhPtConversion ->Fill(ptele);\r
- fhPhiConversion ->Fill(ptele,phiele);\r
- fhEtaConversion ->Fill(ptele,etaele);\r
- }\r
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEFromB)){\r
- fhPtBottom ->Fill(ptele);\r
- fhPhiBottom ->Fill(ptele,phiele);\r
- fhEtaBottom ->Fill(ptele,etaele);\r
- }\r
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEFromC) && !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEFromB)){\r
- fhPtCharm ->Fill(ptele);\r
- fhPhiCharm ->Fill(ptele,phiele);\r
- fhEtaCharm ->Fill(ptele,etaele);\r
- }\r
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEFromCFromB)){\r
- fhPtCFromB ->Fill(ptele);\r
- fhPhiCFromB ->Fill(ptele,phiele);\r
- fhEtaCFromB ->Fill(ptele,etaele);\r
- }\r
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)) {\r
- fhPtDalitz ->Fill(ptele);\r
- fhPhiDalitz ->Fill(ptele,phiele);\r
- fhEtaDalitz ->Fill(ptele,etaele);\r
- }\r
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCWDecay)) {\r
- fhPtWDecay ->Fill(ptele);\r
- fhPhiWDecay ->Fill(ptele,phiele);\r
- fhEtaWDecay ->Fill(ptele,etaele);\r
- }\r
- else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCZDecay)) {\r
- fhPtZDecay ->Fill(ptele);\r
- fhPhiZDecay ->Fill(ptele,phiele);\r
- fhEtaZDecay ->Fill(ptele,etaele);\r
- } \r
- else {\r
- fhPtUnknown ->Fill(ptele);\r
- fhPhiUnknown ->Fill(ptele,phiele);\r
- fhEtaUnknown ->Fill(ptele,etaele);\r
- }\r
- //not electron:\r
- } else {\r
- fhPtMisidentified ->Fill(ptele);\r
- fhPhiMisidentified ->Fill(ptele,phiele);\r
- fhEtaMisidentified ->Fill(ptele,etaele);\r
+ if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCConversion)){\r
+ fhPhiConversion ->Fill(ptele,phiele);\r
+ fhEtaConversion ->Fill(ptele,etaele);\r
}\r
}//Histograms with MC\r
\r
//Fill histograms of pure MC kinematics from the stack//\r
////////////////////////////////////////////////////////\r
if(IsDataMC()) {\r
+\r
+ //MC Jets\r
+ TVector3 jetVect[4];\r
+ Int_t nPythiaGenJets = 0;\r
+ AliGenPythiaEventHeader* pythiaGenHeader = (AliGenPythiaEventHeader*)GetReader()->GetGenEventHeader();\r
+ if(pythiaGenHeader){\r
+ //Get Jets from MC header\r
+ nPythiaGenJets = pythiaGenHeader->NTriggerJets();\r
+ Int_t iCount = 0;\r
+ for(int ip = 0;ip < nPythiaGenJets;++ip){\r
+ if (iCount>3) break;\r
+ Float_t p[4];\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
+ }\r
+ }\r
+ \r
if(GetReader()->ReadStack()) {\r
for(Int_t ipart = 0; ipart < stack->GetNtrack(); ipart++) {\r
primary = stack->Particle(ipart);\r
Int_t input = 0;\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
+ 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 dR = TMath::Sqrt(deta*deta + dphi*dphi);\r
+ if(dR < 0.4) {\r
+ fhMCBJetElePt->Fill(primary->Pt(),jetVect[ij].Pt());\r
+ }\r
+ }\r
+ }\r
+\r
+ fhPtMCElectron->Fill(primary->Pt(),0); //0 = unfiltered\r
+ fhPtMCElectron->Fill(primary->Pt(),GetMCSource(mctag));\r
+\r
//fill ntuple\r
if(fWriteNtuple) {\r
fMCEleNtuple->Fill(mctag,primary->Pt(),primary->Phi(),primary->Eta(),primary->Vx(),primary->Vy(),primary->Vz());\r
}\r
- if(!GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCConversion)) {\r
- if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCEFromB))\r
- fhPtMCBottom->Fill(primary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCEFromC))\r
- fhPtMCCharm->Fill(primary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCEFromCFromB))\r
- fhPtMCCFromB->Fill(primary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCWDecay))\r
- fhPtMCWDecay->Fill(primary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCZDecay))\r
- fhPtMCZDecay->Fill(primary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCPi0Decay) \r
- || GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCEtaDecay)\r
- || GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCOtherDecay))\r
- fhPtMCDalitz->Fill(primary->Pt());\r
- else \r
- fhPtMCUnknown->Fill(primary->Pt());\r
- } else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCConversion)) {\r
- fhPtMCConversion->Fill(primary->Pt());\r
- }\r
- } \r
+\r
+ } //stack loop\r
+\r
} else if(GetReader()->ReadAODMCParticles()) {\r
Int_t npart0 = mcparticles0->GetEntriesFast();\r
Int_t npart1 = 0;\r
Int_t ival = ipart;\r
if(ipart > npart0) { ival -= npart0; input = 1;}\r
mctag = GetMCAnalysisUtils()->CheckOrigin(ival,GetReader(),input);\r
+\r
+ fhPtMCElectron->Fill(aodprimary->Pt(),0); //0 = unfiltered\r
+ fhPtMCElectron->Fill(aodprimary->Pt(),GetMCSource(mctag));\r
\r
//fill ntuple\r
if(fWriteNtuple) {\r
- fMCEleNtuple->Fill(mctag,aodprimary->Pt(),aodprimary->Phi(),aodprimary->Eta(),aodprimary->Xv(),aodprimary->Yv(),aodprimary->Zv());\r
+ fMCEleNtuple->Fill(mctag,aodprimary->Pt(),aodprimary->Phi(),aodprimary->Eta(),\r
+ aodprimary->Xv(),aodprimary->Yv(),aodprimary->Zv());\r
}\r
- if(!GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCConversion)) {\r
- if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCEFromB))\r
- fhPtMCBottom->Fill(aodprimary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCEFromC))\r
- fhPtMCCharm->Fill(aodprimary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCEFromCFromB))\r
- fhPtMCCFromB->Fill(aodprimary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCWDecay))\r
- fhPtMCWDecay->Fill(aodprimary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCZDecay))\r
- fhPtMCZDecay->Fill(aodprimary->Pt());\r
- else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCPi0Decay) \r
- || GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCEtaDecay)\r
- || GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCOtherDecay))\r
- fhPtMCDalitz->Fill(aodprimary->Pt());\r
- else \r
- fhPtMCUnknown->Fill(aodprimary->Pt());\r
- } else if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCConversion)) {\r
- fhPtMCConversion->Fill(aodprimary->Pt());\r
- } \r
- }\r
- }\r
+\r
+ } //AODMC particles\r
+ } //input type\r
} //pure MC kine histos\r
\r
//if(GetDebug() > 0) \r
\r
for (Int_t k2 =0; k2 < GetAODCTS()->GetEntriesFast() ; k2++) {\r
//loop over assoc\r
- AliAODTrack* track2 = (AliAODTrack*) (GetAODCTS()->At(k2));\r
+ AliAODTrack* track2 = (AliAODTrack*)GetAODCTS()->At(k2);\r
Int_t id1 = tr->GetID();\r
Int_t id2 = track2->GetID();\r
if(id1 == id2) continue;\r
Double_t xplane1 = 0.; Double_t xplane2 = 0.;\r
Double_t pairdca = param1->GetDCA(param2,bfield,xplane1,xplane2);\r
\r
+ param1->PropagateTo(xplane1,bfield);\r
+ param2->PropagateTo(xplane2,bfield);\r
+\r
Int_t id1 = 0, id2 = 0;\r
AliESDv0 bvertex(*param1,id1,*param2,id2);\r
Double_t vx,vy,vz;\r
{\r
//get signed impact parameter significance of the given AOD track\r
//for the given jet\r
+\r
Int_t trackIndex = 0;\r
- for (int k2 =0; k2 < GetAODCTS()->GetEntriesFast() ; k2++) {\r
+ Int_t ntrk = GetAODCTS()->GetEntriesFast();\r
+ for (Int_t k2 =0; k2 < ntrk ; k2++) {\r
//loop over assoc\r
- AliAODTrack* track2 = (AliAODTrack*) (GetAODCTS()->At(k2));\r
+ AliAODTrack* track2 = (AliAODTrack*)GetAODCTS()->At(k2);\r
int id1 = tr->GetID();\r
int id2 = track2->GetID();\r
if(id1 == id2) {\r
break;\r
}\r
}\r
- \r
+\r
Double_t significance=0;\r
Double_t magField = 0;\r
Double_t maxD = 10000.;\r
}\r
\r
//__________________________________________________________________\r
-Bool_t AliAnaElectron::IsItPhotonic(const AliAODPWG4Particle* part) \r
+Bool_t AliAnaElectron::PhotonicPrim(const AliAODPWG4Particle* part) \r
{\r
//This method checks the opening angle and invariant mass of\r
//electron pairs within the AliAODPWG4Particle list to see if \r
Int_t trackId = part->GetTrackLabel(0);\r
AliAODTrack* track = (AliAODTrack*)GetAODCTS()->At(trackId);\r
if(!track) {\r
- if(GetDebug() > 0) printf("AliAnaElectron::IsItPhotonic - can't get the AOD Track from the particle! Skipping the photonic check");\r
+ if(GetDebug() > 0) printf("AliAnaElectron::PhotonicPrim - can't get the AOD Track from the particle! Skipping the photonic check");\r
return kFALSE; //Don't proceed because we can't get the track\r
}\r
\r
//propagate to common vertex and check opening angle\r
AliAODTrack* track2 = (AliAODTrack*)GetAODCTS()->At(track2Id);\r
if(!track2) {\r
- if(GetDebug() >0) printf("AliAnaElectron::IsItPhotonic - problem getting the partner track. Continuing on to the next one");\r
+ if(GetDebug() >0) printf("AliAnaElectron::PhotonicPrim - problem getting the partner track. Continuing on to the next one");\r
continue;\r
}\r
AliExternalTrackParam *param2 = new AliExternalTrackParam(track2);\r
}\r
\r
//__________________________________________________________________\r
-Bool_t AliAnaElectron::IsItPhotonic2(const AliAODPWG4Particle* part) \r
+Bool_t AliAnaElectron::PhotonicV0(Int_t id) \r
{\r
//This method checks to see whether a track that has been flagged as\r
//an electron was determined to match to a V0 candidate with\r
//invariant mass consistent with photon conversion\r
\r
Bool_t itIS = kFALSE;\r
- Int_t id = part->GetTrackLabel(0);\r
\r
//---Get V0s---\r
AliAODEvent *aod = (AliAODEvent*) GetReader()->GetInputEvent();\r
double radius = v0->RadiusV0();\r
double mass = v0->InvMass2Prongs(0,1,11,11);\r
if(GetDebug() > 0) {\r
- printf("## IsItPhotonic2() :: v0: %d, radius: %f \n", iV0 , radius );\r
- printf("## IsItPhotonic2() :: neg-id: %d, pos-id: %d \n", v0->GetNegID(), v0->GetPosID() );\r
- printf("## IsItPhotonic2() :: Minv(e,e): %f \n", v0->InvMass2Prongs(0,1,11,11) );\r
+ printf("## PhotonicV0() :: v0: %d, radius: %f \n", iV0 , radius );\r
+ printf("## PhotonicV0() :: neg-id: %d, pos-id: %d, THIS id: %d\n", v0->GetNegID(), v0->GetPosID(), id);\r
+ printf("## PhotonicV0() :: Minv(e,e): %f \n", v0->InvMass2Prongs(0,1,11,11) );\r
}\r
if (mass < 0.100) {\r
if ( id == v0->GetNegID() || id == v0->GetPosID()) {\r
itIS=kTRUE;\r
- printf("## IsItPhotonic2() :: It's a conversion electron!!! \n" );\r
+ if(GetDebug() > 0) printf("## PhotonicV0() :: It's a conversion electron!!! \n" );\r
}\r
} }\r
return itIS;\r
\r
}\r
\r
-\r
//__________________________________________________________________\r
Bool_t AliAnaElectron::CheckTrack(const AliAODTrack* track, const char* type) \r
{\r
\r
Bool_t photonic = kFALSE;\r
Bool_t photonic1 = kFALSE;\r
- photonic1 = IsItPhotonic(ele); //check against primaries\r
+ photonic1 = PhotonicPrim(ele); //check against primaries\r
Bool_t photonic2 = kFALSE;\r
- photonic2 = IsItPhotonic2(ele); //check against V0s\r
+ photonic2 = PhotonicV0(ele->GetTrackLabel(0)); //check against V0s\r
if(photonic1 || photonic2) photonic = kTRUE;\r
\r
if(!photonic) pass = kTRUE;\r
\r
}\r
\r
+//__________________________________________________________________\r
+Int_t AliAnaElectron::GetMCSource(Int_t tag)\r
+{\r
+ //For determining how to classify electrons using MC info\r
+ //the number returned is the bin along one axis of 2-d histograms in\r
+ //which to fill this electron\r
+\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCElectron)) {\r
+ //Bottom\r
+ if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEFromB)) return 1;\r
+ //Charm only\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEFromC)\r
+ && !GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEFromB)) return 2;\r
+ //Charm from bottom\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEFromCFromB)) return 3;\r
+ //Conversion\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) return 4;\r
+ //Dalitz\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCPi0Decay) \r
+ || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCEtaDecay) \r
+ || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCOtherDecay)) return 5; \r
+ //W,Z\r
+ else if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCWDecay)\r
+ || GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCZDecay)) return 6;\r
+ //Everything else\r
+ else \r
+ return 7;\r
+ } else {\r
+ //Misidentified electron\r
+ return 8;\r
+ }\r
+\r
+}\r
+\r
//__________________________________________________________________\r
void AliAnaElectron::Print(const Option_t * opt) const\r
{\r