]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
several updates for electron analysis
authorjklay <jklay@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Oct 2009 09:20:17 +0000 (09:20 +0000)
committerjklay <jklay@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Oct 2009 09:20:17 +0000 (09:20 +0000)
PWG4/PartCorrDep/AliAnaElectron.cxx
PWG4/PartCorrDep/AliAnaElectron.h

index b8836c85c597daf03120550d61b9ca33969996be..52106e30455963b78e68de637ebea0480ab148bf 100755 (executable)
@@ -47,6 +47,7 @@
 #include "AliESDtrack.h"\r
 #include "AliAODJet.h"\r
 #include "AliAODEvent.h"\r
+#include "AliGenPythiaEventHeader.h"\r
 \r
 ClassImp(AliAnaElectron)\r
   \r
@@ -56,40 +57,39 @@ AliAnaElectron::AliAnaElectron()
   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
@@ -105,46 +105,46 @@ AliAnaElectron::AliAnaElectron(const AliAnaElectron & g)
     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
@@ -170,10 +170,18 @@ AliAnaElectron & AliAnaElectron::operator = (const AliAnaElectron & g)
   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
@@ -182,87 +190,57 @@ AliAnaElectron & AliAnaElectron::operator = (const AliAnaElectron & g)
   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
@@ -283,12 +261,6 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
   // 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
@@ -300,7 +272,18 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
   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
@@ -314,6 +297,7 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
   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
@@ -332,6 +316,7 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
   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
@@ -352,21 +337,6 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
   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
@@ -376,8 +346,6 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
   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
@@ -387,9 +355,21 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
   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
@@ -406,95 +386,63 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
   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
@@ -589,6 +537,10 @@ void AliAnaElectron::InitParameters()
   //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
@@ -665,10 +617,31 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
        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
@@ -699,17 +672,11 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
            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
@@ -723,6 +690,7 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
            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
@@ -730,7 +698,7 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
            //////////////////////////////\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
@@ -740,8 +708,8 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
        ///////////////////////////\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
@@ -754,7 +722,10 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
          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
@@ -784,8 +755,6 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
     }//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
@@ -838,7 +807,7 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
   ////////////////////////////////////\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
@@ -846,6 +815,11 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
        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
@@ -856,17 +830,24 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
       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
@@ -878,22 +859,23 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
       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
@@ -911,19 +893,21 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
       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
@@ -932,7 +916,16 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
     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
@@ -948,57 +941,9 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
     }\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
@@ -1008,6 +953,26 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
   //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
@@ -1033,31 +998,28 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
        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
@@ -1094,33 +1056,18 @@ void  AliAnaElectron::MakeAnalysisFillHistograms()
        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
@@ -1158,7 +1105,7 @@ Int_t AliAnaElectron::GetDVMBtag(AliAODTrack * tr )
 \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
@@ -1236,6 +1183,9 @@ Double_t AliAnaElectron::ComputeSignDca(AliAODTrack *tr, AliAODTrack *tr2 , floa
   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
@@ -1288,10 +1238,12 @@ Double_t AliAnaElectron::GetIPSignificance(AliAODTrack *tr, Double_t jetPhi)
 {\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
@@ -1300,7 +1252,7 @@ Double_t AliAnaElectron::GetIPSignificance(AliAODTrack *tr, Double_t jetPhi)
       break;\r
     }\r
   }\r
-  \r
+\r
   Double_t significance=0;\r
   Double_t magField = 0;\r
   Double_t maxD = 10000.;\r
@@ -1358,7 +1310,7 @@ void AliAnaElectron::GetImpactParamVect(Double_t Pxy[2], Double_t Txy[2], Double
 }\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
@@ -1374,7 +1326,7 @@ Bool_t AliAnaElectron::IsItPhotonic(const AliAODPWG4Particle* part)
   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
@@ -1395,7 +1347,7 @@ Bool_t AliAnaElectron::IsItPhotonic(const AliAODPWG4Particle* part)
     //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
@@ -1437,14 +1389,13 @@ Bool_t AliAnaElectron::IsItPhotonic(const AliAODPWG4Particle* part)
 }\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
@@ -1455,14 +1406,14 @@ Bool_t AliAnaElectron::IsItPhotonic2(const AliAODPWG4Particle* part)
     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
@@ -1492,7 +1443,6 @@ Bool_t AliAnaElectron::GetDCA(const AliAODTrack* track,Double_t impPar[2], Doubl
 \r
 }\r
 \r
-\r
 //__________________________________________________________________\r
 Bool_t AliAnaElectron::CheckTrack(const AliAODTrack* track, const char* type) \r
 {\r
@@ -1520,9 +1470,9 @@ Bool_t AliAnaElectron::CheckTrack(const AliAODTrack* track, const char* type)
 \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
@@ -1536,6 +1486,40 @@ Bool_t AliAnaElectron::CheckTrack(const AliAODTrack* track, const char* type)
 \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
index 3ca22c6d5699c562aa6d5886aaa0e9e36343a7c4..15ad84b0890e5f6dba6713ad78234f386f2aa8c9 100755 (executable)
@@ -34,7 +34,7 @@ public:
   AliAnaElectron(const AliAnaElectron & g) ; // cpy ctor\r
   AliAnaElectron & operator = (const AliAnaElectron & g) ;//cpy assignment\r
   virtual ~AliAnaElectron() ; //virtual dtor\r
-  \r
+\r
   TList *  GetCreateOutputObjects();\r
 \r
   void Init();\r
@@ -49,8 +49,8 @@ public:
   //Temporary local method to get DCA because AliAODTrack is stupid\r
   Bool_t GetDCA(const AliAODTrack* tr,Double_t imp[2], Double_t cov[3]);\r
 \r
-  Bool_t IsItPhotonic(const AliAODPWG4Particle* part); //check with track list\r
-  Bool_t IsItPhotonic2(const AliAODPWG4Particle* part); //check with V0 list\r
+  Bool_t PhotonicPrim(const AliAODPWG4Particle* part); //check with track list\r
+  Bool_t PhotonicV0(Int_t trackId); //check with V0 list\r
 \r
   //check if track has been flagged as a non-photonic or DVM electron\r
   //used with the jet tracks to tag bjets\r
@@ -104,6 +104,8 @@ public:
   //based on transverse impact parameter\r
   Double_t GetIPSignificance(AliAODTrack *tr, Double_t jetPhi);\r
   void GetImpactParamVect(Double_t Pxy[2], Double_t t[2], Double_t Vxy[2], Double_t ip[2]);\r
+  //For determining origin of electron\r
+  Int_t GetMCSource(Int_t mctag);\r
 \r
   private:\r
   TString  fCalorimeter;  //! Which detector? EMCAL or PHOS\r
@@ -124,19 +126,32 @@ public:
   Int_t    fNTagTrkCut;  //min number of tracks required for IP sig tag\r
   Double_t fIPSigCut;    //min IP significance cut\r
 \r
+  Double_t fJetEtaCut;   //max eta for jets\r
+  Double_t fJetPhiMin;   //min phi for jets\r
+  Double_t fJetPhiMax;   //max phi for jets\r
+\r
   Bool_t  fWriteNtuple; //flag for filling ntuple or not\r
 \r
-  TNtuple* fEleNtuple; //! testing ntuple\r
+  ///////////////////////////////////////\r
+  //Output histograms and Ntuples\r
+\r
+  ///////////////////////////////////////\r
+  //RC = RECO only - these histos will be filled using only reco\r
+  //information\r
+\r
+  //event QA\r
+  TH1F * fhImpactXY;    //! XY impact parameter of all tracks to primary vertex\r
+  TH1F * fhRefMult;     //! refmult (tracks with |eta| < 0.5)\r
+  TH1F * fhRefMult2;    //! refmult2 (tracks with |eta| < 0.5 & impXY,impZ < 1.0)\r
 \r
   //matching checks   \r
   TH1F *fh1pOverE;     //! p/E for track-cluster matches\r
+  TH1F *fh1EOverp;     //! E/p for track-cluster matches (For PMJ)\r
   TH1F *fh1dR;         //! distance between projected track and cluster\r
   TH2F *fh2EledEdx;    //! dE/dx vs. momentum for electron candidates\r
   TH2F *fh2MatchdEdx;  //! dE/dx vs. momentum for all matches\r
-  TH2F *fh2dEtadPhi;   //! DeltaEta vs. DeltaPhi of all track/cluster\r
-                      //! pairs\r
-  TH2F *fh2dEtadPhiMatched;   //! DeltaEta vs. DeltaPhi of matched\r
-                               //! track/cluster pairs\r
+  TH2F *fh2dEtadPhi;   //! DeltaEta vs. DeltaPhi of all track/cluster pairs\r
+  TH2F *fh2dEtadPhiMatched;   //! DeltaEta vs. DeltaPhi of matched track/cluster pairs\r
   TH2F *fh2dEtadPhiUnmatched;   //! DeltaEta vs. DeltaPhi of unmatched track/cluster pairs\r
 \r
   TH2F* fh2TrackPVsClusterE;     //!track momentum vs. cluster energy\r
@@ -148,7 +163,7 @@ public:
   TH1F* fh1OpeningAngle; //!opening angle between pairs of photon candidates\r
   TH1F* fh1MinvPhoton;   //!invariant mass distribution of electron pairs\r
 \r
-  //Reconstructed\r
+  //Reconstructed electrons\r
   TH1F * fhPtElectron;  //! Number of identified electron vs transverse momentum \r
   TH2F * fhPhiElectron; //! Azimuthal angle of identified  electron vs transverse momentum \r
   TH2F * fhEtaElectron; //! Pseudorapidity of identified  electron vs tranvserse momentum \r
@@ -161,68 +176,21 @@ public:
   TH2F * fhPhiPE; //! Azimuthal angle of photonic electron vs transverse momentum \r
   TH2F * fhEtaPE; //! Pseudorapidity of photonic electron vs tranvserse momentum \r
 \r
-  TH1F * fhPtConversion;  //! Number of conversion electron vs transverse momentum \r
-  TH2F * fhPhiConversion; //! Azimuthal angle of conversion  electron vs transverse momentum \r
-  TH2F * fhEtaConversion; //! Pseudorapidity of conversion electron vs tranvserse momentum \r
-\r
-  TH1F * fhPtBottom;  //! Number of bottom electron vs transverse momentum \r
-  TH2F * fhPhiBottom; //! Azimuthal angle of bottom  electron vs transverse momentum \r
-  TH2F * fhEtaBottom; //! Pseudorapidity of bottom electron vs tranvserse momentum \r
-\r
-  TH1F * fhPtCharm;  //! Number of charm electron vs transverse momentum \r
-  TH2F * fhPhiCharm; //! Azimuthal angle of charm  electron vs transverse momentum \r
-  TH2F * fhEtaCharm; //! Pseudorapidity of charm electron vs tranvserse momentum \r
-\r
-  TH1F * fhPtCFromB;  //! Number of charm from bottom electron vs transverse momentum \r
-  TH2F * fhPhiCFromB; //! Azimuthal angle of charm from bottom electron vs transverse momentum \r
-  TH2F * fhEtaCFromB; //! Pseudorapidity of charm from bottom electron vs tranvserse momentum \r
-\r
-  TH1F * fhPtDalitz;  //! Number of dalitz electron vs transverse momentum \r
-  TH2F * fhPhiDalitz; //! Azimuthal angle of dalitz  electron vs transverse momentum \r
-  TH2F * fhEtaDalitz; //! Pseudorapidity of dalitz electron vs tranvserse momentum \r
-\r
-  TH1F * fhPtWDecay;  //! Number of W-boson electron vs transverse momentum \r
-  TH2F * fhPhiWDecay; //! Azimuthal angle of W-boson  electron vs transverse momentum \r
-  TH2F * fhEtaWDecay; //! Pseudorapidity of W-boson electron vs tranvserse momentum \r
-               \r
-  TH1F * fhPtZDecay;  //! Number of Z-boson electron vs transverse momentum \r
-  TH2F * fhPhiZDecay; //! Azimuthal angle of Z-boson  electron vs transverse momentum \r
-  TH2F * fhEtaZDecay; //! Pseudorapidity of Z-boson electron vs tranvserse momentum \r
-\r
-  TH1F * fhPtAll;  //! Number of all electron vs transverse momentum \r
-  TH2F * fhPhiAll; //! Azimuthal angle of all  electron vs transverse momentum \r
-  TH2F * fhEtaAll; //! Pseudorapidity of all electron vs tranvserse momentum \r
-\r
-  TH1F * fhPtUnknown;  //! Number of unknown electron vs transverse momentum\r
-  TH2F * fhPhiUnknown; //! Azimuthal angle of unknown  electron vs transverse momentum\r
-  TH2F * fhEtaUnknown; //! Pseudorapidity of unknown electron vs tranvserse momentum\r
-\r
-  TH1F * fhPtMisidentified;  //! Number of misidentified electron vs transverse momentum\r
-  TH2F * fhPhiMisidentified; //! Azimuthal angle of misidentified electron vs transverse momentum\r
-  TH2F * fhEtaMisidentified; //! Pseudorapidity of misidentified electron vs tranvserse momentum \r
-\r
-  TH1F* fhPtHadron;     //!Pt distribution of reco charged hadrons\r
-                       //!(pi,k,p) in EMCAL acceptance\r
-  TH1F* fhPtEleTrkDet;  //!Pt distribution of reco electrons using\r
-                       //!pid info from tracking detectors only in\r
-                       //!EMCAL acceptance\r
-  //event QA\r
-  TH1F * fhImpactXY;    //! impact parameter of all tracks to primary vertex\r
-  TH1F * fhRefMult;     //! refmult (sep 14)\r
-  TH1F * fhRefMult2;    //! refmult2 (sep 14)\r
-\r
   //DVM B-tagging\r
   TH2F * fhDVMBtagCut1; //! DVM B-tagging result for cut1 (minv>1.0)\r
   TH2F * fhDVMBtagCut2; //! DVM B-tagging result for cut2 (minv>1.5)\r
   TH2F * fhDVMBtagCut3; //! DVM B-tagging result for cut3 (minv>1.8)\r
   TH2F * fhDVMBtagQA1;  //! DVM B-tagging : QA of pairDca vs decaylength\r
   TH2F * fhDVMBtagQA2;  //! DVM B-tagging : QA of signDca vs mass\r
-  TH1F * fhDVMBtagQA3;  //! DVM B-tagging : QA (sep 14)\r
-  TH1F * fhDVMBtagQA4;  //! DVM B-tagging : QA (sep 14)\r
-  TH1F * fhDVMBtagQA5;  //! DVM B-tagging : QA (sep 14)\r
+  TH1F * fhDVMBtagQA3;  //! DVM B-tagging : QA number of ITS clusters\r
+  TH1F * fhDVMBtagQA4;  //! DVM B-tagging : QA prim vtx impXY\r
+  TH1F * fhDVMBtagQA5;  //! DVM B-tagging : QA prim vtx impZ\r
   //IPSig B-tagging\r
   TH1F * fhIPSigBtagQA1; //! IPSig B-tagging : QA of # tag tracks\r
   TH1F * fhIPSigBtagQA2; //! IPSig B-tagging : QA of IP sig\r
+  TH1F * fhTagJetPt1x4;  //! IPSig B-tagging : result for (1 track, ipSignif>4)\r
+  TH1F * fhTagJetPt2x3;  //! IPSig B-tagging : result for (2 track, ipSignif>3)\r
+  TH1F * fhTagJetPt3x2;  //! IPSig B-tagging : result for (3 track, ipSignif>2)\r
 \r
   //B-Jet histograms\r
   TH2F* fhJetType;       //! How many of each tag were found vs jet pt\r
@@ -233,19 +201,41 @@ public:
   TH2F* fhNonBJetPtFF;   //! Non b-tagged jet FF with pt_Track\r
   TH2F* fhNonBJetEtaPhi; //! Non b-tagged jet eta-phi distribution\r
 \r
-  //MC\r
+  ///////////////////////////////////////////////////////////////////\r
+  //MC = From here down, the histograms use MC information, so they will\r
+  //only be filled in simulations\r
+  TNtuple* fEleNtuple; //! testing ntuple\r
+\r
+  TH2F * fhPhiConversion; //! Azimuthal angle of conversion  electron vs transverse momentum \r
+  TH2F * fhEtaConversion; //! Pseudorapidity of conversion electron vs tranvserse momentum \r
+\r
+  //Histograms for comparison to tracking detectors\r
+  TH2F* fhPtHadron;        //!Pt distribution of reco charged hadrons\r
+                           //!(pi,k,p) in EMCAL acceptance\r
+  TH2F* fhPtNPEleTPC;      //!Pt distribution of non-photonic reco electrons using\r
+                          //!just TPC dEdx info in EMCAL acceptance\r
+  TH2F* fhPtNPEleTPCTRD;   //!Pt distribution of non-photonic reco electrons using\r
+                          //!pid info from tracking detectors only in EMCAL acceptance\r
+  TH2F* fhPtNPEleTTE;      //!Pt distribution of non-photonic reco\r
+                          //!electrons using pid info from TPC+TRD+EMCAL\r
+                          //!in EMCAL acceptance\r
+\r
+  //For computing efficiency of IPSIG tag\r
+  //these require that an MC b-Ancestor is present in the jet\r
+  TH1F * fhBJetPt1x4;    //! IPSig B-tagging : result for (1 track, ipSignif>4)\r
+  TH1F * fhBJetPt2x3;    //! IPSig B-tagging : result for (2 track, ipSignif>3)\r
+  TH1F * fhBJetPt3x2;    //! IPSig B-tagging : result for (3 track, ipSignif>2)\r
+\r
+  ////////////////////////////\r
+  //MC Only Rate histograms\r
+\r
   TNtuple *fMCEleNtuple; //! Ntuple of MC electrons\r
+\r
+  TH2F* fhMCBJetElePt;   //! Pt of B-Jet vs pt of electron\r
   TH1F* fhPtMCHadron;    //! Pt distribution of MC charged hadrons (pi,k,p) in EMCAL acceptance\r
-  TH1F* fhPtMCBottom;    //! Pt distribution of MC bottom electrons in EMCAL\r
-  TH1F* fhPtMCCharm;     //! Pt distribution of MC charm electrons in EMCAL \r
-  TH1F* fhPtMCCFromB;    //! Pt distribution of MC charm from bottom ele in EMCAL\r
-  TH1F* fhPtMCConversion;//! Pt distribution of MC conversion electrons in EMCAL \r
-  TH1F* fhPtMCDalitz;    //! Pt distribution of MC Dalitz electrons in EMCAL\r
-  TH1F* fhPtMCWDecay;    //! Pt distribution of MC W decay electrons in EMCAL\r
-  TH1F* fhPtMCZDecay;    //! Pt distribution of MC Z decay electrons in EMCAL\r
-  TH1F* fhPtMCUnknown;   //! Pt distribution of MC unknown electrons in EMCAL\r
-\r
-  ClassDef(AliAnaElectron,6)\r
+  TH2F* fhPtMCElectron;  //! Pt distribution of MC electrons from various sources in EMCAL\r
+\r
+  ClassDef(AliAnaElectron,7)\r
 \r
 } ;\r
  \r