delete not maintained classes
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 24 Jul 2011 21:45:53 +0000 (21:45 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 24 Jul 2011 21:45:53 +0000 (21:45 +0000)
PWG4/CMakelibPWG4PartCorrDep.pkg
PWG4/PWG4PartCorrDepLinkDef.h
PWG4/PartCorrDep/AliAnaBtag.cxx [deleted file]
PWG4/PartCorrDep/AliAnaBtag.h [deleted file]
PWG4/PartCorrDep/AliAnaCaloTrigger.cxx [deleted file]
PWG4/PartCorrDep/AliAnaCaloTrigger.h [deleted file]
PWG4/PartCorrDep/AliAnaElectron.cxx [deleted file]
PWG4/PartCorrDep/AliAnaElectron.h [deleted file]

index 28506cf4554ec08f8278eb9ed23e5685c49fd1bd..259e5416518c533ebc6dd3cae7fa1d9b2b70bdc7 100644 (file)
@@ -27,7 +27,6 @@
 #--------------------------------------------------------------------------------#
 
 set ( SRCS  
-    PartCorrDep/AliAnaCaloTrigger.cxx 
     PartCorrDep/AliAnalysisTaskPHOSExample.cxx 
     PartCorrDep/AliAnaExample.cxx 
     PartCorrDep/AliAnaParticleIsolation.cxx 
@@ -40,8 +39,6 @@ set ( SRCS
     PartCorrDep/AliAnaPi0EbE.cxx 
     PartCorrDep/AliAnaChargedParticles.cxx 
     PartCorrDep/AliAnaCalorimeterQA.cxx 
-    PartCorrDep/AliAnaElectron.cxx 
-    PartCorrDep/AliAnaBtag.cxx 
     PartCorrDep/AliAnaShowerParameter.cxx 
     PartCorrDep/AliAnalysisTaskTaggedPhotons.cxx 
     PartCorrDep/AliAnaOmegaToPi0Gamma.cxx 
index bd85e2d58908311f71789a0891d3a2a67d3bed32..8b64e43937d5945310f1edd966f534c33a319222 100644 (file)
@@ -4,7 +4,6 @@
 #pragma link off all classes;
 #pragma link off all functions;
 
-#pragma link C++ class AliAnaCaloTrigger+;
 #pragma link C++ class AliAnalysisTaskPHOSExample+;
 #pragma link C++ class AliAnaExample+;
 #pragma link C++ class AliAnaPhoton+;
@@ -17,8 +16,6 @@
 #pragma link C++ class AliAnaParticleJetFinderCorrelation+;
 #pragma link C++ class AliAnaParticleJetLeadingConeCorrelation+;
 #pragma link C++ class AliAnaCalorimeterQA+;
-#pragma link C++ class AliAnaElectron+;
-#pragma link C++ class AliAnaBtag+;
 #pragma link C++ class AliAnaShowerParameter+;
 #pragma link C++ class AliAnalysisTaskTaggedPhotons+;
 #pragma link C++ class AliAnaOmegaToPi0Gamma+;
diff --git a/PWG4/PartCorrDep/AliAnaBtag.cxx b/PWG4/PartCorrDep/AliAnaBtag.cxx
deleted file mode 100644 (file)
index 196bd69..0000000
+++ /dev/null
@@ -1,997 +0,0 @@
-/**************************************************************************\r
- * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *\r
- *                                                                        *\r
-* Author: The ALICE Off-line Project.                                    *\r
- * Contributors are mentioned in the code where appropriate.              *\r
- *                                                                        *\r
- * Permission to use, copy, modify and distribute this software and its   *\r
- * documentation strictly for non-commercial purposes hereby granted      *\r
- * without fee, provided that the above copyright notice appears in all   *\r
- * copies and that both the copyright notice and this permission notice   *\r
- * appear in the supporting documentation. The authors make no claims     *\r
- * about the suitability of this software for any purpose. It is          *\r
- * provided "as is" without express or implied warranty.                  *\r
- **************************************************************************/\r
-/* $Id: $ */\r
-\r
-//_________________________________________________________________________\r
-//\r
-// Class for the electron identification and B-tagging.\r
-// Clusters from EMCAL matched to tracks to id electrons.\r
-// Btagger is run on all electrons, then jets are tagged as well.\r
-// \r
-//\r
-// -- Author: T.R.P.Aronsson (Yale), M. Heinz (Yale)\r
-//////////////////////////////////////////////////////////////////////////////\r
-  \r
-#include <TH2F.h>\r
-#include <TH3F.h>\r
-#include <TParticle.h>\r
-#include <TNtuple.h>\r
-#include <TClonesArray.h>\r
-\r
-#include "AliAnaBtag.h" \r
-#include "AliCaloTrackReader.h"\r
-#include "AliMCAnalysisUtils.h"\r
-#include "AliVCluster.h"\r
-#include "AliFiducialCut.h"\r
-#include "AliAODTrack.h"\r
-#include "AliAODPid.h"\r
-#include "AliCaloPID.h"\r
-#include "AliAODMCParticle.h"\r
-#include "AliStack.h"\r
-#include "AliExternalTrackParam.h"\r
-#include "AliESDv0.h"\r
-#include "AliESDtrack.h"\r
-#include "AliAODJet.h"\r
-#include "AliAODEvent.h"\r
-#include "AliGenPythiaEventHeader.h"\r
-ClassImp(AliAnaBtag)\r
-  \r
-//____________________________________________________________________________\r
-AliAnaBtag::AliAnaBtag() \r
-: AliAnaPartCorrBaseClass(),\r
-  fWriteNtuple(0),electrons(0),pairs(0),events(0),fEventNumber(0),fNElec(0),fNElecEv(0),fNPair(0),fDrCut(0.),fPairDcaCut(0.),fDecayLenCut(0.),fImpactCut(0.),\r
-  fAssocPtCut(0.),fMassCut(0.),fSdcaCut(0.),fITSCut(0),\r
-  fNTagTrkCut(0),fIPSigCut(0.),fJetEtaCut(0.3),fJetPhiMin(1.8),fJetPhiMax(2.9),\r
-  fhEmcalElectrons(0),fhTRDElectrons(0),fhTPCElectrons(0),fhEmcalMCE(0),fhTRDMCE(0),fhTPCMCE(0),fhEmcalMCEFake(0),fhTRDMCEFake(0),fhTPCMCEFake(0),fhEmcalMCP(0),fhTRDMCP(0),fhTPCMCP(0),fhEmcalMCK(0),fhTRDMCK(0),fhTPCMCK(0),fhSpecies(0),fhDVM1(0),fhDVM2(0),fhNVTX(0),fhNVTXMC(0),fhJets(0),fhJetsAllEtaPhi(0),fhJetsLeadingBElectronEtaPhi(0),fhDVM1EtaPhi(0),fhBJetElectronDetaDphi(0),fhClusterMap(0),fhClusterEnergy(0),fhTestalle(0),fhResidual(0),fhPairPt(0),fhElectrons(0),fhTracks(0)\r
-{\r
-  //default ctor\r
-  //Initialize parameters\r
-  InitParameters();\r
-\r
-}\r
-\r
-//____________________________________________________________________________\r
-AliAnaBtag::~AliAnaBtag() \r
-{\r
-  //dtor\r
-\r
-}\r
-\r
-\r
-//________________________________________________________________________\r
-TList *  AliAnaBtag::GetCreateOutputObjects()\r
-{  \r
-  // Create histograms to be saved in output file and \r
-  // store them in outputContainer\r
-  TList * outputContainer = new TList() ; \r
-  outputContainer->SetName("ElectronHistos") ; \r
-\r
-  if(fWriteNtuple){\r
-    electrons = new TNtuple("electrons","Electron Ntuple","electronnumber:eventnumber:electronineventnumber:pairs:start:stop:tpc:trd:emc:mcpdg:parentbit:btag:pt");\r
-    outputContainer->Add(electrons);\r
-\r
-    pairs = new TNtuple("pairs","Pair Ntuple","pairnumber:electronnumber:eventnumber:pdca:sdca:minv:pth:massphoton:decaylength");\r
-    outputContainer->Add(pairs);\r
-\r
-    events = new TNtuple("events","Event NTuple","event");\r
-    outputContainer->Add(events);\r
-  }\r
-  \r
-  fhEmcalElectrons = new TH1F("fhEmcalElectrons","",400,0,400);\r
-  outputContainer->Add(fhEmcalElectrons);\r
-  \r
-  fhTRDElectrons = new TH1F("fhTRDElectrons","",400,0,400);\r
-  outputContainer->Add(fhTRDElectrons);\r
-  \r
-  fhTPCElectrons = new TH1F("fhTPCElectrons","",400,0,400);\r
-  outputContainer->Add(fhTPCElectrons);\r
-  \r
-  fhNVTX = new TH1F("fhNVTX","",20,0,20);\r
-  outputContainer->Add(fhNVTX);\r
-\r
-  fhDVM1 = new TH1F("fhDVM1","",400,0,400);\r
-  outputContainer->Add(fhDVM1);\r
-  \r
-  fhDVM2 = new TH1F("fhDVM2","",400,0,400);\r
-  outputContainer->Add(fhDVM2);\r
-  \r
-  if(IsDataMC()){\r
-    fhEmcalMCE = new TH1F("fhEmcalMCE","",400,0,400);\r
-    outputContainer->Add(fhEmcalMCE);\r
-    \r
-    fhTRDMCE = new TH1F("fhTRDMCE","",400,0,400);\r
-    outputContainer->Add(fhTRDMCE);\r
-    \r
-    fhTPCMCE = new TH1F("fhTPCMCE","",400,0,400);\r
-    outputContainer->Add(fhTPCMCE);\r
-    \r
-    fhEmcalMCEFake = new TH1F("fhEmcalMCEFake","",400,0,400);\r
-    outputContainer->Add(fhEmcalMCEFake);\r
-    \r
-    fhTRDMCEFake = new TH1F("fhTRDMCEFake","",400,0,400);\r
-    outputContainer->Add(fhTRDMCEFake);\r
-    \r
-    fhTPCMCEFake = new TH1F("fhTPCMCEFake","",400,0,400);\r
-    outputContainer->Add(fhTPCMCEFake);\r
-    \r
-    fhEmcalMCP = new TH1F("fhEmcalMCP","",400,0,400);\r
-    outputContainer->Add(fhEmcalMCP);\r
-    \r
-    fhTRDMCP = new TH1F("fhTRDMCP","",400,0,400);\r
-    outputContainer->Add(fhTRDMCP);\r
-    \r
-    fhTPCMCP = new TH1F("fhTPCMCP","",400,0,400);\r
-    outputContainer->Add(fhTPCMCP);\r
-    \r
-    fhEmcalMCK = new TH1F("fhEmcalMCK","",400,0,400);\r
-    outputContainer->Add(fhEmcalMCK);\r
-    \r
-    fhTRDMCK = new TH1F("fhTRDMCK","",400,0,400);\r
-    outputContainer->Add(fhTRDMCK);\r
-    \r
-    fhTPCMCK = new TH1F("fhTPCMCK","",400,0,400);\r
-    outputContainer->Add(fhTPCMCK);\r
-    \r
-    fhSpecies  = new TH1F("fhSpecies","",1000,0,1000);\r
-    outputContainer->Add(fhSpecies);\r
-    \r
-    fhNVTXMC = new TH1F("fhNVTXMC","",20,0,20);\r
-    outputContainer->Add(fhNVTXMC);\r
-  }\r
-  \r
-\r
-  fhJets = new TH2F("fhJets","",400,0,400,20,0,20);\r
-  outputContainer->Add(fhJets);\r
-  \r
-  fhJetsAllEtaPhi = new TH2F("fhJetsAllEtaPhi","",100,-2,2,100,-2,8);\r
-  outputContainer->Add(fhJetsAllEtaPhi);\r
-  \r
-  fhJetsLeadingBElectronEtaPhi = new TH2F("fhJetsLeadingBElectronEtaPhi","",100,-5,5,200,-10,10);\r
-  outputContainer->Add(fhJetsLeadingBElectronEtaPhi);\r
-  \r
-  fhDVM1EtaPhi = new TH2F("fhDVM1EtaPhi","",100,-2,2,100,-2,8);\r
-  outputContainer->Add(fhDVM1EtaPhi);\r
-  \r
-  fhBJetElectronDetaDphi = new TH2F("fhBJetElectronDetaDphi","",100,-5,5,200,-10,10);\r
-  outputContainer->Add(fhBJetElectronDetaDphi);\r
-  \r
-  fhClusterMap = new TH2F("fhClusterMap","",100,-2,2,100,-2,8);\r
-  outputContainer->Add(fhClusterMap);\r
-  \r
-  fhClusterEnergy = new TH1F("fhClusterEnergy","",100,0,10);\r
-  outputContainer->Add(fhClusterEnergy);\r
-  \r
-  fhTestalle = new TH1F("fhTestalle","",400,0,400);\r
-  outputContainer->Add(fhTestalle);\r
-  \r
-  fhResidual = new TH1F("fhResidual","",500,0,5);\r
-  outputContainer->Add(fhResidual);\r
-\r
-  fhPairPt = new TH1F("fhPairPt","",400,0,400);\r
-  outputContainer->Add(fhPairPt);\r
-  \r
-  fhElectrons = new TH2F("fhElectrons","",200,0,100,20,0,20);\r
-  outputContainer->Add(fhElectrons);\r
-  \r
-  fhTracks = new TH2F("fhTracks","",200,0,100,20,0,20);\r
-  outputContainer->Add(fhTracks);\r
-    \r
-  return outputContainer ; \r
-}\r
-\r
-//____________________________________________________________________________\r
-void AliAnaBtag::Init()\r
-{\r
-  //do some initialization\r
-    printf("Rubbish init step AliAnaBtag::Init()");\r
-}\r
-\r
-\r
-//____________________________________________________________________________\r
-void AliAnaBtag::InitParameters()\r
-{ \r
-  //Initialize the parameters of the analysis.\r
-  SetOutputAODClassName("AliAODPWG4Particle");\r
-  SetOutputAODName("PWG4Particle");\r
-  //AddToHistogramsName("");\r
-  //DVM B-tagging\r
-  fDrCut       = 1.0; \r
-  fPairDcaCut  = 0.02;\r
-  fDecayLenCut = 1.0;\r
-  fImpactCut   = 0.5;\r
-  fAssocPtCut  = 1.0;\r
-  fMassCut     = 1.5;\r
-  fSdcaCut     = 0.1;\r
-  fITSCut      = 4;\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
-void  AliAnaBtag::MakeAnalysisFillAOD() \r
-{\r
-  fEventNumber++;\r
-  fNElecEv=0;\r
-  if(fWriteNtuple)\r
-    events->Fill(fEventNumber);\r
-  \r
-  //This reads in tracks, extrapolates to EMCAL, does p/E selectrons, identifies electron candidates\r
-  //After candidates are obtained, btagging and saving into AOD.\r
-  AliStack *stack =0x0;\r
-  //Double_t bfield = 0.;\r
-  if(GetDebug()>0) printf("AliAnaBtag::MakeAnalysisFillAOD() - Write ntuple flag is %d \n",fWriteNtuple);\r
-  //if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) bfield = GetReader()->GetBField();\r
-  TObjArray *cl = GetEMCALClusters();\r
-  \r
-  if(!GetCTSTracks() || GetCTSTracks()->GetEntriesFast() == 0) return ;\r
-  Int_t ntracks = GetCTSTracks()->GetEntriesFast();\r
-  if(GetDebug() > 0)\r
-    printf("AliAnaBtag::MakeAnalysisFillAOD() - In CTS aod entries %d\n", ntracks);\r
-  \r
-  Int_t iCluster = -999;\r
-  Int_t ntot = cl->GetEntriesFast();\r
-  \r
-  //CLUSTER STUFF \r
-  for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
-    AliVCluster * clus = (AliVCluster*) (cl->At(iclus));\r
-    if(!clus) continue;\r
-    fhClusterEnergy->Fill(clus->E());\r
-    Float_t xclus[3];\r
-    clus->GetPosition(xclus);\r
-    TVector3 cluspos(xclus[0],xclus[1],xclus[2]);\r
-    \r
-    fhClusterMap->Fill(cluspos.Eta(),cluspos.Phi());\r
-  }\r
-  \r
-  \r
-  \r
-  for (Int_t itrk =  0; itrk <  ntracks; itrk++) {////////////// track loop\r
-    iCluster = -999; //start with no match\r
-    AliAODTrack * track = (AliAODTrack*) (GetCTSTracks()->At(itrk)) ;\r
-    if(track->GetLabel()<0){\r
-      if(GetDebug()>0)\r
-        printf("Negative track label, aborting!\n");\r
-      continue;\r
-    }\r
-    Double_t imp[2] = {-999.,-999.}; Double_t cov[3] = {-999.,-999.,-999.};\r
-    Bool_t dcaOkay = GetDCA(track,imp,cov);  //homegrown dca calculation until AOD is fixed\r
-    if(!dcaOkay&&GetDebug()>0) printf("AliAnaBtag::FillAOD - Problem computing DCA to primary vertex for track %d.  Skipping it...\n",itrk);\r
-    fhTracks->Fill(track->Pt(),1);\r
-    \r
-    if(track->Pt()<0)\r
-      continue;\r
-    \r
-    AliAODPid* pid = (AliAODPid*) track->GetDetPid();\r
-    if(pid == 0) {\r
-      if(GetDebug() > 0) printf("AliAnaBtag::MakeAnalysisFillAOD() - No PID object - skipping track %d",itrk);\r
-      continue;\r
-    } \r
-    else {\r
-      Double_t emcpos[3];\r
-      pid->GetEMCALPosition(emcpos);\r
-      Double_t emcmom[3];\r
-      pid->GetEMCALMomentum(emcmom);\r
-      \r
-      TVector3 pos(emcpos[0],emcpos[1],emcpos[2]);\r
-      TVector3 mom(emcmom[0],emcmom[1],emcmom[2]);\r
-      Double_t tphi = pos.Phi();\r
-      Double_t teta = pos.Eta();\r
-      Double_t tmom = mom.Mag();\r
-      \r
-      Bool_t in = kFALSE;\r
-      if(track->Phi()*180./TMath::Pi() > 80. && track->Phi()*180./TMath::Pi() < 190. &&\r
-         track->Eta() > -0.7 && track->Eta() < 0.7) in = kTRUE;\r
-      \r
-      \r
-      Double_t dEdx = pid->GetTPCsignal();\r
-      Int_t pidProb = track->GetMostProbablePID();\r
-      Bool_t tpcEle = kFALSE; if(dEdx > 70.) tpcEle = kTRUE;\r
-      Bool_t trkEle = kFALSE; if(pidProb == AliAODTrack::kElectron) trkEle = kTRUE;\r
-      Bool_t emcEle = kFALSE;   \r
-      \r
-      \r
-      \r
-      \r
-      ////////////////////////////////////////////////EMCAL//////////////////////\r
-      if(mom.Pt() > 1.0 && in) {\r
-        fhTracks->Fill(track->Pt(),3);\r
-        Double_t res = 999.;\r
-        Double_t pOverE = -999.;\r
-        \r
-        //Track Matching parameters\r
-        double minRes=100.;\r
-        Double_t minR  = 99;\r
-        Double_t minPe =-1;\r
-        Double_t minEp =-1;\r
-        Double_t minMult = -1;\r
-        Double_t minPt   = -1;\r
-        \r
-        for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
-          AliVCluster * clus = (AliVCluster*) (cl->At(iclus));\r
-          if(!clus) continue;\r
-          \r
-          // new optimized from ben. 2010May\r
-          if (clus->GetNCells()       < 2    ) continue;\r
-          if (clus->GetNCells()       > 35   ) continue;\r
-          if (clus->E()               < 0 ) continue;\r
-          if (clus->GetDispersion()   > 1.08    ) continue;\r
-          if (clus->GetM20()          > 0.42  ) continue;\r
-          if (clus->GetM02()          > 0.4  ) continue;\r
-          if (clus->GetM20()          < 0 ) continue;\r
-          if (clus->GetM02()          < 0.06 ) continue;\r
-          \r
-          \r
-          Float_t x[3];\r
-          clus->GetPosition(x);\r
-          TVector3 cluspos(x[0],x[1],x[2]);\r
-          Double_t deta = teta - cluspos.Eta();\r
-          Double_t dphi = tphi - cluspos.Phi();\r
-          if(dphi > TMath::Pi()) dphi -= 2*TMath::Pi();\r
-          if(dphi < -TMath::Pi()) dphi += 2*TMath::Pi();\r
-          \r
-          res = sqrt(dphi*dphi + deta*deta);\r
-          if(res<minRes)  minRes=res;      \r
-          \r
-          if(res < 0.0275) { // { //Optimized from Ben\r
-            iCluster = iclus;\r
-            Double_t energy = clus->E(); \r
-            if(energy > 0) pOverE = tmom/energy;\r
-            if (res< minR) {\r
-              minR  = res;\r
-              minPe = pOverE;\r
-              minEp = energy/tmom;\r
-              minMult = clus->GetNCells() ;\r
-              minPt = track->Pt();\r
-            }\r
-          } else {\r
-            //unmatched\r
-          }//res cut\r
-          \r
-        }//calo cluster loop\r
-        fhResidual->Fill(minRes);\r
-        \r
-        if(minPe > 0.9 && minPe < 1.08) emcEle = kTRUE;//      if(minPe > fpOverEmin && minPe < fpOverEmax) emcEle = kTRUE;\r
-       \r
-      }//pt, fiducial selection = EMCAL ////////////////////END EMCAL/////////////////////////\r
-      \r
-      \r
-      \r
-      \r
-      ////////////////////////////////////////////////////Electrons/////////////////////     \r
-      if(emcEle ||tpcEle || trkEle) { //Obsolete (kinda...)\r
-        fhTestalle->Fill(track->Pt());\r
-        \r
-        //B-tagging\r
-        if(GetDebug() > 1) printf("Found Electron - do b-tagging\n");\r
-        Int_t pairs1=0,start=0,stop=0;\r
-        Int_t dvmbtag = GetDVMBtag(track,pairs1,start,stop); //add: get back #pairs, start stop in pair-Ntuple.\r
-        if(GetDebug() > 0) printf("AliAnaBtag::MakeAnalysisFillAOD -  Analyze, got back result from dvm: pair counts: pairs: %d, start %d, stop %d. \n",pairs1,start,stop);\r
-        fhNVTX->Fill(dvmbtag);\r
-        \r
-        if(dvmbtag>0){\r
-          fhDVM1->Fill(track->Pt());\r
-          fhDVM1EtaPhi->Fill(track->Eta(),track->Phi());           \r
-        }\r
-        if(dvmbtag>1)\r
-          fhDVM2->Fill(track->Pt());\r
-        \r
-        //Create particle to save in AOD///////////// Purpose of this is the AODJets needs to check against this.\r
-        Double_t eMass = 0.511/1000; //mass in GeV\r
-        Double_t eleE = sqrt(track->P()*track->P() + eMass*eMass);\r
-        AliAODPWG4Particle tr = AliAODPWG4Particle(track->Px(),track->Py(),track->Pz(),eleE);\r
-        tr.SetLabel(track->GetLabel());\r
-        tr.SetCaloLabel(iCluster,-1); //sets the indices of the original caloclusters\r
-        tr.SetTrackLabel(track->GetID(),-1); //sets the indices of the original tracks tr.SetTrackLabel(track->GetID(),-1) instead of itrk;\r
-        tr.SetBtag(dvmbtag);\r
-        if(track->Charge() < 0) tr.SetPdg(11); //electron is 11\r
-        else  tr.SetPdg(-11); //positron is -11        \r
-        \r
-        //Set detector flags\r
-        Int_t emcflag=0,tpcflag=0,trdflag=0;\r
-        if(emcEle){\r
-          fhEmcalElectrons->Fill(track->Pt());\r
-          emcflag=1;}\r
-        if(trkEle){\r
-          fhTRDElectrons->Fill(track->Pt());\r
-          trdflag=1;}\r
-        if(tpcEle){\r
-          fhTPCElectrons->Fill(track->Pt());\r
-          tpcflag=1;}\r
-        \r
-        if(emcEle) {//PID determined by EMCAL\r
-          tr.SetDetector("EMCAL");\r
-        } else {\r
-          tr.SetDetector("CTS"); //PID determined by CTS\r
-        }\r
-        \r
-        \r
-        /////////////////////////MC stuff////////////////////////////////////////////////\r
-        Int_t pdg = 0;\r
-        if(IsDataMC()){\r
-          stack=GetMCStack();\r
-          if(!stack) {printf("AliAnaBtag::MakeAnalysisFillHistograms() - Crap, no stack: \n");\r
-          }\r
-          else{\r
-            //Is it really an electron?\r
-            TParticle *partX = stack->Particle(TMath::Abs(track->GetLabel()));\r
-            pdg = partX->GetPdgCode();\r
-            fhSpecies->Fill(TMath::Abs(pdg));\r
-            if(TMath::Abs(pdg)==11){ //Check MC electrons\r
-              if(emcEle)\r
-                fhEmcalMCE->Fill(track->Pt());\r
-              if(trkEle)\r
-                fhTRDMCE->Fill(track->Pt());\r
-              if(tpcEle)\r
-                fhTPCMCE->Fill(track->Pt());\r
-            }else{ //Fake histos!\r
-              if(emcEle)\r
-                fhEmcalMCEFake->Fill(track->Pt());\r
-              if(trkEle)\r
-                fhTRDMCEFake->Fill(track->Pt());\r
-              if(tpcEle)\r
-                fhTPCMCEFake->Fill(track->Pt());\r
-            }\r
-            if(TMath::Abs(pdg)==211){ //Check MC pions\r
-              if(emcEle)\r
-                fhEmcalMCP->Fill(track->Pt());\r
-              if(trkEle)\r
-                fhTRDMCP->Fill(track->Pt());\r
-              if(tpcEle)\r
-                fhTPCMCP->Fill(track->Pt());\r
-            }\r
-            if(TMath::Abs(pdg)==321){ //Check MC Kaons\r
-              if(emcEle)\r
-                fhEmcalMCK->Fill(track->Pt());\r
-              if(trkEle)\r
-                fhTRDMCK->Fill(track->Pt());\r
-              if(tpcEle)\r
-                fhTPCMCK->Fill(track->Pt());\r
-            }\r
-          }\r
-          \r
-          //Take care of where it came from (parent bit)\r
-          tr.SetTag(GetMCAnalysisUtils()->CheckOrigin(tr.GetLabel(),GetReader(),tr.GetInputFileIndex())); //Gets a tag bit which contains info about super grandfather particle. Use (tag&(1<<11)), 11 for direct b, and 9 for B->C\r
-          \r
-          if(tr.GetTag()&(1<<9)||tr.GetTag()&(1<<11)) //MC particle from b-decay\r
-            fhNVTXMC->Fill(dvmbtag);\r
-          \r
-          if(fWriteNtuple){\r
-            fNElec++;\r
-            fNElecEv++;\r
-            electrons->Fill(fNElec,fEventNumber,fNElecEv,pairs1,start,stop,tpcflag,trdflag,emcflag,pdg,tr.GetTag(),tr.GetBtag(),tr.Pt());\r
-            \r
-            \r
-          }\r
-          \r
-          if(GetDebug() > 0) \r
-            printf("AliAnaBtag::MakeAnalysisFillAOD() - Origin of candidate (parent bit) %d\n",tr.GetTag());\r
-        }//MonteCarlo MC done\r
-        \r
-        AddAODParticle(tr);            \r
-      }//electron\r
-      \r
-    } //pid check\r
-  }//track loop                         \r
-  if(GetDebug() > 1) printf("AliAnaBtag::MakeAnalysisFillAOD()  End fill AODs \n");  \r
-  \r
-}\r
-\r
-//__________________________________________________________________\r
-void  AliAnaBtag::MakeAnalysisFillHistograms() \r
-{\r
-  //Do analysis and fill histograms\r
-  AliStack * stack = 0x0;\r
-  //   TParticle * primary = 0x0;\r
-  if(IsDataMC()) {\r
-    if(GetReader()->ReadStack()){\r
-      stack =  GetMCStack() ;      \r
-      if(!stack)\r
-        printf("AliAnaBtag::MakeAnalysisFillHistograms() *** no stack ***: \n");   \r
-    }\r
-  }// is data and MC\r
-  \r
-\r
-  double maxjetEta=-4.;\r
-  double maxjetPhi=-4.;\r
-  \r
-  Int_t njets = 0; \r
-  if(GetReader()->GetOutputEvent()) njets = (GetReader()->GetOutputEvent())->GetNJets();\r
-  if(njets > 0) {\r
-    if(GetDebug() > 0) printf("AliAnaBtag::MakeAnalysisFillHistograms() - Jet AOD branch has %d jets.  Performing b-jet tag analysis\n",njets);\r
-    \r
-    ///////////////////////////////////Jet loop//////////////////////////////////////////////\r
-    for(Int_t ijet = 0; ijet < njets ; ijet++) {\r
-      AliAODJet * jet = (AliAODJet*)(GetReader()->GetOutputEvent())->GetJet(ijet) ;\r
-      fhJets->Fill(jet->Pt(),1);                                                                                ////////////////FILL\r
-      fhJetsAllEtaPhi->Fill(jet->Eta(),jet->Phi());\r
-      if(jet->Pt() < 0.) continue; //This has to be adjusted depending on pp or AA!\r
-      \r
-      //Geometric EMCAL cut\r
-      if(TMath::Abs(jet->Eta()) > 0.3) continue;\r
-      if(jet->Phi() < 1.8 || jet->Phi() > 2.9) continue; //This is BAD FIXME \r
-      fhJets->Fill(jet->Pt(),4); //All jets after geometric cut                                                 ////////////////FILL\r
-      \r
-      Bool_t leadJet  = kFALSE;\r
-      if (ijet==0) {leadJet= kTRUE; fhJets->Fill(jet->Pt(),5);} //Leading jets                                   ////////////////FILL\r
-      \r
-      /////////////////////////Track loop in Jet////////////////////////////////////\r
-      Bool_t dvmJet = kFALSE; \r
-      Bool_t dvmMCJet = kFALSE; \r
-      TRefArray* rt = jet->GetRefTracks();\r
-      Int_t ntrk = rt->GetEntries();\r
-      \r
-      for(Int_t itrk = 0; itrk < ntrk; itrk++) {\r
-       AliAODTrack* jetTrack = (AliAODTrack*)jet->GetTrack(itrk);\r
-       \r
-       Int_t trackId = jetTrack->GetID(); //get the index in the reader\r
-       Int_t naod = GetOutputAODBranch()->GetEntriesFast();\r
-       if(GetDebug() > 3) printf("AliAnaBtag::CheckIfBjet() - aod branch entries %d\n", naod);\r
-       \r
-       for(Int_t iaod = 0; iaod < naod ; iaod++){\r
-         AliAODPWG4Particle* ele =  (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));\r
-         Int_t electronlabel = ele->GetTrackLabel(0);\r
-         if(electronlabel != trackId) continue;  //skip to the next one if they don't match\r
-         if(ele->GetBtag()>0){\r
-           dvmJet = kTRUE;\r
-           if(ele->GetTag()&(1<<9) || ele->GetTag()&(1<<11) )\r
-             dvmMCJet = kTRUE;\r
-         }\r
-       } //Electron check\r
-       \r
-      }//Track loop of jet tracks\r
-      \r
-      if(dvmJet) fhJets->Fill(jet->Pt(),6);                                                                      ////////////////FILL\r
-      //MC stuff\r
-      if(IsDataMC()) {\r
-        Bool_t isTrueBjet = IsMcBJet(jet->Eta(), jet->Phi());\r
-        //Bool_t isTrueDjet = IsMcDJet(jet->Eta(), jet->Phi());\r
-       if(dvmJet){\r
-         if(dvmMCJet){\r
-           fhJets->Fill(jet->Pt(),8);   //True                                                                   ////////////////FILL\r
-         }else{\r
-           fhJets->Fill(jet->Pt(),9);   //False                                                                 ////////////////FILL\r
-         }\r
-         if(isTrueBjet){ \r
-           fhJets->Fill(jet->Pt(),10);     //True                                                                 ////////////////FILL\r
-         }else{\r
-           fhJets->Fill(jet->Pt(),11);     //False                                                                ////////////////FILL\r
-         }\r
-       }\r
-       if(isTrueBjet){ \r
-         fhJets->Fill(jet->Pt(),12);     //True                                                                 ////////////////FILL\r
-       }else{\r
-         fhJets->Fill(jet->Pt(),13);     //False                                                                ////////////////FILL\r
-       }\r
-\r
-      }//MC stuff\r
-\r
-    }//jet loop\r
-  } //jets exist\r
-  \r
-  //Electron loop, read back electrons, fill histos; mostly photonic shit.\r
-  Int_t naod = GetOutputAODBranch()->GetEntriesFast();\r
-  if(GetDebug() > 0) printf("AliAnaBtag::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod);\r
-  \r
-  for(Int_t iaod = 0; iaod < naod ; iaod++){\r
-    AliAODPWG4Particle* ele =  (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));\r
-    Int_t pdg = ele->GetPdg();\r
-    \r
-    \r
-    if(TMath::Abs(pdg) != AliCaloPID::kElectron) continue; //not necessary..\r
-    \r
-    //MC tag of this electron\r
-    //    Int_t mctag = ele->GetTag();\r
-    \r
-    \r
-    fhElectrons->Fill(ele->Pt(),1); //All electrons\r
-    Bool_t photonic = kFALSE;\r
-    photonic = PhotonicV0(ele->GetTrackLabel(0)); //check against V0s\r
-    if(!photonic) fhElectrons->Fill(ele->Pt(),3); //nonphotonic electrons\r
-    if(photonic) fhElectrons->Fill(ele->Pt(),4);  //photonic electrons\r
-    \r
-    //Fill electron histograms \r
-    Float_t phiele = ele->Phi();\r
-    Float_t etaele = ele->Eta();\r
-    \r
-    \r
-    if(ele->GetBtag()>0){ // removed bit tag shit\r
-      fhElectrons->Fill(ele->Pt(),5);\r
-      if(!photonic) fhElectrons->Fill(ele->Pt(),6);\r
-      if(photonic) fhElectrons->Fill(ele->Pt(),7);\r
-      fhJetsLeadingBElectronEtaPhi->Fill(maxjetEta,maxjetPhi); \r
-      double deta=etaele-maxjetEta;\r
-      double dphi=phiele-maxjetPhi;\r
-      \r
-      //double r = sqrt((dphi*dphi)+(deta*deta));\r
-      fhBJetElectronDetaDphi->Fill(deta,dphi);\r
-      \r
-    }\r
-    \r
-  }//electron aod loop\r
-  \r
-}\r
-\r
-//__________________________________________________________________\r
-Int_t AliAnaBtag::GetDVMBtag(AliAODTrack * tr, Int_t &pair, Int_t &start, Int_t &stop)\r
-{\r
-  //This method uses the Displaced Vertex between electron-hadron\r
-  //pairs and the primary vertex to determine whether an electron is\r
-  //likely from a B hadron.\r
-  Int_t pairstart = fNPair;\r
-  Int_t pairstop = 0;\r
-  Int_t pairn = 0;\r
-  Int_t ncls1 = 0;\r
-  for(Int_t l = 0; l < 6; l++) if(TESTBIT(tr->GetITSClusterMap(),l)) ncls1++;\r
-\r
-  if (ncls1 < fITSCut) return 0;\r
-\r
-  Double_t imp[2] = {-999.,-999.}; Double_t cov[3] = {-999.,-999.,-999.};\r
-  Bool_t dcaOkay = GetDCA(tr,imp,cov);  //homegrown dca calculation until AOD is fixed                  \r
-  if(!dcaOkay) {\r
-    printf("AliAnaBtag::GetDVMBtag - Problem computing DCA to primary vertex for track %d",tr->GetID());\r
-    return 0;\r
-  }\r
-\r
-  if (TMath::Abs(imp[0])   > fImpactCut ) return 0;\r
-  if (TMath::Abs(imp[1])   > fImpactCut ) return 0;\r
-\r
-  Int_t nvtx = 0;\r
-//   Int_t nvtx2 = 0;\r
-//   Int_t nvtx3 = 0;\r
-\r
-  for (Int_t k2 =0; k2 < GetCTSTracks()->GetEntriesFast() ; k2++) {\r
-\r
-    //loop over assoc\r
-    AliAODTrack* track2 = (AliAODTrack*)GetCTSTracks()->At(k2);\r
-    Int_t id1 = tr->GetID();\r
-    Int_t id2 = track2->GetID();\r
-    if(id1 == id2) continue;\r
-\r
-    Int_t ncls2 = 0;\r
-    for(Int_t l = 0; l < 6; l++) if(TESTBIT(track2->GetITSClusterMap(),l)) ncls2++;\r
-    if (ncls2 < fITSCut) continue;\r
-\r
-\r
-    Double_t sdca=0,pdca=0,minv=0,pth=0,massphoton=0,decaylength=0;\r
-\r
-    sdca = ComputeSignDca(tr,track2,minv,pdca,massphoton,decaylength);\r
-    pth=track2->Pt();\r
-\r
-\r
-\r
-\r
-    Double_t dphi = tr->Phi() - track2->Phi();\r
-    if(dphi > TMath::Pi()) dphi -= 2*TMath::Pi();\r
-    if(dphi < -TMath::Pi()) dphi += 2*TMath::Pi();\r
-    Double_t deta = tr->Eta() - track2->Eta();\r
-    Double_t dr = sqrt(deta*deta + dphi*dphi);\r
-\r
-    if(dr > fDrCut) continue;\r
-    fNPair++;\r
-    pairn++;\r
-    if(GetDebug() > 0) \r
-      printf("pairs: %d !!!!!!!!!!! \n",fNPair);\r
-    if(fWriteNtuple){\r
-      pairs->Fill(fNPair,fNElec,fEventNumber,pdca,sdca,minv,pth,massphoton,decaylength);\r
-    }\r
-    pairstop=fNPair;\r
-    //pairs->Fill(1,1,1,1,1,1,1);\r
-    fhPairPt->Fill(pth);\r
-    if(decaylength>1.0) continue;\r
-    if(tr->Pt()<6. && pth>0.4 && minv>1.4 && pdca<0.025 && sdca>0.06 && massphoton>0.1) nvtx++; \r
-    if(tr->Pt()>6.&&tr->Pt()<10. && pth>0.2 && minv>1.7 && pdca<0.012 && sdca>0.06 && massphoton>0.1) nvtx++;\r
-    if(tr->Pt()>10.&& pth>0.6 && minv>1.5 && pdca<0.14 && sdca>0.04 && massphoton>0.1) nvtx++;\r
-\r
-\r
-\r
-  } //loop over hadrons\r
-\r
-  if(GetDebug() > 0) printf("AliAnaBtag::GetDVMBtag - result of btagging: %d \n",nvtx);\r
-\r
-\r
-  pair=pairn;\r
-  start=pairstart+1;\r
-  stop=pairstop;\r
-  if(GetDebug() > 0) printf("End of DVM, pair counts: pairs: %d, start %d, stop %d. \n",pair,start,stop);\r
-  return nvtx;\r
-}\r
-\r
-//__________________________________________________________________\r
-Double_t AliAnaBtag::ComputeSignDca(AliAODTrack *tr, AliAODTrack *tr2 , Double_t &masscut, Double_t &pdcacut, Double_t &massphoton, Double_t &decay)\r
-{\r
-  //Compute the signed dca between two tracks\r
-  //and return the result\r
-\r
-  Double_t signDca=-999.;\r
-  if(GetDebug() > 2 ) printf(">>ComputeSdca:: track1 %d, track2 %d, masscut %f \n", tr->GetLabel(), tr2->GetLabel(), masscut);\r
-\r
-  //=====Now calculate DCA between both tracks=======  \r
-  Double_t massE = 0.000511;\r
-  Double_t massK = 0.493677;\r
-  Double_t vertex[3] = {-999.,-999.,-999}; //vertex\r
-\r
-  if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) {\r
-    GetVertex(vertex); //If only one file, get the vertex from there  \r
-  }\r
-  \r
-  TVector3 primV(vertex[0],vertex[1],vertex[2]) ; \r
-  if(GetDebug()>0) printf(">>ComputeSdca:: primary vertex = %2.2f,%2.2f,%2.2f \n",vertex[0],vertex[1],vertex[2]) ;\r
-\r
-  AliExternalTrackParam *param1 = new AliExternalTrackParam(tr);\r
-  AliExternalTrackParam *param2 = new AliExternalTrackParam(tr2);\r
-\r
-  Double_t bfield[3];\r
-  param1->GetBxByBz(bfield);\r
-  bfield[0]=0;\r
-  bfield[1]=0;\r
-  bfield[2]=5.;\r
-  Double_t bz = 5.; // = param1->GetBz();\r
-  Double_t xplane1 = 0.; Double_t xplane2 = 0.;\r
-  Double_t pairdca = param1->GetDCA(param2,bz,xplane1,xplane2);\r
-\r
-  param1->PropagateToBxByBz(xplane1,bfield);\r
-  param2->PropagateToBxByBz(xplane2,bfield);\r
-\r
-  Int_t id1 = 0, id2 = 0;\r
-  AliESDv0 bvertex(*param1,id1,*param2,id2);\r
-  Double_t vx,vy,vz;\r
-  bvertex.GetXYZ(vx,vy,vz);\r
-\r
-  Double_t emom[3];\r
-  Double_t hmom[3];\r
-  param1->PxPyPz(emom);\r
-  param2->PxPyPz(hmom);\r
-  TVector3 emomAtB(emom[0],emom[1],emom[2]);\r
-  TVector3 hmomAtB(hmom[0],hmom[1],hmom[2]);\r
-  TVector3 secvtxpt(vx,vy,vz);\r
-  TVector3 decayvector(0,0,0);\r
-  decayvector = secvtxpt - primV; //decay vector from PrimVtx\r
-  Double_t decaylength = decayvector.Mag();\r
-  decay=decaylength;\r
-\r
-  if(GetDebug() > 0) {\r
-    printf(">>ComputeSdca:: mom1=%f, mom2=%f \n", emomAtB.Perp(), hmomAtB.Perp() );\r
-    printf(">>ComputeSdca:: pairDCA=%f, length=%f \n", pairdca,decaylength );\r
-  }\r
-\r
-  if (emomAtB.Mag()>0 /*&& decaylength < fDecayLenCut*/ ) {\r
-    TVector3 sumMom = emomAtB+hmomAtB;\r
-    Double_t ener1 = sqrt(pow(emomAtB.Mag(),2) + massE*massE);\r
-    Double_t ener2 = sqrt(pow(hmomAtB.Mag(),2) + massK*massK);\r
-    Double_t ener3 = sqrt(pow(hmomAtB.Mag(),2) + massE*massE);\r
-    Double_t mass = sqrt(pow((ener1+ener2),2) - pow(sumMom.Mag(),2));\r
-    Double_t massPhot = sqrt(pow((ener1+ener3),2) - pow(sumMom.Mag(),2));\r
-    Double_t sDca = decayvector.Dot(emomAtB)/emomAtB.Mag();\r
-    pdcacut=pairdca;//\r
-    masscut=mass; // \r
-    massphoton=massPhot;//                                                                     Send it back!\r
-    signDca = sDca;\r
-    if(GetDebug() > 0) printf("\t>>ComputeSdca:: mass=%f \n", mass);\r
-    if(GetDebug() > 0) printf("\t>>ComputeSdca:: sec vtx-signdca :%f\n",signDca);\r
-  }\r
-  //clean up\r
-  delete param1;\r
-  delete param2;\r
-  return signDca;\r
-}\r
-\r
-\r
-//__________________________________________________________________\r
-Bool_t AliAnaBtag::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
-  Bool_t itIS = kFALSE;\r
-  Double_t massEta = 0.547;\r
-  Double_t massRho0 = 0.770;\r
-  Double_t massOmega = 0.782;\r
-  Double_t massPhi = 1.020;\r
-  \r
-  //---Get V0s---\r
-  AliAODEvent *aod = (AliAODEvent*) GetReader()->GetInputEvent();\r
-  int nv0s = aod->GetNumberOfV0s();\r
-  for (Int_t iV0 = 0; iV0 < nv0s; iV0++) {\r
-    AliAODv0 *v0 = aod->GetV0(iV0);\r
-    if (!v0) continue;\r
-    double radius = v0->RadiusV0();\r
-    double mass = v0->InvMass2Prongs(0,1,11,11);\r
-    if(GetDebug() > 0) {\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
-       (mass > massEta-0.05 || mass < massEta+0.05) ||\r
-       (mass > massRho0-0.05 || mass < massRho0+0.05) ||\r
-       (mass > massOmega-0.05 || mass < massOmega+0.05) ||\r
-       (mass > massPhi-0.05 || mass < massPhi+0.05)) {\r
-      if ( id == v0->GetNegID() || id == v0->GetPosID()) {\r
-       itIS=kTRUE;\r
-       if(GetDebug() > 0) printf("## PhotonicV0() :: It's a conversion electron!!! \n" );\r
-      }\r
-    } }\r
-  return itIS;\r
-}\r
-\r
-//__________________________________________________________________\r
-Bool_t AliAnaBtag::GetDCA(const AliAODTrack* track,Double_t impPar[2], Double_t cov[3]) \r
-{\r
-  //Use the Event vertex and AOD track information to get\r
-  //a real impact parameter for the track\r
-  Double_t maxD = 100000.; //max transverse IP\r
-  if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) {\r
-    AliVEvent* ve = (AliVEvent*)GetReader()->GetInputEvent();\r
-    AliVVertex *vv = (AliVVertex*)ve->GetPrimaryVertex();\r
-    AliESDtrack esdTrack(track);\r
-    Double_t bfield[3];\r
-    esdTrack.GetBxByBz(bfield);\r
-    bfield[0]=0;\r
-    bfield[1]=0;\r
-    bfield[2]=5.;\r
-    \r
-    Bool_t gotit = esdTrack.PropagateToDCABxByBz(vv,bfield,maxD,impPar,cov);\r
-    return gotit;\r
-  }\r
-  return kFALSE;\r
-}\r
-//__________________________________________________________________\r
-Bool_t AliAnaBtag::CheckIfBjet(const AliAODTrack* track)\r
-{\r
-  Bool_t bjet = kFALSE;\r
-  Int_t trackId = track->GetID(); //get the index in the reader\r
-  Int_t naod = GetOutputAODBranch()->GetEntriesFast();\r
-  if(GetDebug() > 3) printf("AliAnaBtag::CheckIfBjet() - aod branch entries %d\n", naod);\r
-\r
-  for(Int_t iaod = 0; iaod < naod ; iaod++){\r
-    AliAODPWG4Particle* ele =  (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));\r
-    Int_t electronlabel = ele->GetTrackLabel(0);\r
-    if(electronlabel != trackId) continue;  //skip to the next one if they don't match\r
-    if(ele->GetBtag()>0)\r
-      bjet = kTRUE;\r
-  } \r
-\r
-  return bjet;\r
-} \r
-\r
-//__________________________________________________________________\r
-AliAODMCParticle* AliAnaBtag::GetMCParticle(Int_t ipart) \r
-{\r
-  //Get the MC particle at position ipart\r
-  \r
-  AliAODMCParticle* aodprimary = 0x0;\r
-  TClonesArray * mcparticles0 = 0x0;\r
-  \r
-  if(GetReader()->ReadAODMCParticles()){\r
-    //Get the list of MC particles                                                                                                                           \r
-    mcparticles0 = GetReader()->GetAODMCParticles(0);\r
-    if(!mcparticles0) {\r
-      if(GetDebug() > 0)printf("AliAnaBtag::MakeAnalysisFillHistograms() -  Standard MCParticles not available!\n");\r
-    }\r
-    else{\r
-      Int_t npart0 = mcparticles0->GetEntriesFast();\r
-      if(ipart < npart0) aodprimary = (AliAODMCParticle*)mcparticles0->At(ipart);\r
-      \r
-      if(!aodprimary) {\r
-        printf("AliAnaBtag::GetMCParticle() *** no primary ***:  label %d \n", ipart);\r
-        return 0x0;\r
-      }\r
-    }\r
-  } else {\r
-    printf("AliAnaBtag::GetMCParticle() - Asked for AliAODMCParticle but we have a stack reader.\n");\r
-  }\r
-  return aodprimary;\r
-}\r
-\r
-//__________________________________________________________________\r
-Bool_t  AliAnaBtag::IsMcBJet(Double_t jeta, Double_t jphi)\r
-{\r
-  //Check the jet eta,phi against that of the b-quark\r
-  //to decide whether it is an MC B-jet\r
-  Bool_t bjet=kFALSE;\r
-  AliStack* stack = 0x0;\r
-  \r
-  for(Int_t ipart = 0; ipart < 100; ipart++) {\r
-\r
-    Double_t pphi = -999.;\r
-    Double_t peta = -999.;\r
-    Int_t pdg = 0;\r
-    if(GetReader()->ReadStack()) {\r
-      stack = GetMCStack();\r
-      if(!stack) {\r
-       printf("AliAnaBtag::IsMCBJet() *** no stack ***: \n");\r
-       return kFALSE;\r
-      }\r
-      TParticle* primary = stack->Particle(ipart);\r
-      if (!primary) continue;\r
-      pdg = primary->GetPdgCode();\r
-      pphi = primary->Phi();\r
-      peta = primary->Eta();\r
-    } else if(GetReader()->ReadAODMCParticles()) {\r
-      AliAODMCParticle* aodprimary = GetMCParticle(ipart);\r
-      if(!aodprimary) continue;\r
-      pdg = aodprimary->GetPdgCode();\r
-      pphi = aodprimary->Phi();\r
-      peta = aodprimary->Eta();\r
-    }\r
-    if ( TMath::Abs(pdg) != 5) continue;\r
-    Double_t dphi = jphi - pphi;\r
-    Double_t deta = jeta - peta;\r
-    Double_t dr = sqrt(deta*deta + dphi*dphi);\r
-    \r
-    if (dr < 0.2) {\r
-      bjet=kTRUE;\r
-      break;\r
-    }\r
-  }\r
-  return bjet;\r
-}\r
-\r
-//__________________________________________________________________\r
-Bool_t  AliAnaBtag::IsMcDJet(Double_t jeta, Double_t jphi)\r
-{\r
-  //Check if this jet is a charm jet\r
-  Bool_t cjet=kFALSE;\r
-\r
-  AliStack* stack = 0x0;\r
-\r
-  for(Int_t ipart = 0; ipart < 100; ipart++) {\r
-    \r
-    Double_t pphi = -999.;\r
-    Double_t peta = -999.;\r
-    Int_t pdg = 0;\r
-    if(GetReader()->ReadStack()) {\r
-      stack = GetMCStack();\r
-      if(!stack) {\r
-       printf("AliAnaBtag::IsMCDJet() *** no stack ***: \n");\r
-       return kFALSE;\r
-      }\r
-      TParticle* primary = stack->Particle(ipart);\r
-      if (!primary) continue;\r
-      pdg = primary->GetPdgCode();\r
-      pphi = primary->Phi();\r
-      peta = primary->Eta();\r
-    } else if(GetReader()->ReadAODMCParticles()) {\r
-      AliAODMCParticle* aodprimary = GetMCParticle(ipart);\r
-      if(!aodprimary) continue;\r
-      pdg = aodprimary->GetPdgCode();\r
-      pphi = aodprimary->Phi();\r
-      peta = aodprimary->Eta();\r
-    }\r
-\r
-    if ( TMath::Abs(pdg) != 4) continue;\r
-    Double_t dphi = jphi - pphi;\r
-    Double_t deta = jeta - peta;\r
-    Double_t dr = sqrt(deta*deta + dphi*dphi);\r
-   \r
-    if (dr < 0.2) {\r
-      cjet=kTRUE;\r
-      break;\r
-    }\r
-  }\r
-  return cjet;\r
-}\r
-\r
-\r
-//__________________________________________________________________\r
-void  AliAnaBtag::Terminate(TList* outputList)\r
-{\r
-  printf(" AliAnaBtag::Terminate()  *** %s Report: %d outputs/histograms \n", GetName(), outputList->GetEntries()) ;\r
-}\r
diff --git a/PWG4/PartCorrDep/AliAnaBtag.h b/PWG4/PartCorrDep/AliAnaBtag.h
deleted file mode 100644 (file)
index 4101e83..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#ifndef ALIANABTAG_H\r
-#define ALIANABTAG_H\r
-/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *\r
- * See cxx source for full Copyright notice     */\r
-/* $Id:  $ */\r
-\r
-//_________________________________________________________________________\r
-//\r
-// Class for the electron identification and B-tagging.\r
-// Clusters from EMCAL matched to tracks are selected \r
-// and kept in the AOD. Few histograms produced.\r
-//\r
-\r
-//-- Author T.R.P-R.Aronsson\r
-\r
-// --- ROOT system ---\r
-class TH2F ;\r
-class TString ;\r
-class TNtuple ;\r
-class TH3F;\r
-\r
-// --- ANALYSIS system ---\r
-#include "AliAnaPartCorrBaseClass.h"\r
-\r
-class AliAODMCParticle;\r
-class AliCaloTrackReader;\r
-class AliAODTrack;\r
-class TList ;\r
-\r
-class AliAnaBtag : public AliAnaPartCorrBaseClass {\r
-\r
-public: \r
-  AliAnaBtag() ; // default ctor\r
-  virtual ~AliAnaBtag() ; //virtual dtor\r
-private:\r
-       AliAnaBtag(const AliAnaBtag & g) ; // cpy ctor\r
-       AliAnaBtag & operator = (const AliAnaBtag & g) ;//cpy assignment\r
-       \r
-public:\r
-       \r
-  TList *  GetCreateOutputObjects();\r
-\r
-  //Main functions\r
-  void Init();\r
-  void MakeAnalysisFillAOD()  ;\r
-  void MakeAnalysisFillHistograms() ; \r
-  \r
-  //B-tagging\r
-  Int_t GetDVMBtag(AliAODTrack * tr, Int_t &pairs, Int_t &start, Int_t &stop);//Main tagger\r
-\r
-  //Temporary local method to get DCA\r
-  Bool_t GetDCA(const AliAODTrack* tr,Double_t imp[2], Double_t cov[3]);\r
-  Bool_t PhotonicV0(Int_t trackId); //check with V0 list\r
-\r
-  //used with the jet tracks to tag bjets\r
-  Bool_t CheckIfBjet(const AliAODTrack* track);\r
-  Bool_t IsMcBJet(Double_t x, Double_t y);\r
-  Bool_t IsMcDJet(Double_t x, Double_t y);\r
-\r
-\r
-\r
-  Double_t GetDrCut() const { return fDrCut; }\r
-  Double_t GetPairDcaCut() const { return fPairDcaCut; }\r
-  Double_t GetDecayLenCut() const { return fDecayLenCut; }\r
-  Double_t GetImpactCut() const { return fImpactCut; }\r
-  Double_t GetAssocPtCut() const { return fAssocPtCut; }\r
-  Double_t GetMassCut() const { return fMassCut; }\r
-  Double_t GetSdcaCut() const { return fSdcaCut; }\r
-  Int_t    GetITSCut() const { return fITSCut; }\r
-  Int_t    GetNTagTrackCut() const { return fNTagTrkCut; }\r
-  Double_t GetIPSigCut() const { return fIPSigCut; }\r
-\r
-\r
-  void SetWriteNtuple(Int_t w) { fWriteNtuple = w; }\r
-  void SetDrCut(Double_t dr)  { fDrCut = dr; }\r
-  void SetPairDcaCut(Double_t pdca) { fPairDcaCut = pdca; }\r
-  void SetDecayLenCut(Double_t dlen) { fDecayLenCut = dlen; }\r
-  void SetImpactCut(Double_t imp) { fImpactCut = imp; }\r
-  void SetAssocPtCut(Double_t pt) { fAssocPtCut = pt; }\r
-  void SetMassCut(Double_t mass) { fMassCut = mass; }\r
-  void SetSdcaCut(Double_t sdca) { fSdcaCut = sdca; }\r
-  void SetITSCut(Int_t its) { fITSCut = its; }\r
-  void SetNTagTrackCut(Int_t ntr) { fNTagTrkCut = ntr; }\r
-  void SetIPSigCut(Double_t ips) { fIPSigCut = ips; }\r
-\r
-\r
-  void InitParameters();\r
-  void Terminate(TList * outputList);\r
-         \r
-  private:\r
-  //For DVM B-tag method\r
-  Double_t ComputeSignDca(AliAODTrack *tr, AliAODTrack *tr2 , Double_t &masscut, Double_t &pdcacut, Double_t &massphoton, Double_t &decay);\r
-\r
-  AliAODMCParticle* GetMCParticle(Int_t part);\r
-\r
-\r
-  private:\r
-  //NTuples!\r
-  Int_t fWriteNtuple;    //Will always be no, but might be set to yes in config file.\r
-  TNtuple * electrons;   //Electrons\r
-  TNtuple * pairs;       //Pairs to the electrons\r
-  TNtuple * events;\r
-  Int_t fEventNumber;    // For Ntuple to label events (starts at 0)\r
-  Int_t fNElec;\r
-  Int_t fNElecEv;\r
-  Int_t fNPair;\r
-\r
-  //DVM B-tagging\r
-  Double_t fDrCut;       //max dR\r
-  Double_t fPairDcaCut;  //max pair-DCA\r
-  Double_t fDecayLenCut; //max 3d-decaylength\r
-  Double_t fImpactCut;   //max track impact param\r
-  Double_t fAssocPtCut;  //min associated pt\r
-  Double_t fMassCut;     //min Minv cut\r
-  Double_t fSdcaCut;     //min signDca\r
-  Int_t   fITSCut;       //min ITS hits (both)\r
-  //IP Sig B-tagging\r
-  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
-  \r
-  \r
-  //Histograms\r
-  TH1F * fhEmcalElectrons;              //All electrons, as id:ed by EMCAL\r
-  TH1F * fhTRDElectrons;                //Electrons from TRD\r
-  TH1F * fhTPCElectrons;                //Electrons from TPC\r
-  TH1F * fhEmcalMCE;                    //All electrons, as id:ed by EMCAL MC\r
-  TH1F * fhTRDMCE;                      //Electrons from TRD MC\r
-  TH1F * fhTPCMCE;                      //Electrons from TPC MC\r
-  TH1F * fhEmcalMCEFake;                //All electrons, as id:ed by EMCAL MC, fake\r
-  TH1F * fhTRDMCEFake;                  //Electrons from TRD MC, fake\r
-  TH1F * fhTPCMCEFake;                  //Electrons from TPC MC, fake\r
-  TH1F * fhEmcalMCP;                    //Pions, as id:ed by EMCAL\r
-  TH1F * fhTRDMCP;                      //Pions from TRD\r
-  TH1F * fhTPCMCP;                      //Pions from TPC\r
-  TH1F * fhEmcalMCK;                    //Kaons from EMCAL\r
-  TH1F * fhTRDMCK;                      //Kaons from TRD\r
-  TH1F * fhTPCMCK;                      //Kaons from TPC\r
-  TH1F * fhSpecies;                     //PDG of id:ed electrons\r
-  TH1F * fhDVM1;                        //initial b-tag dvm1\r
-  TH1F * fhDVM2;                        //initial b-tag dvm2 \r
-  TH1F * fhNVTX;                        //NVtx of all btags \r
-  TH1F * fhNVTXMC;                        //NVtx of MC btags \r
-  TH2F * fhJets;                        //All jets 2d\r
-  TH2F * fhJetsAllEtaPhi;               //Eta phi for all jets\r
-  TH2F * fhJetsLeadingBElectronEtaPhi;  //deta dphi btw leading jet and bele\r
-  TH2F * fhDVM1EtaPhi;                  //eta phi for b-electrons\r
-  TH2F * fhBJetElectronDetaDphi;        //eta phi for jet with b-electrons\r
-  TH2F * fhClusterMap;                  //2D eta-phi of EMCAL clusters\r
-  TH1F * fhClusterEnergy;               //cluster E of EMCAL\r
-  TH1F * fhTestalle;                                   //Temp histo for EMCAL cluster energy\r
-  TH1F * fhResidual;                    //Residuals from trackmatching\r
-  TH1F * fhPairPt;                      //Pairs\r
-\r
-\r
-  //Analysis of electrons\r
-  TH2F * fhElectrons;\r
-  //Analysis for tracks from esd/aod\r
-  TH2F * fhTracks;\r
-\r
-\r
-  ClassDef(AliAnaBtag,2)\r
-\r
-} ;\r
\r
-\r
-#endif//ALIANABTAG_H\r
-\r
-\r
-\r
diff --git a/PWG4/PartCorrDep/AliAnaCaloTrigger.cxx b/PWG4/PartCorrDep/AliAnaCaloTrigger.cxx
deleted file mode 100755 (executable)
index 596abb3..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-
-//_________________________________________________________________________
-// An analysis task to check the trigger data in ESD
-// Creates an ntuple for 2x2 and NxN triggers
-// Each ntuple connects the maximum trigger amplitudes 
-// and its positions with reconstructed clusters
-// and if MC stack available, with pt of parent.
-//
-//*-- Yves Schutz (CERN) & Gustavo Conesa Balbastre (INFN-LNF)
-//////////////////////////////////////////////////////////////////////////////
-//Root
-#include <TNtuple.h>
-#include <TVector3.h> 
-
-//Aliroot
-#include "AliAnaCaloTrigger.h" 
-#include "AliStack.h"
-#include "AliESDCaloCluster.h"
-#include "AliMCEvent.h"
-#include "AliESDEvent.h"
-
-//______________________________________________________________________________
-AliAnaCaloTrigger::AliAnaCaloTrigger() :  
-  fOutputContainer(0),
-  fCalorimeter("PHOS"),
-  fNtTrigger22(0), 
-  fNtTriggerNN(0)
-{
-  // Default Constructor.
-
-}
-
-//______________________________________________________________________________
-AliAnaCaloTrigger::AliAnaCaloTrigger(const char *name) : 
-  AliAnalysisTaskSE(name),  
-  fOutputContainer(0),
-  fCalorimeter("PHOS"),
-  fNtTrigger22(0), 
-  fNtTriggerNN(0)
-{
-  // Constructor.
-  // Output slot 
-  DefineOutput(1,  TList::Class()) ; 
-}
-
-//____________________________________________________________________________
-AliAnaCaloTrigger::AliAnaCaloTrigger(const AliAnaCaloTrigger & ct) : 
-  AliAnalysisTaskSE(ct.GetName()),
-  fOutputContainer(ct.fOutputContainer), fCalorimeter(ct. fCalorimeter),
-  fNtTrigger22(ct.fNtTrigger22), fNtTriggerNN(ct.fNtTriggerNN)
-{
-
-  // cpy ctor
-   
-}
-
-//_________________________________________________________________________
-AliAnaCaloTrigger & AliAnaCaloTrigger::operator = (const AliAnaCaloTrigger & source)
-{
-  // assignment operator
-  
-  //if(&source == this) return *this;
-  this->~AliAnaCaloTrigger();
-  new(this) AliAnaCaloTrigger(source);
-
-  fOutputContainer = source.fOutputContainer ;
-  fCalorimeter = source. fCalorimeter ;
-  fNtTrigger22 = source.fNtTrigger22 ;
-  fNtTriggerNN = source.fNtTriggerNN ;
-
-  return *this;
-  
-}
-
-//______________________________________________________________________________
-AliAnaCaloTrigger::~AliAnaCaloTrigger()
-{
-  // dtor
-  if(fOutputContainer){
-    fOutputContainer->Clear() ; 
-    delete fOutputContainer ;
-  }
-}
-
-
-//________________________________________________________________________
-
-void AliAnaCaloTrigger::UserCreateOutputObjects()
-{  
-
-  // Create the outputs containers
-  OpenFile(1) ;
-
-  // create histograms 
-  fNtTrigger22 = new TNtuple(fCalorimeter+"trigger22", "Trigger data 2x2 patch", "a22:a220:ptGen:enMax:phEnMax:eta22:phi22:etaMax:phiMax:phEtaMax:phPhiMax");
-  fNtTriggerNN = new TNtuple(fCalorimeter+"triggerNN", "Trigger data NxN patch", "aNN:aNN0:ptGen:enMax:phEnMax:etaNN:phiNN:etaMax:phiMax:phEtaMax:phPhiMax");
-  
-  // create output container
-  
-  fOutputContainer = new TList() ; 
-  fOutputContainer->SetName(GetName()) ; 
-  
-  fOutputContainer->AddAt(fNtTrigger22,             0) ; 
-  fOutputContainer->AddAt(fNtTriggerNN,             1) ; 
-
-}
-
-//______________________________________________________________________________
-void AliAnaCaloTrigger::UserExec(Option_t *) 
-{
-  // Processing of one event
-  
-  if ( !((Entry()-1)%100) ) 
-    printf(" Processing event # %lld\n",  Entry()) ; 
-//  AliESDEvent* esd = 0x0;
-//  esd = (AliESDEvent*)InputEvent();
-//  
-//  //Get MC data, if available
-//  AliStack* stack = 0x0; 
-//  if(MCEvent())
-//    stack = MCEvent()->Stack();
-  
-  // // Get trigger information of fCalorimeter 
-  // TArrayF * triggerAmplitudes = 0x0 ;
-  // TArrayF * triggerPosition   = 0x0 ;
-  // Int_t numberOfCaloClusters  =  esd->GetNumberOfCaloClusters() ;
-  
-  // if(fCalorimeter == "PHOS"){
-  //   triggerAmplitudes      = esd->GetPHOSTriggerAmplitudes();
-  //   triggerPosition        = esd->GetPHOSTriggerPosition();
-  // }
-  // else if(fCalorimeter == "EMCAL"){
-  //   triggerAmplitudes    = esd->GetEMCALTriggerAmplitudes();
-  //   triggerPosition      = esd->GetEMCALTriggerPosition();
-  // }
-  
-  // if( triggerAmplitudes && triggerPosition ){
-  //   // trigger amplitudes
-  //   const Float_t ka22    = static_cast<Float_t>(triggerAmplitudes->At(0)) ; 
-  //   const Float_t ka22O   = static_cast<Float_t>(triggerAmplitudes->At(1)) ; 
-  //   const Float_t kaNN    = static_cast<Float_t>(triggerAmplitudes->At(2)) ; 
-  //   const Float_t kaNNO   = static_cast<Float_t>(triggerAmplitudes->At(3)) ; 
-    
-  //   // trigger position
-  //   const Float_t kx22  =  static_cast<Float_t>(triggerPosition->At(0)) ; 
-  //   const Float_t ky22  =  static_cast<Float_t>(triggerPosition->At(1)) ;
-  //   const Float_t kz22  =  static_cast<Float_t>(triggerPosition->At(2)) ;
-  //   const Float_t kxNN  =  static_cast<Float_t>(triggerPosition->At(3)) ; 
-  //   const Float_t kyNN  =  static_cast<Float_t>(triggerPosition->At(4)) ;
-  //   const Float_t kzNN  =  static_cast<Float_t>(triggerPosition->At(5)) ; 
-    
-  //   //printf("ka22 %f, ka220 %f, kaNN %f, kaNN0 %f\n",ka22,ka22O,kaNN,kaNNO);
-  //   //printf("kx22 %f, ky22 %f, kz22 %f, kxNN %f, kyNN %f, kzNN %f \n",kx22,ky22,kz22,kxNN,kyNN,kzNN);
-    
-  //   Float_t enMax       = 0. ;
-  //   Float_t phEnMax     = 0. ;
-  //   Float_t etaMax      = 0.5 ;
-  //   Float_t phiMax      = 0. ; 
-  //   Float_t phEtaMax    = 0.5 ;
-  //   Float_t phPhiMax    = 0. ; 
-    
-  //   TVector3 vpos22(kx22, ky22, kz22) ;
-  //   TVector3 vposNN(kxNN, kyNN, kzNN) ;
-  //   Float_t eta22 = vpos22.Eta() ; 
-  //   Float_t phi22 = vpos22.Phi() * TMath::RadToDeg() + 360. ; 
-  //   Float_t etaNN = vposNN.Eta() ; 
-  //   Float_t phiNN = vposNN.Phi() * TMath::RadToDeg() + 360. ; 
-    
-    
-  //   Int_t      icaloCluster = 0 ; 
-  //   Int_t      labelmax     = -1 ;
-  //   // loop over the Calorimeters Clusters
-    
-  //   for(icaloCluster = 0 ; icaloCluster < numberOfCaloClusters ; icaloCluster++) {
-      
-  //     AliESDCaloCluster * cluster = esd->GetCaloCluster(icaloCluster) ;
-      
-  //     if (cluster && ( (fCalorimeter == "PHOS" && cluster->IsPHOS())  ||  
-  //                  (fCalorimeter == "EMCAL" && cluster->IsEMCAL()))) {
-       
-  //   Float_t cluEnergy = cluster->E() ; 
-  //   Float_t pos[3] ;
-  //   TVector3 vpos ;
-       
-  //   cluster->GetPosition( pos ) ;
-       
-  //   if ( cluEnergy > enMax) { 
-  //     enMax    = cluEnergy ; 
-  //     vpos.SetXYZ(pos[0], pos[1], pos[2]) ; 
-  //     etaMax   = vpos.Eta() ; 
-  //     phiMax   = vpos.Phi() ; 
-  //     labelmax = cluster->GetLabel();
-  //   }
-       
-  //   const Double_t * pid = cluster->GetPID() ;
-       
-  //   if(pid[AliPID::kPhoton] > 0.9) {
-  //     if ( cluEnergy > phEnMax) { 
-  //       phEnMax   = cluEnergy ; 
-  //       vpos.SetXYZ(pos[0], pos[1], pos[2]) ; 
-  //       phEtaMax = vpos.Eta() ; 
-  //       phPhiMax = vpos.Phi() ; 
-  //     }
-  //   }
-  //     }//if cluster
-      
-  //     Float_t ptGen = -1;
-  //     if(stack && labelmax < stack->GetNtrack() && labelmax >= 0 ){
-  //   TParticle * particle = stack->Particle(labelmax); 
-  //   ptGen = particle->Energy();
-  //     }
-      
-  //     fNtTrigger22->Fill(ka22, ka22O, ptGen, enMax, phEnMax, eta22, phi22, etaMax, phiMax * TMath::RadToDeg() + 360., phEtaMax, phPhiMax * TMath::RadToDeg() + 360.);
-  //     fNtTriggerNN->Fill(kaNN, kaNNO, ptGen, enMax, phEnMax, etaNN, phiNN, etaMax, phiMax * TMath::RadToDeg() + 360., phEtaMax, phPhiMax * TMath::RadToDeg() + 360.);
-      
-  //   }//CaloCluster loop
-    
-  // }//If trigger arrays filled
-  
-  PostData(1, fOutputContainer);
-  
-}
-
-//______________________________________________________________________________
-//void AliAnaCaloTrigger::Terminate(Option_t *) const
-//{
-//  // Processing when the event loop is ended
-//
-//}
diff --git a/PWG4/PartCorrDep/AliAnaCaloTrigger.h b/PWG4/PartCorrDep/AliAnaCaloTrigger.h
deleted file mode 100755 (executable)
index 7c1a660..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef ALIANACALOTRIGGER_H
-#define ALIANACALOTRIGGER_H
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice     */
-//______________________________________________________________________________
-// An analysis task to check the trigger data in ESD
-// Creates an ntuple for 2x2 and NxN triggers
-// Each ntuple connects the maximum trigger amplitudes 
-// and its positions with reconstructed clusters
-// and if MC stack available, with pt of parent.
-//
-//*-- Yves Schutz (CERN) & Gustavo Conesa Balbastre (INFN-LNF)
-//////////////////////////////////////////////////////////////////////////////
-
-
-#include "AliAnalysisTaskSE.h"  
-class TNtuple ;
-
-class AliESDEvent ; 
-
-class AliAnaCaloTrigger : public AliAnalysisTaskSE {
-
-public:
-  AliAnaCaloTrigger() ;
-  AliAnaCaloTrigger(const char *name) ;
-  AliAnaCaloTrigger(const AliAnaCaloTrigger & trig) ;
-  AliAnaCaloTrigger & operator=(const AliAnaCaloTrigger& source);
-  virtual ~AliAnaCaloTrigger() ;
-   
-  virtual void UserExec(Option_t * opt = "") ;
-  virtual void UserCreateOutputObjects();
-//  virtual void Terminate(Option_t * opt = "") const ;
-
-  TString GetCalorimeter()     const   {return fCalorimeter ; }
-  void    SetCalorimeter(TString calo) {fCalorimeter = calo ; }
-
-private:
-  TList * fOutputContainer ; //! output data container
-  TString fCalorimeter ; // "PHOS" or "EMCAL"
-
-  // Histograms
-  TNtuple * fNtTrigger22 ; //Ntuple with 2x2 max dig amplitude and cluster energy, and positions.
-  TNtuple * fNtTriggerNN ; //Ntuple with NxN max dig amplitude and cluster energy, and positions.
-
-  ClassDef(AliAnaCaloTrigger, 2); // a trigger analysis task 
-};
-#endif // ALIANACALOTRIGGER_H
diff --git a/PWG4/PartCorrDep/AliAnaElectron.cxx b/PWG4/PartCorrDep/AliAnaElectron.cxx
deleted file mode 100755 (executable)
index f1ac76b..0000000
+++ /dev/null
@@ -1,2068 +0,0 @@
-/**************************************************************************\r
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
- *                                                                        *\r
- * Author: The ALICE Off-line Project.                                    *\r
- * Contributors are mentioned in the code where appropriate.              *\r
- *                                                                        *\r
- * Permission to use, copy, modify and distribute this software and its   *\r
- * documentation strictly for non-commercial purposes hereby granted      *\r
- * without fee, provided that the above copyright notice appears in all   *\r
- * copies and that both the copyright notice and this permission notice   *\r
- * appear in the supporting documentation. The authors make no claims     *\r
- * about the suitability of this software for any purpose. It is          *\r
- * provided "as is" without express or implied warranty.                  *\r
- **************************************************************************/\r
-/* $Id: $ */\r
-\r
-//_________________________________________________________________________\r
-//\r
-// Class for the electron identification.\r
-// Clusters from EMCAL matched to tracks\r
-// and kept in the AOD. Few histograms produced.\r
-//\r
-// -- Author: J.L. Klay (Cal Poly), M. Heinz (Yale)\r
-//////////////////////////////////////////////////////////////////////////////\r
-  \r
-// --- ROOT system --- \r
-#include <TH2F.h>\r
-#include <TH3F.h>\r
-#include <TParticle.h>\r
-#include <TNtuple.h>\r
-#include <TClonesArray.h>\r
-#include <TObjString.h>\r
-//#include <Riostream.h>\r
-\r
-// --- Analysis system --- \r
-#include "AliAnaElectron.h" \r
-#include "AliCaloTrackReader.h"\r
-#include "AliMCAnalysisUtils.h"\r
-#include "AliVCluster.h"\r
-#include "AliFiducialCut.h"\r
-#include "AliAODTrack.h"\r
-#include "AliAODPid.h"\r
-#include "AliCaloPID.h"\r
-#include "AliAODMCParticle.h"\r
-#include "AliStack.h"\r
-#include "AliExternalTrackParam.h"\r
-#include "AliESDv0.h"\r
-#include "AliESDtrack.h"\r
-#include "AliAODJet.h"\r
-#include "AliAODEvent.h"\r
-#include "AliGenPythiaEventHeader.h"\r
-\r
-ClassImp(AliAnaElectron)\r
-  \r
-//____________________________________________________________________________\r
-AliAnaElectron::AliAnaElectron() \r
-: AliAnaPartCorrBaseClass(),fCalorimeter(""),\r
-  fpOverEmin(0.),fpOverEmax(0.),fResidualCut(0.),fMinClusEne(0.),\r
-  fDrCut(0.),fPairDcaCut(0.),fDecayLenCut(0.),fImpactCut(0.),\r
-  fAssocPtCut(0.),fMassCut(0.),fSdcaCut(0.),fITSCut(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
-  fh3pOverE(0),fh3EOverp(0),fh3pOverE2(0),fh3EOverp2(0),fh3pOverE3(0),fh3EOverp3(0),\r
-  fh2pOverE(0),fh2EOverp(0),fh2pOverE2(0),fh2EOverp2(0),\r
-  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
-  //Reconstructed electrons\r
-  fhPtElectron(0),fhPhiElectron(0),fhEtaElectron(0),\r
-  fhPtNPE(0),fhPhiNPE(0),fhEtaNPE(0),\r
-  fhPtPE(0),fhPhiPE(0),fhEtaPE(0),\r
-  //for comparisons with tracking detectors\r
-  fhPtHadron(0),fhPtNPEleTPC(0),fhPtNPEleTPCTRD(0),fhPtNPEleTTE(0),\r
-  fhPtNPEleEMCAL(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
-  fhePlusTagJetPt1x4(0),fhePlusTagJetPt2x3(0),fhePlusTagJetPt3x2(0),\r
-  //B-Jet histograms\r
-  fhJetType(0),fhLeadJetType(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
-  fhPtTrack(0),\r
-  fhPtNPEBHadron(0),\r
-  //for computing efficiency of B-jet tags\r
-  fhBJetPt1x4(0),fhBJetPt2x3(0),fhBJetPt3x2(0),\r
-  fhFakeJetPt1x4(0),fhFakeJetPt2x3(0),fhFakeJetPt3x2(0),fhDVMJet(0),\r
-  //MC rate histograms/ntuple\r
-  fMCEleNtuple(0),fhMCBJetElePt(0),fhMCBHadronElePt(0),fhPtMCHadron(0),fhPtMCElectron(0),\r
-  fhMCXYConversion(0),fhMCRadPtConversion(0)\r
-{\r
-  //default ctor\r
-  \r
-  //Initialize parameters\r
-  InitParameters();\r
-\r
-}\r
-/*\r
-//____________________________________________________________________________\r
-AliAnaElectron::AliAnaElectron(const AliAnaElectron & g) \r
-  : AliAnaPartCorrBaseClass(g),fCalorimeter(g.fCalorimeter),\r
-    fpOverEmin(g.fpOverEmin),fpOverEmax(g.fpOverEmax),\r
-    fResidualCut(g.fResidualCut),fMinClusEne(g.fMinClusEne),\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
-    fh3pOverE(g.fh3pOverE),fh3EOverp(g.fh3EOverp),\r
-    fh3pOverE2(g.fh3pOverE2),fh3EOverp2(g.fh3EOverp2),\r
-    fh3pOverE3(g.fh3pOverE3),fh3EOverp3(g.fh3EOverp3),\r
-    fh2pOverE(g.fh2pOverE),fh2EOverp(g.fh2EOverp),\r
-    fh2pOverE2(g.fh2pOverE2),fh2EOverp2(g.fh2EOverp2),\r
-    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
-    //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
-    //for comparisons with tracking detectors\r
-    fhPtHadron(g.fhPtHadron),fhPtNPEleTPC(g.fhPtNPEleTPC),\r
-    fhPtNPEleTPCTRD(g.fhPtNPEleTPCTRD),fhPtNPEleTTE(g.fhPtNPEleTTE),\r
-    fhPtNPEleEMCAL(g.fhPtNPEleEMCAL),\r
-    //DVM B-tagging\r
-    fhDVMBtagCut1(g.fhDVMBtagCut1),fhDVMBtagCut2(g.fhDVMBtagCut2),fhDVMBtagCut3(g.fhDVMBtagCut3),\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
-    fhePlusTagJetPt1x4(g.fhePlusTagJetPt1x4),fhePlusTagJetPt2x3(g.fhePlusTagJetPt2x3),\r
-    fhePlusTagJetPt3x2(g.fhePlusTagJetPt3x2),\r
-    //B-Jet histograms\r
-    fhJetType(g.fhJetType),fhLeadJetType(g.fhLeadJetType),fhBJetXsiFF(g.fhBJetXsiFF),\r
-    fhBJetPtFF(g.fhBJetPtFF),fhBJetEtaPhi(g.fhBJetEtaPhi),fhNonBJetXsiFF(g.fhNonBJetXsiFF),\r
-    fhNonBJetPtFF(g.fhNonBJetPtFF),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
-    fhPtTrack(g.fhPtTrack),\r
-    fhPtNPEBHadron(g.fhPtNPEBHadron),\r
-    //for computing efficiency of B-jet tags\r
-    fhBJetPt1x4(g.fhBJetPt1x4),fhBJetPt2x3(g.fhBJetPt2x3),\r
-    fhBJetPt3x2(g.fhBJetPt3x2),\r
-    fhFakeJetPt1x4(g.fhFakeJetPt1x4),fhFakeJetPt2x3(g.fhBJetPt2x3),\r
-    fhFakeJetPt3x2(g.fhFakeJetPt3x2),fhDVMJet(g.fhDVMJet),\r
-    //MC rate histograms/ntuple\r
-    fMCEleNtuple(g.fMCEleNtuple),fhMCBJetElePt(g.fhMCBJetElePt),\r
-    fhMCBHadronElePt(g.fhMCBHadronElePt),\r
-    fhPtMCHadron(g.fhPtMCHadron),fhPtMCElectron(g.fhPtMCElectron),\r
-    fhMCXYConversion(g.fhMCXYConversion),fhMCRadPtConversion(g.fhMCRadPtConversion)\r
-{\r
-  // cpy ctor\r
-  \r
-}\r
-\r
-//_________________________________________________________________________\r
-AliAnaElectron & AliAnaElectron::operator = (const AliAnaElectron & g)\r
-{\r
-  // assignment operator\r
-  \r
-  if(&g == this) return *this;\r
-  fCalorimeter = g.fCalorimeter;\r
-  fpOverEmin = g.fpOverEmin;\r
-  fpOverEmax = g.fpOverEmax;\r
-  fResidualCut = g.fResidualCut;\r
-  fMinClusEne = g.fMinClusEne;\r
-  fDrCut = g.fDrCut;\r
-  fPairDcaCut = g.fPairDcaCut;\r
-  fDecayLenCut = g.fDecayLenCut;\r
-  fImpactCut = g.fImpactCut;\r
-  fAssocPtCut = g.fAssocPtCut;\r
-  fMassCut = g.fMassCut;\r
-  fSdcaCut = g.fSdcaCut;\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
-  //event QA histos\r
-  fhImpactXY = g.fhImpactXY;\r
-  fhRefMult  = g.fhRefMult;\r
-  fhRefMult2 = g.fhRefMult2;\r
-  //matching checks\r
-  fh3pOverE  = g.fh3pOverE;\r
-  fh3EOverp  = g.fh3EOverp;\r
-  fh3pOverE2 = g.fh3pOverE2;\r
-  fh3EOverp2 = g.fh3EOverp2;\r
-  fh3pOverE3 = g.fh3pOverE3;\r
-  fh3EOverp3 = g.fh3EOverp3;\r
-  fh2pOverE  = g.fh2pOverE;\r
-  fh2EOverp  = g.fh2EOverp;\r
-  fh2pOverE2 = g.fh2pOverE2;\r
-  fh2EOverp2 = g.fh2EOverp2;\r
-  fh1dR     = g.fh1dR;\r
-  fh2EledEdx = g.fh2EledEdx;\r
-  fh2MatchdEdx = g.fh2MatchdEdx;\r
-  fh2dEtadPhi = g.fh2dEtadPhi;\r
-  fh2dEtadPhiMatched = g.fh2dEtadPhiMatched;\r
-  fh2dEtadPhiUnmatched = g.fh2dEtadPhiUnmatched;\r
-  fh2TrackPVsClusterE = g.fh2TrackPVsClusterE;\r
-  fh2TrackPtVsClusterE = g.fh2TrackPtVsClusterE;\r
-  fh2TrackPhiVsClusterPhi = g.fh2TrackPhiVsClusterPhi;\r
-  fh2TrackEtaVsClusterEta = g.fh2TrackEtaVsClusterEta;\r
-  //Photonic electron checks\r
-  fh1OpeningAngle = g.fh1OpeningAngle;\r
-  fh1MinvPhoton = g.fh1MinvPhoton;\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
-  fhPtPE = g.fhPtPE;\r
-  fhPhiPE = g.fhPhiPE;\r
-  fhEtaPE = g.fhEtaPE; \r
-  //for comparisons with tracking detectors\r
-  fhPtHadron = g.fhPtHadron; fhPtNPEleTPC = g.fhPtNPEleTPC; \r
-  fhPtNPEleTPCTRD = g.fhPtNPEleTPCTRD; fhPtNPEleTTE = g.fhPtNPEleTTE; \r
-  fhPtNPEleEMCAL = g.fhPtNPEleEMCAL; \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
-  //IPSig B-tagging\r
-  fhIPSigBtagQA1 = g.fhIPSigBtagQA1; \r
-  fhIPSigBtagQA2 = g.fhIPSigBtagQA2; \r
-  fhTagJetPt1x4 = g.fhTagJetPt1x4; \r
-  fhTagJetPt2x3 = g.fhTagJetPt2x3; \r
-  fhTagJetPt3x2 = g.fhTagJetPt3x2; \r
-  fhePlusTagJetPt1x4 = g.fhePlusTagJetPt1x4; \r
-  fhePlusTagJetPt2x3 = g.fhePlusTagJetPt2x3; \r
-  fhePlusTagJetPt3x2 = g.fhePlusTagJetPt3x2; \r
-  //B-Jet histograms\r
-  fhJetType = g.fhJetType; \r
-  fhLeadJetType = g.fhLeadJetType; \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
-  fhPtTrack = g.fhPtTrack;\r
-  fhPtNPEBHadron = g.fhPtNPEBHadron;\r
-  //for computing efficiency of B-jet tags\r
-  fhBJetPt1x4 = g.fhBJetPt1x4; fhBJetPt2x3 = g.fhBJetPt2x3; \r
-  fhBJetPt3x2 = g.fhBJetPt3x2;\r
-  fhFakeJetPt1x4 = g.fhFakeJetPt1x4; fhFakeJetPt2x3 = g.fhFakeJetPt2x3; \r
-  fhFakeJetPt3x2 = g.fhFakeJetPt3x2; fhDVMJet = g.fhDVMJet;\r
-  //MC rate histograms/ntuple\r
-  fMCEleNtuple = g.fMCEleNtuple; fhMCBJetElePt = g.fhMCBJetElePt; \r
-  fhMCBHadronElePt = g.fhMCBHadronElePt;\r
-  fhPtMCHadron = g.fhPtMCHadron; fhPtMCElectron = g.fhPtMCElectron; \r
-  fhMCXYConversion = g.fhMCXYConversion;\r
-  fhMCRadPtConversion = g.fhMCRadPtConversion;\r
-\r
-  return *this;\r
-  \r
-}\r
-*/\r
-\r
-//____________________________________________________________________________\r
-AliAnaElectron::~AliAnaElectron() \r
-{\r
-  //dtor\r
-\r
-}\r
-\r
-//________________________________________________________________________\r
-TObjString *  AliAnaElectron::GetAnalysisCuts()\r
-{\r
-       //Save parameters used for analysis\r
-        TString parList ; //this will be list of parameters used for this analysis.\r
-  const Int_t buffersize = 255; \r
-        char onePar[buffersize] ;\r
-        \r
-        snprintf(onePar,buffersize,"--- AliAnaElectron ---\n") ;\r
-        parList+=onePar ;      \r
-        snprintf(onePar,buffersize,"fCalorimeter: %s\n",fCalorimeter.Data()) ;\r
-        parList+=onePar ;  \r
-        snprintf(onePar,buffersize,"fpOverEmin: %f\n",fpOverEmin) ;\r
-        parList+=onePar ;  \r
-        snprintf(onePar,buffersize,"fpOverEmax: %f\n",fpOverEmax) ;\r
-        parList+=onePar ;  \r
-        snprintf(onePar,buffersize,"fResidualCut: %f\n",fResidualCut) ;\r
-        parList+=onePar ;  \r
-        snprintf(onePar,buffersize,"fMinClusEne: %f\n",fMinClusEne) ;\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"---DVM Btagging\n");\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"max IP-cut (e,h): %f\n",fImpactCut);\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"min ITS-hits: %d\n",fITSCut);\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"max dR (e,h): %f\n",fDrCut);\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"max pairDCA: %f\n",fPairDcaCut);\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"max decaylength: %f\n",fDecayLenCut);\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"min Associated Pt: %f\n",fAssocPtCut);\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"---IPSig Btagging\n");\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"min tag track: %d\n",fNTagTrkCut);\r
-        parList+=onePar ;\r
-        snprintf(onePar,buffersize,"min IP significance: %f\n",fIPSigCut);\r
-        parList+=onePar ;\r
-       //\r
-        //Get parameters set in base class.\r
-        parList += GetBaseParametersList() ;\r
-        \r
-        //Get parameters set in FiducialCut class (not available yet)\r
-        //parlist += GetFidCut()->GetFidCutParametersList() \r
-        \r
-        return new TObjString(parList) ;\r
-       \r
-}\r
-\r
-//________________________________________________________________________\r
-TList *  AliAnaElectron::GetCreateOutputObjects()\r
-{  \r
-  // Create histograms to be saved in output file and \r
-  // store them in outputContainer\r
-  TList * outputContainer = new TList() ; \r
-  outputContainer->SetName("ElectronHistos") ; \r
-\r
-  Int_t nptbins  = GetHistoPtBins();\r
-  Int_t nphibins = GetHistoPhiBins();\r
-  Int_t netabins = GetHistoEtaBins();\r
-  Float_t ptmax  = GetHistoPtMax();\r
-  Float_t phimax = GetHistoPhiMax();\r
-  Float_t etamax = GetHistoEtaMax();\r
-  Float_t ptmin  = GetHistoPtMin();\r
-  Float_t phimin = GetHistoPhiMin();\r
-  Float_t etamin = GetHistoEtaMin();   \r
-\r
-  //event QA\r
-  fhImpactXY = new TH1F("hImpactXY","Impact parameter for all tracks",200,-10,10.);\r
-  fhRefMult = new TH1F("hRefMult" ,"refmult QA: " ,5000,0,5000);\r
-  fhRefMult2  = new TH1F("hRefMult2" ,"refmult2 QA: " ,5000,0,5000);\r
-\r
-  outputContainer->Add(fhImpactXY);\r
-  outputContainer->Add(fhRefMult);\r
-  outputContainer->Add(fhRefMult2);\r
-  \r
-  //matching checks\r
-  fh3pOverE  = new TH3F("h3pOverE"    ,"EMCAL-TRACK matches p/E",nptbins,ptmin,ptmax,200,0.,10.,30,0,30);\r
-  fh3EOverp  = new TH3F("h3EOverp"    ,"EMCAL-TRACK matches E/p",nptbins,ptmin,ptmax,200,0.,5. ,30,0,30);\r
-  fh3pOverE2 = new TH3F("h3pOverE_Trk","EMCAL-TRACK matches p/E",nptbins,ptmin,ptmax,200,0.,10.,30,0,30);\r
-  fh3EOverp2 = new TH3F("h3EOverp_Trk","EMCAL-TRACK matches E/p",nptbins,ptmin,ptmax,200,0.,5. ,30,0,30);\r
-  fh3pOverE3 = new TH3F("h3pOverE_Tpc","EMCAL-TRACK matches p/E",nptbins,ptmin,ptmax,200,0.,10.,30,0,30);\r
-  fh3EOverp3 = new TH3F("h3EOverp_Tpc","EMCAL-TRACK matches E/p",nptbins,ptmin,ptmax,200,0.,5. ,30,0,30);\r
-  fh2pOverE  = new TH2F("h2pOverE"    ,"EMCAL-TRACK matches p/E",nptbins,ptmin,ptmax,200,0.,10.);\r
-  fh2EOverp  = new TH2F("h2EOverp"    ,"EMCAL-TRACK matches E/p",nptbins,ptmin,ptmax,200,0.,5. );\r
-  fh2pOverE2 = new TH2F("h2pOverE_Trk","EMCAL-TRACK matches p/E",nptbins,ptmin,ptmax,200,0.,10.);\r
-  fh2EOverp2 = new TH2F("h2EOverp_Trk","EMCAL-TRACK matches E/p",nptbins,ptmin,ptmax,200,0.,5. );\r
-\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
-  fh2dEtadPhi = new TH2F("h2dEtadPhi","#Delta#eta vs. #Delta#phi for all track-cluster pairs",200,0.,1.4,300,0.,TMath::Pi());\r
-  fh2dEtadPhiMatched = new TH2F("h2dEtadPhiMatched","#Delta#eta vs. #Delta#phi for matched track-cluster pairs",200,0.,1.4,300,0.,TMath::Pi());\r
-  fh2dEtadPhiUnmatched = new TH2F("h2dEtadPhiUnmatched","#Delta#eta vs. #Delta#phi for unmatched track-cluster pairs",200,0.,1.4,300,0.,TMath::Pi());\r
-\r
-  fh2TrackPVsClusterE = new TH2F("h2TrackPVsClusterE","h2TrackPVsClusterE",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);\r
-  fh2TrackPtVsClusterE = new TH2F("h2TrackPtVsClusterE","h2TrackPtVsClusterE",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);\r
-  fh2TrackPhiVsClusterPhi = new TH2F("h2TrackPhiVsClusterPhi","h2TrackPhiVsClusterPhi",nphibins,phimin,phimax,nphibins,phimin,phimax);\r
-  fh2TrackEtaVsClusterEta = new TH2F("h2TrackEtaVsClusterEta","h2TrackEtaVsClusterEta",netabins,etamin,etamax,netabins,etamin,etamax);\r
-\r
-  outputContainer->Add(fh3pOverE) ;\r
-  outputContainer->Add(fh3EOverp) ;\r
-  outputContainer->Add(fh3pOverE2) ;\r
-  outputContainer->Add(fh3EOverp2) ;\r
-  outputContainer->Add(fh3pOverE3) ;\r
-  outputContainer->Add(fh3EOverp3) ;\r
-  outputContainer->Add(fh2pOverE) ;\r
-  outputContainer->Add(fh2EOverp) ;\r
-  outputContainer->Add(fh2pOverE2) ;\r
-  outputContainer->Add(fh2EOverp2) ;\r
-  outputContainer->Add(fh1dR) ; \r
-  outputContainer->Add(fh2EledEdx) ;\r
-  outputContainer->Add(fh2MatchdEdx) ;\r
-  outputContainer->Add(fh2dEtadPhi) ;\r
-  outputContainer->Add(fh2dEtadPhiMatched) ;\r
-  outputContainer->Add(fh2dEtadPhiUnmatched) ;\r
-  outputContainer->Add(fh2TrackPVsClusterE) ;\r
-  outputContainer->Add(fh2TrackPtVsClusterE) ;\r
-  outputContainer->Add(fh2TrackPhiVsClusterPhi) ;\r
-  outputContainer->Add(fh2TrackEtaVsClusterEta) ;\r
-  \r
-  //photonic electron checks\r
-  fh1OpeningAngle = new TH1F("hOpeningAngle","Opening angle between e+e- pairs",100,0.,TMath::Pi());\r
-  fh1MinvPhoton = new TH1F("hMinvPhoton","Invariant mass of e+e- pairs",200,0.,2.);\r
-\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
-  fhPtNPE = new TH1F("hPtNPE","Non-photonic Electron pT",nptbins,ptmin,ptmax);\r
-  fhPhiNPE = new TH2F("hPhiNPE","Non-photonic Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
-  fhEtaNPE = new TH2F("hEtaNPE","Non-photonic Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
-  fhPtPE = new TH1F("hPtPE","Photonic Electron pT",nptbins,ptmin,ptmax);\r
-  fhPhiPE = new TH2F("hPhiPE","Photonic Electron phi vs pT",nptbins,ptmin,ptmax,nphibins,phimin,phimax);\r
-  fhEtaPE = new TH2F("hEtaPE","Photonic Electron eta vs. eta",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
-\r
-  outputContainer->Add(fhPtElectron) ; \r
-  outputContainer->Add(fhPhiElectron) ; \r
-  outputContainer->Add(fhEtaElectron) ;\r
-  outputContainer->Add(fhPtNPE) ; \r
-  outputContainer->Add(fhPhiNPE) ; \r
-  outputContainer->Add(fhEtaNPE) ;\r
-  outputContainer->Add(fhPtPE) ; \r
-  outputContainer->Add(fhPhiPE) ; \r
-  outputContainer->Add(fhEtaPE) ;\r
-\r
-  //These histograms are mixed REAL/MC:\r
-  //Bins along y-axis are:  \r
-  //0 - unfiltered (filled for both real and MC data) \r
-  //1 - bottom, 2 - charm, 3 - charm from bottom  (MC only)\r
-  //4 - conversion, 5 - Dalitz, 6 - W and Z, 7 - junk/unknown (MC only)\r
-  //8 - misidentified (MC only)\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
-  fhPtNPEleEMCAL = new TH2F("hPtNPEleEMCAL","Non-phot. Electrons identified by 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
-  outputContainer->Add(fhPtNPEleEMCAL);\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
-  fhDVMBtagCut3 = new TH2F("hdvmbtag_cut3","DVM B-tag result cut3", 10,0,10 ,nptbins,ptmin,ptmax);\r
-  fhDVMBtagQA1  = new TH2F("hdvmbtag_qa1" ,"DVM B-tag QA: pairDCA vs length", 100,0,0.2 ,100,0,1.0);\r
-  fhDVMBtagQA2  = new TH2F("hdvmbtag_qa2" ,"DVM B-tag QA: signDCA vs mass"  , 200,-0.5,0.5 ,100,0,10);\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
-\r
-  outputContainer->Add(fhDVMBtagCut1) ;\r
-  outputContainer->Add(fhDVMBtagCut2) ;\r
-  outputContainer->Add(fhDVMBtagCut3) ;\r
-  outputContainer->Add(fhDVMBtagQA1) ;\r
-  outputContainer->Add(fhDVMBtagQA2) ;\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}",300,0.,300.);\r
-  fhTagJetPt2x3 = new TH1F("hTagJetPt2x3","tagged jet pT (2 track, ipSignif>3);p_{T}",300,0.,300.);\r
-  fhTagJetPt3x2 = new TH1F("hTagJetPt3x2","tagged jet pT (3 track, ipSignif>2);p_{T}",300,0.,300.);\r
-  fhePlusTagJetPt1x4 = new TH1F("hePlusTagJetPt1x4","tagged eJet pT (1 track, ipSignif>4);p_{T}",300,0.,300.);\r
-  fhePlusTagJetPt2x3 = new TH1F("hePlusTagJetPt2x3","tagged eJet pT (2 track, ipSignif>3);p_{T}",300,0.,300.);\r
-  fhePlusTagJetPt3x2 = new TH1F("hePlusTagJetPt3x2","tagged eJet pT (3 track, ipSignif>2);p_{T}",300,0.,300.);\r
-\r
-  outputContainer->Add(fhIPSigBtagQA1) ;\r
-  outputContainer->Add(fhIPSigBtagQA2) ;\r
-  outputContainer->Add(fhTagJetPt1x4);\r
-  outputContainer->Add(fhTagJetPt2x3);\r
-  outputContainer->Add(fhTagJetPt3x2);\r
-  outputContainer->Add(fhePlusTagJetPt1x4);\r
-  outputContainer->Add(fhePlusTagJetPt2x3);\r
-  outputContainer->Add(fhePlusTagJetPt3x2);\r
-\r
-  //B-Jet histograms\r
-  fhJetType = new TH2F("hJetType","# jets passing each tag method vs jet pt",15,0,15,300,0.,300.);\r
-  fhLeadJetType = new TH2F("hLeadJetType","# leading jets passing each tag method vs jet pt",15,0,15,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
-  fhBJetEtaPhi = new TH2F("hBJetEtaPhi","B-jet eta-phi distribution",netabins,etamin,etamax,nphibins,phimin,phimax);\r
-  fhNonBJetXsiFF = new TH2F("hNonBJetXsiFF","Non B-jet #Xsi Frag. Fn.",100,0.,10.,300,0.,300.);\r
-  fhNonBJetPtFF = new TH2F("hNonBJetPtFF","Non B-jet p_{T} Frag. Fn.",nptbins,ptmin,ptmax,300,0.,300.);\r
-  fhNonBJetEtaPhi = new TH2F("hNonBJetEtaPhi","Non B-jet eta-phi distribution",netabins,etamin,etamax,nphibins,phimin,phimax);\r
-\r
-  outputContainer->Add(fhJetType);\r
-  outputContainer->Add(fhLeadJetType);\r
-  outputContainer->Add(fhBJetXsiFF);\r
-  outputContainer->Add(fhBJetPtFF);\r
-  outputContainer->Add(fhBJetEtaPhi);\r
-  outputContainer->Add(fhNonBJetXsiFF);\r
-  outputContainer->Add(fhNonBJetPtFF);\r
-  outputContainer->Add(fhNonBJetEtaPhi);\r
-\r
-  //Histograms that use MC information\r
-  if(IsDataMC()){\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. pT",nptbins,ptmin,ptmax,netabins,etamin,etamax);\r
-\r
-    outputContainer->Add(fhPhiConversion);\r
-    outputContainer->Add(fhEtaConversion);\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
-    fhPtTrack  = new TH2F("hPtTrack","Track w/in EMCAL acceptance",nptbins,ptmin,ptmax,10,0,10);\r
-    fhPtNPEBHadron = new TH2F("hPtNPEBHadron","Non-phot. b-electrons (TPC+TRD+EMCAL) vs B-hadron pt w/in EMCAL acceptance",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);\r
-\r
-    outputContainer->Add(fhPtTrack);\r
-    outputContainer->Add(fhPtNPEBHadron);\r
-\r
-    //for computing efficiency of IPSig tag\r
-    fhBJetPt1x4 = new TH1F("hBJetPt1x4","tagged B-jet pT (1 track, ipSignif>4);p_{T}",300,0.,300.);\r
-    fhBJetPt2x3 = new TH1F("hBJetPt2x3","tagged B-jet pT (2 track, ipSignif>3);p_{T}",300,0.,300.);\r
-    fhBJetPt3x2 = new TH1F("hBJetPt3x2","tagged B-jet pT (3 track, ipSignif>2);p_{T}",300,0.,300.);\r
-    fhFakeJetPt1x4 = new TH1F("hFakeJetPt1x4","fake tagged B-jet pT (1 track, ipSignif>4);p_{T}",300,0.,300.);\r
-    fhFakeJetPt2x3 = new TH1F("hFakeJetPt2x3","fake tagged B-jet pT (2 track, ipSignif>3);p_{T}",300,0.,300.);\r
-    fhFakeJetPt3x2 = new TH1F("hFakeJetPt3x2","fake tagged B-jet pT (3 track, ipSignif>2);p_{T}",300,0.,300.);\r
-    fhDVMJet = new TH2F("hDVM_algo","# DVM jets passing vs Mc-Bjet",10,0,10,300,0.,300.);\r
-\r
-    outputContainer->Add(fhBJetPt1x4);\r
-    outputContainer->Add(fhBJetPt2x3);\r
-    outputContainer->Add(fhBJetPt3x2);\r
-    outputContainer->Add(fhFakeJetPt1x4);\r
-    outputContainer->Add(fhFakeJetPt2x3);\r
-    outputContainer->Add(fhFakeJetPt3x2);\r
-    outputContainer->Add(fhDVMJet);\r
-\r
-    //MC Only histograms\r
-    \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
-    fhMCBHadronElePt = new TH2F("hMCBHadronElePt","MC B-hadron pT vs. electron pT",nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);\r
-    fhPtMCHadron = new TH1F("hPtMCHadron","MC Charged hadrons 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
-    fhMCXYConversion = new TH2F("hMCXYConversion","XvsY of conversion electrons",400,-400.,400.,400,-400.,400.);\r
-    fhMCRadPtConversion = new TH2F("hMCRadPtConversion","Radius vs pT of conversion electrons",200,0.,400.,nptbins,ptmin,ptmax);\r
-\r
-    outputContainer->Add(fhMCBJetElePt);\r
-    outputContainer->Add(fhMCBHadronElePt);\r
-    outputContainer->Add(fhPtMCHadron);\r
-    outputContainer->Add(fhPtMCElectron);\r
-    outputContainer->Add(fhMCXYConversion);\r
-    outputContainer->Add(fhMCRadPtConversion);\r
-\r
-  }//Histos with MC\r
-  \r
-\r
-  return outputContainer ;\r
-  \r
-}\r
-\r
-//____________________________________________________________________________\r
-void AliAnaElectron::Init()\r
-{\r
-\r
-  //do some initialization\r
-  if(fCalorimeter == "PHOS") {\r
-    printf("AliAnaElectron::Init() - !!STOP: You want to use PHOS in analysis but this is not (yet) supported!!\n!!Check the configuration file!!\n");\r
-    fCalorimeter = "EMCAL";\r
-  }\r
-  if(fCalorimeter == "EMCAL" && !GetReader()->IsEMCALSwitchedOn()){\r
-    printf("AliAnaElectron::Init() - !!STOP: You want to use EMCAL in analysis but it is not read!!\n!!Check the configuration file!!\n");\r
-    abort();\r
-  }\r
-\r
-}\r
-\r
-\r
-//____________________________________________________________________________\r
-void AliAnaElectron::InitParameters()\r
-{\r
-  \r
-  //Initialize the parameters of the analysis.\r
-  SetOutputAODClassName("AliAODPWG4Particle");\r
-  SetOutputAODName("PWG4Particle");\r
-\r
-  AddToHistogramsName("AnaElectron_");\r
-\r
-  fCalorimeter = "EMCAL" ;\r
-  fpOverEmin = 0.5;\r
-  fpOverEmax = 1.2;\r
-  fResidualCut = 0.02;\r
-  fMinClusEne = 4.0;\r
-  //DVM B-tagging\r
-  fDrCut       = 1.0; \r
-  fPairDcaCut  = 0.02;\r
-  fDecayLenCut = 1.0;\r
-  fImpactCut   = 0.5;\r
-  fAssocPtCut  = 1.0;\r
-  fMassCut     = 1.5;\r
-  fSdcaCut     = 0.1;\r
-  fITSCut      = 4;\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
-void  AliAnaElectron::MakeAnalysisFillAOD() \r
-{\r
-  //\r
-  // Do analysis and fill aods with electron candidates\r
-  // These AODs will be used to do subsequent histogram filling\r
-  //\r
-  // Also fill some QA histograms\r
-  //\r
-\r
-  Double_t bfield = 0.;\r
-  if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) bfield = GetReader()->GetBField();\r
-\r
-  //Select the calorimeter of the electron\r
-  if(fCalorimeter != "EMCAL") {\r
-    printf("This class not yet implemented for PHOS\n");\r
-    abort();\r
-  }\r
-  \r
-  TObjArray *cl = GetEMCALClusters();\r
-  \r
-  ////////////////////////////////////////////////\r
-  //Start from tracks and get associated clusters \r
-  ////////////////////////////////////////////////\r
-  if(!GetCTSTracks() || GetCTSTracks()->GetEntriesFast() == 0) return ;\r
-  Int_t ntracks = GetCTSTracks()->GetEntriesFast();\r
-  Int_t refmult = 0; Int_t refmult2 = 0;\r
-  if(GetDebug() > 0)\r
-    printf("AliAnaElectron::MakeAnalysisFillAOD() - In CTS aod entries %d\n", ntracks);\r
-\r
-  //Unfortunately, AliAODTracks don't have associated EMCAL clusters.\r
-  //we have to redo track-matching, I guess\r
-  Int_t iCluster = -999;\r
-  Int_t bt = 0; //counter for event b-tags\r
-\r
-  for (Int_t itrk =  0; itrk <  ntracks; itrk++) {////////////// track loop\r
-    iCluster = -999; //start with no match\r
-    AliAODTrack * track = (AliAODTrack*) (GetCTSTracks()->At(itrk)) ;\r
-    //Added negative track condition. Seems that about 3-4% of the tracks have negative label. Causes crashes sometimes.\r
-    if(track->GetLabel()<0){\r
-      printf("Negative track label! Not sure what it  means, abort track. \n");\r
-      continue;\r
-    }\r
-\r
-    if (TMath::Abs(track->Eta())< 0.5) refmult++;\r
-    Double_t imp[2] = {-999.,-999.}; Double_t cov[3] = {-999.,-999.,-999.};\r
-    Bool_t dcaOkay = GetDCA(track,imp,cov);  //homegrown dca calculation until AOD is fixed\r
-    if(!dcaOkay) printf("AliAnaElectron::Problem computing DCA to primary vertex for track %d.  Skipping it...\n",itrk);\r
-    if(TMath::Abs(track->Eta())< 0.5 && TMath::Abs(imp[0])<1.0 && TMath::Abs(imp[1])<1.0) refmult2++;\r
-    fhImpactXY->Fill(imp[0]);\r
-\r
-    //JLK CHECK\r
-    //AliESDtrack esdTrack(track);\r
-    //Double_t tpcpid[AliPID::kSPECIES];\r
-    //esdTrack.GetTPCpid(tpcpid);\r
-    //Double_t eProb = tpcpid[AliPID::kElectron];\r
-    //if(eProb > 0) printf("<%d> ESD eProb = %2.2f\n",itrk,eProb);\r
-\r
-    AliAODPid* pid = (AliAODPid*) track->GetDetPid();\r
-    if(pid == 0) {\r
-      if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillAOD() - No PID object - skipping track %d",itrk);\r
-      continue;\r
-    } else {\r
-      Double_t emcpos[3];\r
-      pid->GetEMCALPosition(emcpos);\r
-      Double_t emcmom[3];\r
-      pid->GetEMCALMomentum(emcmom);\r
-      \r
-      TVector3 pos(emcpos[0],emcpos[1],emcpos[2]);\r
-      TVector3 mom(emcmom[0],emcmom[1],emcmom[2]);\r
-      Double_t tphi = pos.Phi();\r
-      Double_t teta = pos.Eta();\r
-      Double_t tmom = mom.Mag();\r
-      \r
-      //TLorentzVector mom2(mom,0.);\r
-      Bool_t in = kFALSE;\r
-      //Removed two lines below. Seems wrong to demand that the momentum vector should point to the EMCAL.\r
-      //if(mom.Phi()*180./TMath::Pi() > 80. && mom.Phi()*180./TMath::Pi() < 190. &&\r
-      // mom.Eta() > -0.7 && mom.Eta() < 0.7) in = kTRUE;\r
-      //Also check the track\r
-      if(track->Phi()*180./TMath::Pi() > 80. && track->Phi()*180./TMath::Pi() < 190. &&\r
-        track->Eta() > -0.7 && track->Eta() < 0.7) in = kTRUE;\r
-      ////////////////////////////\r
-      //THIS HAS A MEM LEAK JLK 24-Oct-09\r
-      //Bool_t in =  GetFiducialCut()->IsInFiducialCut(mom2,fCalorimeter) ;\r
-      ///////////////////////////\r
-      if(GetDebug() > 1) printf("AliAnaElectron::MakeAnalysisFillAOD() - Track(Extrap) pt %2.2f(%2.2f), phi %2.2f(%2.2f), eta %2.2f(%2.2f) in fiducial cut %d\n",track->Pt(), mom.Pt(), track->Phi(), mom.Phi(), track->Eta(),mom.Eta(), in);\r
-\r
-      if(mom.Pt() > GetMinPt() && in) {\r
-       \r
-       Double_t dEdx = pid->GetTPCsignal();\r
-               \r
-       Int_t ntot = cl->GetEntriesFast();\r
-       Double_t res = 999.;\r
-       Double_t pOverE = -999.;\r
-       \r
-       Int_t pidProb = track->GetMostProbablePID();\r
-       Bool_t tpcEle = kFALSE; if(dEdx > 70.) tpcEle = kTRUE;\r
-       Bool_t trkEle = kFALSE; if(pidProb == AliAODTrack::kElectron) trkEle = kTRUE;\r
-       Bool_t 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()->GetCTSTracksNormalInputEntries() <= 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
-         fhPtTrack->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
-\r
-       Double_t minR  = 99;\r
-        Double_t minPe =-1;\r
-        Double_t minEp =-1;\r
-        Double_t minMult = -1;\r
-        Double_t minPt   = -1;\r
-\r
-       for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
-         AliVCluster * clus = (AliVCluster*) (cl->At(iclus));\r
-         if(!clus) continue;\r
-\r
-         //As of 11-Oct-2009\r
-         //only select "good" clusters   \r
-         if (clus->GetNCells()       < 2    ) continue;\r
-          if (clus->GetNCells()       > 30   ) continue;\r
-          if (clus->E()               < fMinClusEne ) continue;\r
-          if (clus->GetDispersion()   > 1    ) continue;\r
-          if (clus->GetM20()          > 0.4  ) continue;\r
-          if (clus->GetM02()          > 0.4  ) continue;\r
-          if (clus->GetM20()          < 0.03 ) continue;\r
-          if (clus->GetM02()          < 0.03 ) continue;\r
-         \r
-         Float_t x[3];\r
-         clus->GetPosition(x);\r
-         TVector3 cluspos(x[0],x[1],x[2]);\r
-         Double_t deta = teta - cluspos.Eta();\r
-         Double_t dphi = tphi - cluspos.Phi();\r
-         if(dphi > TMath::Pi()) dphi -= 2*TMath::Pi();\r
-         if(dphi < -TMath::Pi()) dphi += 2*TMath::Pi();\r
-         fh2dEtadPhi->Fill(deta,dphi);\r
-         fh2TrackPVsClusterE->Fill(clus->E(),track->P());\r
-         fh2TrackPtVsClusterE->Fill(clus->E(),track->Pt());\r
-         fh2TrackPhiVsClusterPhi->Fill(cluspos.Phi(),mom.Phi());\r
-         fh2TrackEtaVsClusterEta->Fill(cluspos.Eta(),mom.Eta());\r
-         \r
-         res = sqrt(dphi*dphi + deta*deta);\r
-         fh1dR->Fill(res);\r
-         \r
-         /////////////////////////////////\r
-         //Perform electron cut analysis//\r
-         /////////////////////////////////\r
-         //Good match\r
-         if(res < fResidualCut) {\r
-           fh2dEtadPhiMatched->Fill(deta,dphi);\r
-           fh2MatchdEdx->Fill(track->P(),dEdx);\r
-           iCluster = iclus;\r
-\r
-           Double_t energy = clus->E(); \r
-           if(energy > 0) pOverE = tmom/energy;\r
-\r
-           if (res< minR) {\r
-              minR  = res;\r
-              minPe = pOverE;\r
-              minEp = energy/tmom;\r
-              minMult = clus->GetNCells() ;\r
-              minPt = track->Pt();\r
-            }\r
-\r
-           Int_t cmctag = -1;      \r
-           if(IsDataMC()) {  \r
-             //Do you want the cluster or the track label?\r
-             Int_t input = 0;\r
-             //if(GetReader()->GetEMCALClustersNormalInputEntries() <= iclus) input = 1;\r
-             cmctag = GetMCAnalysisUtils()->CheckOrigin(clus->GetLabel(),GetReader(),input);\r
-           }\r
-           \r
-           if(fWriteNtuple) {\r
-             fEleNtuple->Fill(tmctag,cmctag,track->Pt(),track->Phi(),track->Eta(),track->P(),clus->E(),deta,dphi,clus->GetNCells(),dEdx,pidProb,imp[0],imp[1]);\r
-           }\r
-\r
-         } else {\r
-           fh2dEtadPhiUnmatched->Fill(deta,dphi);\r
-         }//res cut\r
-       }//calo cluster loop\r
-\r
-       fh3pOverE->Fill(minPt,minPe ,minMult);\r
-       fh3EOverp->Fill(minPt,minEp ,minMult);\r
-       if (trkEle) {\r
-         fh3pOverE2->Fill(minPt,minPe ,minMult);\r
-         fh3EOverp2->Fill(minPt,minEp ,minMult);\r
-       }\r
-       if (tpcEle) {\r
-         fh3pOverE3->Fill(minPt,minPe ,minMult);\r
-         fh3EOverp3->Fill(minPt,minEp ,minMult);\r
-       }\r
-       //new\r
-       if (tmctag>-1 && GetMCSource(tmctag)<8 ) {\r
-          fh2pOverE->Fill(minPt,minPe );\r
-          fh2EOverp->Fill(minPt,minEp );\r
-          if (trkEle) {\r
-            fh2pOverE2->Fill(minPt,minPe );\r
-            fh2EOverp2->Fill(minPt,minEp );\r
-          }\r
-        }\r
-\r
-       //////////////////////////////\r
-       //Electron cuts happen here!//\r
-       //////////////////////////////\r
-       if(minPe > fpOverEmin && minPe < fpOverEmax) emcEle = kTRUE;\r
-\r
-       ///////////////////////////\r
-       //Fill AOD with electrons//\r
-       ///////////////////////////\r
-       //Take all emcal electrons, but the others only if pT < 10 GeV\r
-       if(emcEle || ( (tpcEle || trkEle) && track->Pt() < 10.) ) {\r
-\r
-         //B-tagging\r
-         if(GetDebug() > 1) printf("Found Electron - do b-tagging\n");\r
-         Int_t dvmbtag = GetDVMBtag(track); bt += dvmbtag;\r
-         fh2EledEdx->Fill(track->P(),dEdx);\r
-         \r
-         Double_t eMass = 0.511/1000; //mass in GeV\r
-         Double_t eleE = sqrt(track->P()*track->P() + eMass*eMass);\r
-         AliAODPWG4Particle tr = AliAODPWG4Particle(track->Px(),track->Py(),track->Pz(),eleE);\r
-         tr.SetLabel(track->GetLabel());\r
-         tr.SetCaloLabel(iCluster,-1); //sets the indices of the original caloclusters\r
-         tr.SetTrackLabel(itrk,-1); //sets the indices of the original tracks\r
-         if(emcEle) {//PID determined by EMCAL\r
-           tr.SetDetector(fCalorimeter);\r
-         } else {\r
-           tr.SetDetector("CTS"); //PID determined by CTS\r
-         }\r
-\r
-         //if(GetReader()->GetCTSTracksNormalInputEntries() <= itrk) tr.SetInputFileIndex(1);\r
-         //Make this preserve sign of particle\r
-         if(track->Charge() < 0) tr.SetPdg(11); //electron is 11\r
-         else  tr.SetPdg(-11); //positron is -11\r
-         Int_t btag = 0;\r
-         if(dvmbtag > 0) tr.SetBTagBit(btag,tr.kDVMTag0);\r
-         if(dvmbtag > 1) tr.SetBTagBit(btag,tr.kDVMTag1);\r
-         if(dvmbtag > 2) tr.SetBTagBit(btag,tr.kDVMTag2);\r
-         tr.SetBtag(btag);\r
-         \r
-         //Play with the MC stack if available\r
-         //Check origin of the candidates\r
-         if(IsDataMC()){\r
-           \r
-           //FIXME:  Need to re-think this for track-oriented analysis\r
-           //JLK DO WE WANT TRACK TAG OR CLUSTER TAG?\r
-           tr.SetTag(GetMCAnalysisUtils()->CheckOrigin(tr.GetLabel(),GetReader(),tr.GetInputFileIndex()));\r
-           \r
-           if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillAOD() - Origin of candidate %d\n",tr.GetTag());\r
-         }//Work with stack also   \r
-         \r
-         AddAODParticle(tr);\r
-         \r
-         if(GetDebug() > 1) printf("AliAnaElectron::MakeAnalysisFillAOD() - Electron selection cuts passed: pT %3.2f, pdg %d\n",tr.Pt(),tr.GetPdg());  \r
-       }//electron\r
-      }//pt, fiducial selection\r
-    }//pid check\r
-  }//track loop                         \r
-  \r
-  fhRefMult->Fill(refmult);\r
-  fhRefMult2->Fill(refmult2);\r
-\r
-  if(GetDebug() > 1 && bt > 0) printf("AliAnaElectron::MakeAnalysisFillAOD() *** Event Btagged *** \n");\r
-  if(GetDebug() > 1) printf("AliAnaElectron::MakeAnalysisFillAOD()  End fill AODs \n");  \r
-  \r
-}\r
-\r
-//__________________________________________________________________\r
-void  AliAnaElectron::MakeAnalysisFillHistograms() \r
-{\r
-  //Do analysis and fill histograms\r
-  \r
-  AliStack * stack = 0x0;\r
-  TParticle * primary = 0x0;\r
-  AliAODMCParticle * aodprimary = 0x0;\r
-  \r
-  Int_t ph1 = 0;  //photonic 1 count\r
-  Int_t ph2 = 0;  //photonic 2 count\r
-  Int_t phB = 0;  //both count\r
-  \r
-  if(IsDataMC()) {\r
-    if(GetReader()->ReadStack()){\r
-      stack =  GetMCStack() ;      \r
-      if(!stack){\r
-        printf("AliAnaElectron::MakeAnalysisFillHistograms() *** no stack ***: \n");\r
-      }\r
-      \r
-    }\r
-  }// is data and MC\r
-  \r
-  ////////////////////////////////////\r
-  //Loop over jets and check for b-tag\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\n",njets);\r
-    \r
-    for(Int_t ijet = 0; ijet < njets ; ijet++) {\r
-      AliAODJet * jet = (AliAODJet*)(GetReader()->GetOutputEvent())->GetJet(ijet) ;\r
-      //Only consider jets with pt > 10 GeV (the rest have to be junk)\r
-      //printf("AODJet<%d> pt = %2.2f\n",ijet,jet->Pt());\r
-      if(jet->Pt() < 10.) continue;\r
-      \r
-      if(GetDebug() > 3) {\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
-      //For IPSig, we compute the IPSig for all tracks and if the\r
-      //number passing is above the cut, it passes\r
-      Bool_t leadJet  = kFALSE;\r
-      if (ijet==0) leadJet= kTRUE;\r
-      Bool_t eJet = kFALSE;  \r
-      Bool_t eJet2    = kFALSE; //electron triggered\r
-      Bool_t hadJet   = kFALSE; //hadron triggered \r
-      Bool_t dvmJet = kFALSE;  \r
-      Bool_t ipsigJet = kFALSE;\r
-      TRefArray* rt = jet->GetRefTracks();\r
-      Int_t ntrk = rt->GetEntries();\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[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
-        if ( isNPE && jetTrack->Pt()>10.0 ) eJet2  =kTRUE;\r
-        if (!isNPE && jetTrack->Pt()>10.0) hadJet =kTRUE;\r
-        Bool_t isDVM = CheckTrack(jetTrack,"DVM");\r
-        if(isDVM) dvmJet = kTRUE;\r
-      }\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[1]>0 && eJet) fhePlusTagJetPt1x4->Fill(jet->Pt());\r
-      if(trackCounter[2]>1 && eJet) fhePlusTagJetPt2x3->Fill(jet->Pt());\r
-      if(trackCounter[3]>2 && eJet) fhePlusTagJetPt3x2->Fill(jet->Pt());\r
-      \r
-      if(trackCounter[0] > fNTagTrkCut) ipsigJet = kTRUE;\r
-      \r
-      if(IsDataMC()) {\r
-        //determine tagging efficiency & mis-tagging rate\r
-        //using b-quarks from stack\r
-        Bool_t isTrueBjet = IsMcBJet(jet->Eta(), jet->Phi());\r
-        Bool_t isTrueDjet = IsMcDJet(jet->Eta(), jet->Phi());\r
-        if (isTrueBjet && GetDebug() > 0) printf("== True Bjet==\n");\r
-        if (isTrueDjet && GetDebug() > 0) printf("== True Charm-jet==\n");\r
-        if (dvmJet && GetDebug() > 0)     printf("== found DVM jet==\n");\r
-        \r
-        if(isTrueBjet && dvmJet) fhDVMJet->Fill(0.,jet->Pt()); // good tagged\r
-        if(isTrueBjet && !dvmJet) fhDVMJet->Fill(1.,jet->Pt()); // missed tagged\r
-        if(!isTrueBjet && dvmJet) fhDVMJet->Fill(2.,jet->Pt());  // fake tagged\r
-        if(!isTrueBjet && !dvmJet) fhDVMJet->Fill(3.,jet->Pt());  // others\r
-        if(isTrueDjet && !isTrueBjet &&   dvmJet) fhDVMJet->Fill(4.,jet->Pt()); // charm-tagged\r
-        if(isTrueDjet && !isTrueBjet &&  !dvmJet) fhDVMJet->Fill(5.,jet->Pt()); // charm -not tagged\r
-        if(!(isTrueDjet||isTrueBjet ) &&  dvmJet) fhDVMJet->Fill(6.,jet->Pt()); // light flavor -tagged\r
-        if(!(isTrueDjet||isTrueBjet ) && !dvmJet) fhDVMJet->Fill(7.,jet->Pt()); // light flavor -not tagged\r
-        if(isTrueBjet &&  eJet && dvmJet) fhDVMJet->Fill(8.,jet->Pt()); // bjet with electron\r
-        if(isTrueBjet && !eJet && dvmJet) fhDVMJet->Fill(9.,jet->Pt()); // needs more thought\r
-        \r
-        if(isTrueBjet) {\r
-          if(trackCounter[1]>0) fhBJetPt1x4->Fill(jet->Pt());\r
-          if(trackCounter[2]>1) fhBJetPt2x3->Fill(jet->Pt());\r
-          if(trackCounter[3]>2) fhBJetPt3x2->Fill(jet->Pt());\r
-        } else {\r
-          if(trackCounter[1]>0) fhFakeJetPt1x4->Fill(jet->Pt());\r
-          if(trackCounter[2]>1) fhFakeJetPt2x3->Fill(jet->Pt());\r
-          if(trackCounter[3]>2) fhFakeJetPt3x2->Fill(jet->Pt());\r
-        }\r
-      }\r
-      \r
-      //Fill bjet histograms here\r
-      if(!(eJet || ipsigJet || dvmJet)) fhJetType->Fill(0.,jet->Pt()); //none\r
-      if(eJet && !(ipsigJet || dvmJet)) fhJetType->Fill(1.,jet->Pt()); //only ejet\r
-      if(dvmJet && !(eJet || ipsigJet)) fhJetType->Fill(2.,jet->Pt()); //only dvm\r
-      if(ipsigJet && !(eJet || dvmJet)) fhJetType->Fill(3.,jet->Pt()); //only ipsig\r
-      if(eJet && dvmJet && !ipsigJet)   fhJetType->Fill(4.,jet->Pt()); //ejet & dvm\r
-      if(eJet && ipsigJet && !dvmJet)   fhJetType->Fill(5.,jet->Pt()); //ejet & ipsig\r
-      if(dvmJet && ipsigJet && !eJet)   fhJetType->Fill(6.,jet->Pt()); //dvm & ipsig\r
-      if(dvmJet && ipsigJet && eJet)    fhJetType->Fill(7.,jet->Pt()); //all\r
-      if(dvmJet || ipsigJet || eJet)    fhJetType->Fill(8.,jet->Pt()); //any of them\r
-      if(eJet  )    fhJetType->Fill(9.,jet->Pt()); //any of them\r
-      if(dvmJet)    fhJetType->Fill(10.,jet->Pt()); //any of them\r
-      if(eJet2 )    fhJetType->Fill(11.,jet->Pt()); //any of them\r
-      if(hadJet)    fhJetType->Fill(12.,jet->Pt()); //any of them\r
-      \r
-      if(eJet || ipsigJet || dvmJet) fhBJetEtaPhi->Fill(jet->Eta(),jet->Phi());\r
-      else fhNonBJetEtaPhi->Fill(jet->Eta(),jet->Phi());\r
-      \r
-      //leading jets\r
-      if (leadJet) {\r
-        fhLeadJetType->Fill(0.,jet->Pt()); //all\r
-        if(eJet   )    fhLeadJetType->Fill(1.,jet->Pt());\r
-        if(eJet2  )    fhLeadJetType->Fill(2.,jet->Pt());\r
-        if(hadJet )    fhLeadJetType->Fill(3.,jet->Pt());\r
-        if(eJet   && (dvmJet || ipsigJet) )    fhLeadJetType->Fill(4.,jet->Pt());\r
-        if(eJet2  && (dvmJet || ipsigJet) )    fhLeadJetType->Fill(5.,jet->Pt());\r
-        if(hadJet && (dvmJet || ipsigJet) )    fhLeadJetType->Fill(6.,jet->Pt());\r
-      }\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
-          fhBJetXsiFF->Fill(xsi,jet->Pt());\r
-          fhBJetPtFF->Fill(jetTrack->Pt(),jet->Pt());\r
-        } else {\r
-          //Fill non-bjet histograms here\r
-          fhNonBJetXsiFF->Fill(xsi,jet->Pt());\r
-          fhNonBJetPtFF->Fill(jetTrack->Pt(),jet->Pt());\r
-        }\r
-      }\r
-      \r
-    } //jet loop\r
-  } //jets exist\r
-  \r
-  //////////////////////////////\r
-  //Loop on stored AOD electrons\r
-  //////////////////////////////\r
-  Int_t naod = GetOutputAODBranch()->GetEntriesFast();\r
-  if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod);\r
-  \r
-  for(Int_t iaod = 0; iaod < naod ; iaod++){\r
-    AliAODPWG4Particle* ele =  (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));\r
-    Int_t pdg = ele->GetPdg();\r
-    \r
-    if(GetDebug() > 3) \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
-    \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 = PhotonicPrim(ele); //check against primaries\r
-    if(photonic1) ph1++;\r
-    Bool_t photonic2 = kFALSE;\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
-    \r
-    //Fill electron histograms \r
-    Float_t ptele = ele->Pt();\r
-    Float_t phiele = ele->Phi();\r
-    Float_t etaele = ele->Eta();\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(ele->GetDetector() == fCalorimeter) fhPtNPEleEMCAL->Fill(ptele,0);\r
-      if(IsDataMC()) {\r
-        fhPtNPEleTTE->Fill(ptele,GetMCSource(mctag));\r
-        if(ele->GetDetector() == "EMCAL") fhPtNPEleEMCAL->Fill(ptele,GetMCSource(mctag));\r
-        if(GetMCSource(mctag) == 1) { //it's a bottom electron, now\r
-          //get the parent's pt\r
-          Double_t ptbHadron = GetBParentPt(ele->GetLabel());\r
-          fhPtNPEBHadron->Fill(ptele,ptbHadron);\r
-        } //mctag\r
-      } //isdatamc\r
-    } //!photonic\r
-    \r
-    //kept for historical reasons?\r
-    fhPtElectron  ->Fill(ptele);\r
-    fhPhiElectron ->Fill(ptele,phiele);\r
-    fhEtaElectron ->Fill(ptele,etaele);\r
-    \r
-    if(photonic) {\r
-      fhPtPE->Fill(ptele);\r
-      fhPhiPE->Fill(ptele,phiele);\r
-      fhEtaPE->Fill(ptele,etaele);\r
-    } else {\r
-      fhPtNPE->Fill(ptele);\r
-      fhPhiNPE->Fill(ptele,phiele);\r
-      fhEtaNPE->Fill(ptele,etaele);\r
-    }\r
-    \r
-    if(IsDataMC()){\r
-      if(GetMCAnalysisUtils()->CheckTagBit(mctag,AliMCAnalysisUtils::kMCConversion)){\r
-        fhPhiConversion ->Fill(ptele,phiele);\r
-        fhEtaConversion ->Fill(ptele,etaele);\r
-      }\r
-    }//Histograms with MC\r
-    \r
-  }// aod loop\r
-  \r
-  ////////////////////////////////////////////////////////\r
-  //Fill histograms of pure MC kinematics from the stack//\r
-  ////////////////////////////////////////////////////////\r
-  if(IsDataMC() && stack) {\r
-    \r
-    //MC Jets\r
-    TVector3 bjetVect[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
-        //Only store it if it has a b-quark within dR < 0.2 of jet axis ?\r
-        if(IsMcBJet(tempVect.Eta(),tempVect.Phi())) {\r
-          bjetVect[iCount].SetXYZ(p[0], p[1], p[2]);\r
-          iCount++;\r
-        }\r
-      }\r
-    }\r
-    \r
-    Int_t nPart = GetNumAODMCParticles();\r
-    if(GetReader()->ReadStack()) nPart = stack->GetNtrack();\r
-    \r
-    for(Int_t ipart = 0; ipart < nPart; ipart++) {\r
-      \r
-      //All the variables we want from MC particles\r
-      Double_t px = 0.; Double_t py = 0.; Double_t pz = 0.; Double_t e = 0.;\r
-      Double_t vx = -999.; Double_t vy = -999.; Double_t vz = -999.; Double_t vt = -999.;\r
-      Int_t pdg = 0; Int_t mpdg = 0; Double_t mpt = 0.;\r
-      \r
-      if(GetReader()->ReadStack()) {\r
-        primary = stack->Particle(ipart);\r
-        pdg = primary->GetPdgCode();\r
-        px = primary->Px(); py = primary->Py(); pz = primary->Pz(); e = primary->Energy();\r
-        vx = primary->Vx(); vy = primary->Vy(); vz = primary->Vz(); vt = primary->T();\r
-        if(primary->GetMother(0)>=0) {\r
-          TParticle *parent = stack->Particle(primary->GetMother(0));\r
-          if (parent) {\r
-            mpdg = parent->GetPdgCode();\r
-            mpt = parent->Pt();\r
-          }\r
-        }\r
-      } else if(GetReader()->ReadAODMCParticles()) {\r
-        aodprimary =  (AliAODMCParticle*)GetMCParticle(ipart);\r
-        pdg = aodprimary->GetPdgCode();\r
-        px = aodprimary->Px(); py = aodprimary->Py(); pz = aodprimary->Pz(); e = aodprimary->E();\r
-        vx = aodprimary->Xv(); vy = aodprimary->Yv(); vz = aodprimary->Zv(); vt = aodprimary->T();\r
-        Int_t parentId = aodprimary->GetMother();\r
-        if(parentId>=0) {\r
-          AliAODMCParticle *parent = (AliAODMCParticle*)GetMCParticle(parentId);\r
-          if (parent) {\r
-            mpdg = parent->GetPdgCode();\r
-            mpt = parent->Pt();\r
-          }\r
-        }      \r
-      }\r
-      \r
-      TLorentzVector mom(px,py,pz,e);\r
-      TLorentzVector pos(vx,vy,vz,vt);\r
-      Bool_t in = kFALSE;\r
-      if(mom.Phi()*180./TMath::Pi() > 80. && mom.Phi()*180./TMath::Pi() < 190. &&\r
-         mom.Eta() > -0.7 && mom.Eta() < 0.7) in = kTRUE;\r
-      /////////////////////////////////\r
-      //THIS HAS A MEM LEAK JLK 24-Oct-09\r
-      //Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,fCalorimeter);\r
-      ////////////////////////////////\r
-      if(mom.Pt() < GetMinPt()) continue;\r
-      if(!in) continue;\r
-      \r
-      if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 321 || TMath::Abs(pdg) == 2212)\r
-        fhPtMCHadron->Fill(mom.Pt());\r
-      \r
-      //we only care about electrons\r
-      if(TMath::Abs(pdg) != 11) continue;\r
-      //we only want TRACKABLE electrons (TPC 85-250cm)\r
-      if(pos.Rho() > 200.) continue;\r
-      //Ignore low pt electrons\r
-      if(mom.Pt() < 0.2) continue;\r
-      \r
-      //find out what the ancestry of this electron is\r
-      Int_t mctag = -1;\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 bjet\r
-        for(Int_t ij = 0; ij < nPythiaGenJets; ij++) {\r
-          Double_t deta = primary->Eta() - bjetVect[ij].Eta();\r
-          Double_t dphi = primary->Phi() - bjetVect[ij].Phi();\r
-          Double_t dR = TMath::Sqrt(deta*deta + dphi*dphi);\r
-          if(dR < 0.4) {\r
-            fhMCBJetElePt->Fill(primary->Pt(),bjetVect[ij].Pt());\r
-          }\r
-        }\r
-      }\r
-      \r
-      if ((TMath::Abs(mpdg) >500  && TMath::Abs(mpdg) <600 ) ||\r
-          (TMath::Abs(mpdg) >5000 && TMath::Abs(mpdg) <6000 ) )\r
-      {\r
-        fhMCBHadronElePt->Fill(mom.Pt(), mpt); \r
-      }\r
-      //CHECK THAT THIS IS CORRECTLY FILLED - SHOULD WE USE MCSOURCE HERE?\r
-      fhPtMCElectron->Fill(mom.Pt(),0);  //0 = unfiltered\r
-      fhPtMCElectron->Fill(mom.Pt(),GetMCSource(mctag));\r
-      \r
-      if(GetMCSource(mctag) == 4) {//conversion\r
-        fhMCXYConversion->Fill(vx,vy);\r
-        fhMCRadPtConversion->Fill(TMath::Sqrt(vx*vx+vy*vy),mom.Pt());\r
-      }\r
-      \r
-      //fill ntuple\r
-      if(fWriteNtuple) {\r
-        fMCEleNtuple->Fill(mctag,mom.Pt(),mom.Phi(),mom.Eta(),vx,vy,vz);\r
-      }\r
-    }\r
-  } //MC loop\r
-  \r
-  //if(GetDebug() > 0) \r
-  printf("\tAliAnaElectron::Photonic electron counts: ph1 %d, ph2 %d, Both %d\n",ph1,ph2,phB);\r
-}\r
-\r
-//__________________________________________________________________\r
-Int_t AliAnaElectron::GetDVMBtag(AliAODTrack * tr )\r
-{\r
-  //This method uses the Displaced Vertex between electron-hadron\r
-  //pairs and the primary vertex to determine whether an electron is\r
-  //likely from a B hadron.\r
-\r
-  Int_t ncls1 = 0;\r
-  for(Int_t l = 0; l < 6; l++) if(TESTBIT(tr->GetITSClusterMap(),l)) ncls1++;\r
-\r
-  fhDVMBtagQA3->Fill(ncls1);\r
-  if (ncls1 < fITSCut) return 0;\r
-  Double_t imp[2] = {-999.,-999.}; Double_t cov[3] = {-999.,-999.,-999.};\r
-  Bool_t dcaOkay = GetDCA(tr,imp,cov);  //homegrown dca calculation until AOD is fixed                  \r
-  if(!dcaOkay) {\r
-    printf("AliAnaElectron::Problem computing DCA to primary vertex for track %d",tr->GetID());\r
-    return 0;\r
-  }\r
-\r
-  fhDVMBtagQA4->Fill(imp[0]);\r
-  if (TMath::Abs(imp[0])   > fImpactCut ) return 0;\r
-  fhDVMBtagQA5->Fill(imp[1]);\r
-  if (TMath::Abs(imp[1])   > fImpactCut ) return 0;\r
-\r
-  Int_t nvtx1 = 0;\r
-  Int_t nvtx2 = 0;\r
-  Int_t nvtx3 = 0;\r
-\r
-  for (Int_t k2 =0; k2 < GetCTSTracks()->GetEntriesFast() ; k2++) {\r
-    //loop over assoc\r
-    AliAODTrack* track2 = (AliAODTrack*)GetCTSTracks()->At(k2);\r
-    Int_t id1 = tr->GetID();\r
-    Int_t id2 = track2->GetID();\r
-    if(id1 == id2) continue;\r
-\r
-    Int_t ncls2 = 0;\r
-    for(Int_t l = 0; l < 6; l++) if(TESTBIT(track2->GetITSClusterMap(),l)) ncls2++;\r
-    if (ncls2 < fITSCut) continue;\r
-\r
-    if(track2->Pt() < fAssocPtCut) continue;\r
-\r
-    Double_t dphi = tr->Phi() - track2->Phi();\r
-    if(dphi > TMath::Pi()) dphi -= 2*TMath::Pi();\r
-    if(dphi < -TMath::Pi()) dphi += 2*TMath::Pi();\r
-    Double_t deta = tr->Eta() - track2->Eta();\r
-    Double_t dr = sqrt(deta*deta + dphi*dphi);\r
-\r
-    if(dr > fDrCut) continue;\r
-    Double_t sDca1 = ComputeSignDca(tr, track2, 1.0);\r
-    if (sDca1 > fSdcaCut) nvtx1++;\r
-    Double_t sDca2 = ComputeSignDca(tr, track2, 1.5);\r
-    if (sDca2 > fSdcaCut) nvtx2++;\r
-    Double_t sDca3 = ComputeSignDca(tr, track2, 1.8);\r
-    if (sDca3 > fSdcaCut) nvtx3++;\r
-\r
-  } //loop over hadrons\r
-\r
-  if(GetDebug() > 0) {\r
-    if (nvtx1>0) printf("result1 of btagging: %d \n",nvtx1);\r
-    if (nvtx2>0) printf("result2 of btagging: %d \n",nvtx2);\r
-    if (nvtx3>0) printf("result3 of btagging: %d \n",nvtx3);\r
-  }\r
-\r
-  //fill QA histograms\r
-  fhDVMBtagCut1->Fill(nvtx1,tr->Pt());\r
-  fhDVMBtagCut2->Fill(nvtx2,tr->Pt());\r
-  fhDVMBtagCut3->Fill(nvtx3,tr->Pt());\r
-\r
-  return nvtx2;\r
-\r
-}\r
-\r
-//__________________________________________________________________\r
-Double_t AliAnaElectron::ComputeSignDca(AliAODTrack *tr, AliAODTrack *tr2 , float masscut)\r
-{\r
-  //Compute the signed dca between two tracks\r
-  //and return the result\r
-\r
-  Double_t signDca=-999.;\r
-  if(GetDebug() > 2 ) printf(">>ComputeSdca:: track1 %d, track2 %d, masscut %f \n", tr->GetLabel(), tr2->GetLabel(), masscut);\r
-\r
-  //=====Now calculate DCA between both tracks=======  \r
-  Double_t massE = 0.000511;\r
-  Double_t massK = 0.493677;\r
-\r
-  Double_t vertex[3] = {-999.,-999.,-999}; //vertex\r
-  if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) {\r
-    GetVertex(vertex); //If only one file, get the vertex from there\r
-    //FIXME:  Add a check for whether file 2 is PYTHIA or HIJING\r
-    //If PYTHIA, then set the vertex from file 2, if not, use the\r
-    //vertex from file 1\r
-    //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex);\r
-  }\r
-  \r
-  TVector3 primV(vertex[0],vertex[1],vertex[2]) ;\r
-\r
-  if(GetDebug() > 5) printf(">>ComputeSdca:: primary vertex = %2.2f,%2.2f,%2.2f \n",vertex[0],vertex[1],vertex[2]) ;\r
-\r
-  AliExternalTrackParam *param1 = new AliExternalTrackParam(tr);\r
-  AliExternalTrackParam *param2 = new AliExternalTrackParam(tr2);\r
-\r
-  //Replaced functions to get the B-field. They do not work.\r
-  Double_t bfield[3];\r
-  param1->GetBxByBz(bfield);\r
-  bfield[0]=0;\r
-  bfield[1]=0;\r
-  bfield[2]=5.0;\r
-  Double_t bz = 5.0; //param1->GetBz();\r
-  printf("ZOMG1 bfield is: %f, %f",bz,bfield[2]);\r
-  Double_t xplane1 = 0.; Double_t xplane2 = 0.;\r
-  Double_t pairdca = param1->GetDCA(param2,bz,xplane1,xplane2);\r
-\r
-  param1->PropagateToBxByBz(xplane1,bfield);\r
-  param2->PropagateToBxByBz(xplane2,bfield);\r
-\r
-  Int_t id1 = 0, id2 = 0;\r
-  AliESDv0 bvertex(*param1,id1,*param2,id2);\r
-  Double_t vx,vy,vz;\r
-  bvertex.GetXYZ(vx,vy,vz);\r
-\r
-  Double_t emom[3];\r
-  Double_t hmom[3];\r
-  param1->PxPyPz(emom);\r
-  param2->PxPyPz(hmom);\r
-  TVector3 emomAtB(emom[0],emom[1],emom[2]);\r
-  TVector3 hmomAtB(hmom[0],hmom[1],hmom[2]);\r
-  TVector3 secvtxpt(vx,vy,vz);\r
-  TVector3 decayvector(0,0,0);\r
-  decayvector = secvtxpt - primV; //decay vector from PrimVtx\r
-  Double_t decaylength = decayvector.Mag();\r
-\r
-  //printf("\t JLK pairDCA = %2.2f\n",pairdca);\r
-\r
-  if(GetDebug() > 0) {\r
-    printf(">>ComputeSdca:: mom1=%f, mom2=%f \n", emomAtB.Perp(), hmomAtB.Perp() );\r
-    printf(">>ComputeSdca:: pairDCA=%f, length=%f \n", pairdca,decaylength );\r
-  }\r
-\r
-  if (masscut<1.1) fhDVMBtagQA1->Fill(pairdca,decaylength);\r
-\r
-  if (emomAtB.Mag()>0 && pairdca < fPairDcaCut && decaylength < fDecayLenCut ) {\r
-    TVector3 sumMom = emomAtB+hmomAtB;\r
-    Double_t ener1 = sqrt(pow(emomAtB.Mag(),2) + massE*massE);\r
-    Double_t ener2 = sqrt(pow(hmomAtB.Mag(),2) + massK*massK);\r
-    Double_t ener3 = sqrt(pow(hmomAtB.Mag(),2) + massE*massE);\r
-    Double_t mass = sqrt(pow((ener1+ener2),2) - pow(sumMom.Mag(),2));\r
-    Double_t massPhot = sqrt(pow((ener1+ener3),2) - pow(sumMom.Mag(),2));\r
-    Double_t sDca = decayvector.Dot(emomAtB)/emomAtB.Mag();\r
-\r
-    if (masscut<1.1) fhDVMBtagQA2->Fill(sDca, mass);\r
-\r
-    if (mass > masscut && massPhot > 0.1) signDca = sDca;\r
-    \r
-    if(GetDebug() > 0) printf("\t>>ComputeSdca:: mass=%f \n", mass);\r
-    if(GetDebug() > 0) printf("\t>>ComputeSdca:: sec vtx-signdca :%f\n",signDca);\r
-  }\r
-\r
-  //clean up\r
-  delete param1;\r
-  delete param2;\r
-\r
-  return signDca;\r
-}\r
-\r
-//__________________________________________________________________\r
-Double_t AliAnaElectron::GetIPSignificance(AliAODTrack *tr, Double_t jetPhi)\r
-{\r
-  //get signed impact parameter significance of the given AOD track\r
-  //for the given jet\r
-\r
-  Int_t trackIndex = 0;\r
-  Int_t ntrk = GetCTSTracks()->GetEntriesFast();\r
-  for (Int_t k2 =0; k2 < ntrk ; k2++) {\r
-    //loop over assoc\r
-    AliAODTrack* track2 = (AliAODTrack*)GetCTSTracks()->At(k2);\r
-    int id1 = tr->GetID();\r
-    int id2 = track2->GetID();\r
-    if(id1 == id2) {\r
-      trackIndex = k2;//FIXME: check if GetCTSTracks stores tracks in the\r
-                     //same order of the event\r
-      break;\r
-    }\r
-  }\r
-\r
-  Double_t significance=0;\r
-  Double_t maxD = 10000.;\r
-  Double_t impPar[] = {0,0};\r
-  Double_t ipCov[]={0,0,0};\r
-  Double_t ipVec2D[] = {0,0};\r
-\r
-  AliVEvent* vEvent = (AliVEvent*)GetReader()->GetInputEvent();\r
-  if(!vEvent) return -97;\r
-  AliVVertex* vv = (AliVVertex*)vEvent->GetPrimaryVertex();\r
-  if(!vv) return -98;\r
-  AliVTrack* vTrack = (AliVTrack*)vEvent->GetTrack(trackIndex);\r
-  if(!vTrack) return -99;\r
-  AliESDtrack esdTrack(vTrack);\r
-  //Replaced function to get B-field, it does not work\r
-  Double_t bfield[3];\r
-  //esdTrack.GetBxByBz(bfield);\r
-  bfield[0]=0;\r
-  bfield[1]=0;\r
-  bfield[2]=5.;\r
-  //printf("ZOMG2 ESD bfield is: %f",bfield[2]);\r
-  if(!esdTrack.PropagateToDCABxByBz(vv, bfield, maxD, impPar, ipCov)) return -100;\r
-  if(ipCov[0]<0) return -101;\r
-\r
-  Double_t Pxy[] = {esdTrack.Px(), esdTrack.Py()};\r
-  Double_t Txy[] = {esdTrack.Xv(), esdTrack.Yv()};\r
-  Double_t Vxy[] = {vv->GetX(),  vv->GetY()};\r
-  GetImpactParamVect(Pxy, Txy, Vxy, ipVec2D);\r
-       Double_t phiIP = TMath::ATan2(ipVec2D[1], ipVec2D[0]) + (TMath::Abs(ipVec2D[1])-ipVec2D[1])/TMath::Abs(ipVec2D[1])*TMath::Pi();\r
-  Double_t cosTheta = TMath::Cos(jetPhi - phiIP);\r
-  Double_t sign = cosTheta/TMath::Abs(cosTheta);\r
-  significance = TMath::Abs(impPar[0])/TMath::Sqrt(ipCov[0])*sign;\r
-  //printf("\t JLK significance = %2.2f\n",significance);\r
-  //ip = fabs(impPar[0]);\r
-  fhIPSigBtagQA2->Fill(significance);\r
-  return significance;\r
-}\r
-\r
-//__________________________________________________________________\r
-void AliAnaElectron::GetImpactParamVect(Double_t Pxy[2], Double_t Txy[2], Double_t Vxy[2], Double_t IPxy[2])\r
-{\r
-  //px,py: momentum components at the origin of the track; tx, ty:\r
-  //origin (x,y) of track; vx, vy: coordinates of primary vertex\r
-  // analytical geometry auxiliary variables\r
-  Double_t mr = Pxy[1]/Pxy[0]; //angular coeficient of the straight\r
-                             //line that lies on top of track\r
-                             //momentum\r
-  Double_t br = Txy[1] - mr*Txy[0]; //linear coeficient of the straight\r
-                                  //line that lies on top of track\r
-                                  //momentum\r
-  Double_t ms = -1./mr; //angular coeficient of the straight line that\r
-                      //lies on top of the impact parameter line\r
-  //  Double_t bs = Vxy[1] - ms*Vxy[0]; //linear coeficient of the straight\r
-                                  //line that lies on top of the\r
-                                  //impact parameter line \r
-  Double_t xIntersection = (mr*Txy[0] - ms*Vxy[0] + Vxy[1] - Txy[1])/(mr - ms);\r
-  Double_t yIntersection = mr*xIntersection + br;\r
-  //if(ceil(10000*yIntersection) - ceil(10000*(ms*xIntersection + bs))\r
-  //!= 0 )cout<<yIntersection<<", "<<ms*xIntersection + bs<<endl;\r
-  IPxy[0] = xIntersection - Vxy[0];\r
-  IPxy[1] = yIntersection - Vxy[1];\r
-  return;\r
-}\r
-\r
-//__________________________________________________________________\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
-  //they are likely to be photonic electrons\r
-\r
-  Bool_t itIS = kFALSE;\r
-\r
-  Double_t massE = 0.000511;\r
-  Double_t massEta = 0.547;\r
-  Double_t massRho0 = 0.770;\r
-  Double_t massOmega = 0.782;\r
-  Double_t massPhi = 1.020;\r
-\r
-  Int_t pdg1 = part->GetPdg();\r
-  Int_t trackId = part->GetTrackLabel(0);\r
-  AliAODTrack* track = (AliAODTrack*)GetCTSTracks()->At(trackId);\r
-  if(!track) {\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
-  AliExternalTrackParam *param1 = new AliExternalTrackParam(track);\r
-\r
-  //Loop on stored AOD electrons and compute the angle differences and Minv\r
-  for (Int_t k2 =0; k2 < GetOutputAODBranch()->GetEntriesFast() ; k2++) {\r
-    AliAODPWG4Particle* part2 = (AliAODPWG4Particle*) GetOutputAODBranch()->At(k2);\r
-    Int_t track2Id = part2->GetTrackLabel(0);\r
-    if(trackId == track2Id) continue;\r
-    Int_t pdg2 = part2->GetPdg();\r
-    if(TMath::Abs(pdg2) != AliCaloPID::kElectron) continue;\r
-    if(part2->GetDetector() != fCalorimeter) continue;\r
-\r
-    //JLK: Check opp. sign pairs only\r
-    if(pdg1*pdg2 > 0) continue; //skip same-sign pairs\r
-\r
-    //propagate to common vertex and check opening angle\r
-    AliAODTrack* track2 = (AliAODTrack*)GetCTSTracks()->At(track2Id);\r
-    if(!track2) {\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
-    Int_t id1 = 0, id2 = 0;\r
-    AliESDv0 photonVtx(*param1,id1,*param2,id2);\r
-    Double_t vx,vy,vz;\r
-    photonVtx.GetXYZ(vx,vy,vz);\r
-\r
-    Double_t p1mom[3];\r
-    Double_t p2mom[3];\r
-    param1->PxPyPz(p1mom);\r
-    param2->PxPyPz(p2mom);\r
-\r
-    TVector3 p1momAtB(p1mom[0],p1mom[1],p1mom[2]);\r
-    TVector3 p2momAtB(p2mom[0],p2mom[1],p2mom[2]);\r
-    TVector3 sumMom = p1momAtB+p2momAtB;\r
-\r
-    Double_t ener1 = sqrt(pow(p1momAtB.Mag(),2) + massE*massE);\r
-    Double_t ener2 = sqrt(pow(p2momAtB.Mag(),2) + massE*massE);\r
-    Double_t mass = sqrt(pow((ener1+ener2),2) - pow(sumMom.Mag(),2));\r
-\r
-    Double_t dphi = p1momAtB.DeltaPhi(p2momAtB);\r
-    fh1OpeningAngle->Fill(dphi);\r
-    fh1MinvPhoton->Fill(mass);\r
-\r
-    if(mass < 0.1 ||\r
-       (mass > massEta-0.05 || mass < massEta+0.05) ||\r
-       (mass > massRho0-0.05 || mass < massRho0+0.05) ||\r
-       (mass > massOmega-0.05 || mass < massOmega+0.05) ||\r
-       (mass > massPhi-0.05 || mass < massPhi+0.05)) \r
-      {\r
-      \r
-       if(GetDebug() > 0) printf("######PROBABLY A PHOTON\n");\r
-       itIS = kTRUE;\r
-      }\r
-    \r
-    //clean up\r
-    delete param2;\r
-    \r
-  }\r
-\r
-  delete param1;\r
-  return itIS;\r
-\r
-}\r
-\r
-//__________________________________________________________________\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
-\r
-  Double_t massEta = 0.547;\r
-  Double_t massRho0 = 0.770;\r
-  Double_t massOmega = 0.782;\r
-  Double_t massPhi = 1.020;\r
-  \r
-  //---Get V0s---\r
-  AliAODEvent *aod = (AliAODEvent*) GetReader()->GetInputEvent();\r
-  int nv0s = aod->GetNumberOfV0s();\r
-  for (Int_t iV0 = 0; iV0 < nv0s; iV0++) {\r
-    AliAODv0 *v0 = aod->GetV0(iV0);\r
-    if (!v0) continue;\r
-    double radius = v0->RadiusV0();\r
-    double mass = v0->InvMass2Prongs(0,1,11,11);\r
-    if(GetDebug() > 0) {\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
-       (mass > massEta-0.05 || mass < massEta+0.05) ||\r
-       (mass > massRho0-0.05 || mass < massRho0+0.05) ||\r
-       (mass > massOmega-0.05 || mass < massOmega+0.05) ||\r
-       (mass > massPhi-0.05 || mass < massPhi+0.05)) {\r
-      if ( id == v0->GetNegID() || id == v0->GetPosID()) {\r
-       itIS=kTRUE;\r
-       if(GetDebug() > 0) printf("## PhotonicV0() :: It's a conversion electron!!! \n" );\r
-      }\r
-    } }\r
-  return itIS;\r
-\r
-}\r
-\r
-//__________________________________________________________________\r
-Bool_t AliAnaElectron::GetDCA(const AliAODTrack* track,Double_t impPar[2], Double_t cov[3]) \r
-{\r
-  //Use the Event vertex and AOD track information to get\r
-  //a real impact parameter for the track\r
-  //Once alice-off gets its act together and fixes the AOD, this\r
-  //should become obsolete.\r
-\r
-  Double_t maxD = 100000.; //max transverse IP\r
-  if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) {\r
-    AliVEvent* ve = (AliVEvent*)GetReader()->GetInputEvent();\r
-    AliVVertex *vv = (AliVVertex*)ve->GetPrimaryVertex();\r
-    AliESDtrack esdTrack(track);\r
-    Double_t bfield[3];\r
-    //This GetBxByBz function does not work properly.\r
-    //esdTrack.GetBxByBz(bfield);\r
-    bfield[0]=0;\r
-    bfield[1]=0;\r
-    bfield[2]=5.;\r
-    //printf("ZOMG2 ESD bfield is: %f",bfield[2]);\r
-    Bool_t gotit = esdTrack.PropagateToDCABxByBz(vv,bfield,maxD,impPar,cov);\r
-    //printf("\t JLK impPar = %2.2f\n",impPar[0]);\r
-    return gotit;\r
-  }\r
-\r
-  return kFALSE;\r
-\r
-}\r
-\r
-//__________________________________________________________________\r
-Bool_t AliAnaElectron::CheckTrack(const AliAODTrack* track, const char* type) \r
-{\r
-  //Check this track to see if it is also tagged as an electron in the\r
-  //AliAODPWG4Particle list and if it is non-photonic\r
-  \r
-  Bool_t pass = kFALSE;\r
-  \r
-  Int_t trackId = track->GetID(); //get the index in the reader\r
-  \r
-  Int_t naod = GetOutputAODBranch()->GetEntriesFast();\r
-  if(GetDebug() > 3) printf("AliAnaElectron::CheckTrack() - aod branch entries %d\n", naod);\r
-  for(Int_t iaod = 0; iaod < naod ; iaod++){\r
-    AliAODPWG4Particle* ele =  (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));\r
-    Int_t label = ele->GetTrackLabel(0);\r
-    if(label != trackId) continue;  //skip to the next one if they don't match\r
-    \r
-    if(strcmp(type,"DVM")==0) { \r
-      if(ele->CheckBTagBit(ele->GetBtag(),AliAODPWG4Particle::kDVMTag1) ||\r
-         ele->CheckBTagBit(ele->GetBtag(),AliAODPWG4Particle::kDVMTag2))\r
-        pass = kTRUE;\r
-      \r
-    } else if (strcmp(type,"NPE")==0) {\r
-      \r
-      Bool_t photonic = kFALSE;\r
-      Bool_t photonic1 = kFALSE;\r
-      photonic1 = PhotonicPrim(ele); //check against primaries\r
-      Bool_t photonic2 = kFALSE;\r
-      photonic2 = PhotonicV0(ele->GetTrackLabel(0)); //check against V0s\r
-      if(photonic1 || photonic2) photonic = kTRUE;\r
-      \r
-      if(!photonic) pass = kTRUE;\r
-      \r
-    } else {\r
-      return kFALSE;\r
-    }\r
-  }\r
-  \r
-  return pass;\r
-  \r
-}\r
-\r
-//__________________________________________________________________\r
-Double_t AliAnaElectron::GetBParentPt(Int_t ipart)\r
-{\r
-  //return MC B parent pt\r
-  if(GetReader()->ReadStack()) { //only done if we have the stack                                                                                               \r
-    AliStack* stack = GetMCStack();\r
-    if(!stack) {\r
-      printf("Problem getting stack\n");\r
-      return 0.;\r
-    }\r
-    TParticle* prim = stack->Particle(ipart);\r
-    if(prim->GetMother(0)>=0) {\r
-      Int_t mpdg = 0;\r
-      TParticle *parent = stack->Particle(prim->GetMother(0));\r
-      if(parent){\r
-        mpdg = parent->GetPdgCode();\r
-      \r
-        if ((TMath::Abs(mpdg) >500  && TMath::Abs(mpdg) <600 ) ||\r
-            (TMath::Abs(mpdg) >5000 && TMath::Abs(mpdg) <6000 ) )\r
-          return parent->Pt();\r
-      }\r
-    }\r
-  } else if(GetReader()->ReadAODMCParticles()){\r
-    AliAODMCParticle* prim = (AliAODMCParticle*)GetMCParticle(ipart);\r
-    if(prim->GetMother()>=0) {\r
-      Int_t mpdg = 0;\r
-      AliAODMCParticle* parent = (AliAODMCParticle*)GetMCParticle(prim->GetMother());\r
-      if(parent){\r
-        mpdg = parent->GetPdgCode();\r
-        if ((TMath::Abs(mpdg) >500  && TMath::Abs(mpdg) <600 ) ||\r
-          (TMath::Abs(mpdg) >5000 && TMath::Abs(mpdg) <6000 ) )\r
-          return parent->Pt();\r
-      }\r
-    }\r
-  }\r
-  return 0.;\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
-  //Do this first\r
-  if(GetMCAnalysisUtils()->CheckTagBit(tag,AliMCAnalysisUtils::kMCConversion)) return 4;\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
-Int_t AliAnaElectron::GetNumAODMCParticles() \r
-{\r
-  //Get the number of AliAODMCParticles, if any\r
-  Int_t num = 0;\r
-  Int_t npart0 = 0;\r
-  TClonesArray * mcparticles0 = 0x0;\r
-//  TClonesArray * mcparticles1 = 0x0;\r
-\r
-  if(GetReader()->ReadAODMCParticles()){\r
-    //Get the list of MC particles\r
-    //                                                                                                 \r
-    mcparticles0 = GetReader()->GetAODMCParticles(0);\r
-    if(!mcparticles0) {\r
-     if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillHistograms() -  Standard MCParticles not available!\n");\r
-    }\r
-//    if(GetReader()->GetSecondInputAODTree()){\r
-//      mcparticles1 = GetReader()->GetAODMCParticles(1);\r
-//      if(!mcparticles1 && GetDebug() > 0) {\r
-//        printf("AliAnaElectron::MakeAnalysisFillHistograms() -  Second input MCParticles not available!\n");\r
-//      }\r
-//    }\r
-    else{\r
-      npart0 = mcparticles0->GetEntriesFast();\r
-    }\r
-    //Int_t npart1 = 0;\r
-    //if(mcparticles1) npart1 = mcparticles1->GetEntriesFast();\r
-    //Int_t npart = npart0;//+npart1;\r
-    return npart0;\r
-\r
-  }\r
-\r
-  return num;\r
-}\r
-//__________________________________________________________________\r
-AliAODMCParticle* AliAnaElectron::GetMCParticle(Int_t ipart) \r
-{\r
-  //Get the MC particle at position ipart\r
-  \r
-  AliAODMCParticle* aodprimary = 0x0;\r
-  TClonesArray * mcparticles0 = 0x0;\r
-  //TClonesArray * mcparticles1 = 0x0;\r
-  \r
-  if(GetReader()->ReadAODMCParticles()){\r
-    //Get the list of MC particles                                                                                                                           \r
-    mcparticles0 = GetReader()->GetAODMCParticles(0);\r
-    if(!mcparticles0) {\r
-      if (GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillHistograms() -  Standard MCParticles not available!\n");\r
-    }\r
-    //    if(GetReader()->GetSecondInputAODTree()){\r
-    //      mcparticles1 = GetReader()->GetAODMCParticles(1);\r
-    //      if(!mcparticles1 && GetDebug() > 0) {\r
-    // printf("AliAnaElectron::MakeAnalysisFillHistograms() -  Second input MCParticles not available!\n");\r
-    //      }\r
-    //    }\r
-    else{\r
-      Int_t npart0 = mcparticles0->GetEntriesFast();\r
-      //Int_t npart1 = 0;\r
-      //if(mcparticles1) npart1 = mcparticles1->GetEntriesFast();\r
-      if(ipart < npart0) aodprimary = (AliAODMCParticle*)mcparticles0->At(ipart);\r
-      //else aodprimary = (AliAODMCParticle*)mcparticles1->At(ipart-npart0);\r
-      if(!aodprimary) {\r
-        printf("AliAnaElectron::GetMCParticle() *** no primary ***:  label %d \n", ipart);\r
-        return 0x0;\r
-      }\r
-    }\r
-  } else {\r
-    printf("AliAnaElectron::GetMCParticle() - Asked for AliAODMCParticle but we have a stack reader.\n");\r
-  }\r
-  return aodprimary;\r
-  \r
-}\r
-\r
-//__________________________________________________________________\r
-Bool_t  AliAnaElectron::IsMcBJet(Double_t jeta, Double_t jphi)\r
-{\r
-  //Check the jet eta,phi against that of the b-quark\r
-  //to decide whether it is an MC B-jet\r
-  Bool_t bjet=kFALSE;\r
-\r
-  //      printf("MTH: McStack ,nparticles=%d \n", stack->GetNtrack() );\r
-\r
-  AliStack* stack = 0x0;\r
-  \r
-  for(Int_t ipart = 0; ipart < 100; ipart++) {\r
-\r
-    Double_t pphi = -999.;\r
-    Double_t peta = -999.;\r
-    Int_t pdg = 0;\r
-    if(GetReader()->ReadStack()) {\r
-      stack = GetMCStack();\r
-      if(!stack) {\r
-       printf("AliAnaElectron::IsMCBJet() *** no stack ***: \n");\r
-       return kFALSE;\r
-      }\r
-      TParticle* primary = stack->Particle(ipart);\r
-      if (!primary) continue;\r
-      pdg = primary->GetPdgCode();\r
-      pphi = primary->Phi();\r
-      peta = primary->Eta();\r
-    } else if(GetReader()->ReadAODMCParticles()) {\r
-      AliAODMCParticle* aodprimary = GetMCParticle(ipart);\r
-      if(!aodprimary) continue;\r
-      pdg = aodprimary->GetPdgCode();\r
-      pphi = aodprimary->Phi();\r
-      peta = aodprimary->Eta();\r
-    }\r
-    if ( TMath::Abs(pdg) != 5) continue;\r
-    \r
-    //      printf("MTH: IsMcBJet : %d, pdg=%d : pt=%f \n", ipart, pdgcode, primary->Pt());\r
-    Double_t dphi = jphi - pphi;\r
-    Double_t deta = jeta - peta;\r
-    Double_t dr = sqrt(deta*deta + dphi*dphi);\r
-    \r
-    if (dr < 0.2) {\r
-      bjet=kTRUE;\r
-      //printf("MTH: **** found matching MC-Bjet: PDG=%d, pt=%f,dr=%f \n", pdgcode, primary->Pt(),dr );\r
-      break;\r
-    }\r
-  }\r
-  return bjet;\r
-\r
-}\r
-\r
-//__________________________________________________________________\r
-Bool_t  AliAnaElectron::IsMcDJet(Double_t jeta, Double_t jphi)\r
-{\r
-  //Check if this jet is a charm jet\r
-  Bool_t cjet=kFALSE;\r
-\r
-  AliStack* stack = 0x0;\r
-\r
-  for(Int_t ipart = 0; ipart < 100; ipart++) {\r
-    \r
-    Double_t pphi = -999.;\r
-    Double_t peta = -999.;\r
-    Int_t pdg = 0;\r
-    if(GetReader()->ReadStack()) {\r
-      stack = GetMCStack();\r
-      if(!stack) {\r
-       printf("AliAnaElectron::IsMCDJet() *** no stack ***: \n");\r
-       return kFALSE;\r
-      }\r
-      TParticle* primary = stack->Particle(ipart);\r
-      if (!primary) continue;\r
-      pdg = primary->GetPdgCode();\r
-      pphi = primary->Phi();\r
-      peta = primary->Eta();\r
-    } else if(GetReader()->ReadAODMCParticles()) {\r
-      AliAODMCParticle* aodprimary = GetMCParticle(ipart);\r
-      if(!aodprimary) continue;\r
-      pdg = aodprimary->GetPdgCode();\r
-      pphi = aodprimary->Phi();\r
-      peta = aodprimary->Eta();\r
-    }\r
-\r
-    if ( TMath::Abs(pdg) != 4) continue;\r
-\r
-    Double_t dphi = jphi - pphi;\r
-    Double_t deta = jeta - peta;\r
-    Double_t dr = sqrt(deta*deta + dphi*dphi);\r
-    \r
-    if (dr < 0.2) {\r
-      cjet=kTRUE;\r
-      break;\r
-    }\r
-  }\r
-\r
-  return cjet;\r
-\r
-}\r
-\r
-//__________________________________________________________________\r
-void AliAnaElectron::Print(const Option_t * opt) const\r
-{\r
-  //Print some relevant parameters set for the analysis\r
-  \r
-  if(! opt)\r
-    return;\r
-  \r
-  printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;\r
-  AliAnaPartCorrBaseClass::Print(" ");\r
-\r
-  printf("Calorimeter            =     %s\n", fCalorimeter.Data()) ;\r
-  printf("pOverE range           =     %f - %f\n",fpOverEmin,fpOverEmax);\r
-  printf("residual cut           =     %f\n",fResidualCut);\r
-  printf("---DVM Btagging\n");\r
-  printf("max IP-cut (e,h)       =     %f\n",fImpactCut);\r
-  printf("min ITS-hits           =     %d\n",fITSCut);\r
-  printf("max dR (e,h)           =     %f\n",fDrCut);\r
-  printf("max pairDCA            =     %f\n",fPairDcaCut);\r
-  printf("max decaylength        =     %f\n",fDecayLenCut);\r
-  printf("min Associated Pt      =     %f\n",fAssocPtCut);\r
-  printf("---IPSig Btagging\n");\r
-  printf("min tag track          =     %d\n",fNTagTrkCut);\r
-  printf("min IP significance    =     %f\n",fIPSigCut);\r
-  printf("    \n") ;\r
-       \r
-} \r
-\r
-//________________________________________________________________________\r
-void AliAnaElectron::ReadHistograms(TList* /* outputList */)\r
-{\r
-  // Needed when Terminate is executed in distributed environment                             \r
-  // Refill analysis histograms of this class with corresponding\r
-  // histograms in output list.   \r
-\r
-  // Histograms of this analsys are kept in the same list as other\r
-  // analysis, recover the position of\r
-  // the first one and then add the next                                                      \r
-  //Int_t index = outputList->IndexOf(outputList->FindObject(GetAddedHistogramsStringToName()+"fh1pOverE"));\r
-\r
-  //Read histograms, must be in the same order as in\r
-  //GetCreateOutputObject.                   \r
-  //fh1pOverE     = (TH1F *) outputList->At(index);\r
-  //fh1dR         = (TH1F *) outputList->At(index++);\r
-  //fh2EledEdx    = (TH2F *) outputList->At(index++);\r
-  //fh2MatchdEdx  = (TH2F *) outputList->At(index++);\r
-  \r
-}\r
-\r
-//__________________________________________________________________\r
-void  AliAnaElectron::Terminate(TList* outputList)\r
-{\r
-\r
-  //Do some plots to end\r
-  //Recover histograms from output histograms list, needed for\r
-  //distributed analysis.                \r
-  //ReadHistograms(outputList);\r
-\r
-  printf(" AliAnaElectron::Terminate()  *** %s Report: %d outputs\n", GetName(), outputList->GetEntries()) ;\r
-\r
-}\r
-\r
diff --git a/PWG4/PartCorrDep/AliAnaElectron.h b/PWG4/PartCorrDep/AliAnaElectron.h
deleted file mode 100755 (executable)
index f630556..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-#ifndef ALIANAELECTRON_H\r
-#define ALIANAELECTRON_H\r
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
- * See cxx source for full Copyright notice     */\r
-/* $Id:  $ */\r
-\r
-//_________________________________________________________________________\r
-//\r
-// Class for the electron identification.\r
-// Clusters from EMCAL matched to tracks are selected \r
-// and kept in the AOD. Few histograms produced.\r
-//\r
-\r
-//-- Author: J.L. Klay (Cal Poly)\r
-\r
-// --- ROOT system ---\r
-class TH2F ;\r
-class TString ;\r
-class TNtuple ;\r
-class TH3F;\r
-class TObjString;\r
-\r
-// --- ANALYSIS system ---\r
-#include "AliAnaPartCorrBaseClass.h"\r
-\r
-class AliAODMCParticle;\r
-class AliCaloTrackReader;\r
-class AliAODTrack;\r
-class TList ;\r
-\r
-class AliAnaElectron : public AliAnaPartCorrBaseClass {\r
-\r
- public: \r
-  AliAnaElectron() ; // default ctor\r
-  virtual ~AliAnaElectron() ; //virtual dtor\r
- private:\r
-  AliAnaElectron(const AliAnaElectron & g) ; // cpy ctor\r
-  AliAnaElectron & operator = (const AliAnaElectron & g) ;//cpy assignment\r
-  \r
- public:\r
-       \r
-  TObjString * GetAnalysisCuts();\r
-  TList      * GetCreateOutputObjects();\r
-\r
-  void Init();\r
-\r
-  void MakeAnalysisFillAOD()  ;\r
-  \r
-  void MakeAnalysisFillHistograms() ; \r
-  \r
-  //B-tagging\r
-  Int_t GetDVMBtag(AliAODTrack * tr); //returns # tracks from secvtx\r
-\r
-  //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 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
-  Bool_t CheckTrack(const AliAODTrack* track,const char* type);  \r
-  Bool_t IsMcBJet(Double_t x, Double_t y);\r
-  Bool_t IsMcDJet(Double_t x, Double_t y);\r
-\r
-  void Print(const Option_t * opt)const;\r
-  \r
-  TString GetCalorimeter()   const {return fCalorimeter ; }\r
-  Double_t GetpOverEmin()   const {return fpOverEmin ; }\r
-  Double_t GetpOverEmax()   const {return fpOverEmax ; }\r
-  Bool_t GetWriteNtuple()   const {return fWriteNtuple ; }\r
-\r
-  Double_t GetDrCut() const { return fDrCut; }\r
-  Double_t GetPairDcaCut() const { return fPairDcaCut; }\r
-  Double_t GetDecayLenCut() const { return fDecayLenCut; }\r
-  Double_t GetImpactCut() const { return fImpactCut; }\r
-  Double_t GetAssocPtCut() const { return fAssocPtCut; }\r
-  Double_t GetMassCut() const { return fMassCut; }\r
-  Double_t GetSdcaCut() const { return fSdcaCut; }\r
-  Int_t    GetITSCut() const { return fITSCut; }\r
-  Int_t    GetNTagTrackCut() const { return fNTagTrkCut; }\r
-  Double_t GetIPSigCut() const { return fIPSigCut; }\r
-  Double_t GetMinClusEne() const { return fMinClusEne; }\r
-\r
-  void SetCalorimeter(TString det)    {fCalorimeter = det ; }\r
-  void SetpOverEmin(Double_t min)     {fpOverEmin = min ; }\r
-  void SetpOverEmax(Double_t max)     {fpOverEmax = max ; }\r
-  void SetResidualCut(Double_t cut)     {fResidualCut = cut ; }\r
-  void SetWriteNtuple(Bool_t val)     {fWriteNtuple = val ; }\r
-\r
-  void SetDrCut(Double_t dr)  { fDrCut = dr; }\r
-  void SetPairDcaCut(Double_t pdca) { fPairDcaCut = pdca; }\r
-  void SetDecayLenCut(Double_t dlen) { fDecayLenCut = dlen; }\r
-  void SetImpactCut(Double_t imp) { fImpactCut = imp; }\r
-  void SetAssocPtCut(Double_t pt) { fAssocPtCut = pt; }\r
-  void SetMassCut(Double_t mass) { fMassCut = mass; }\r
-  void SetSdcaCut(Double_t sdca) { fSdcaCut = sdca; }\r
-  void SetITSCut(Int_t its) { fITSCut = its; }\r
-  void SetNTagTrackCut(Int_t ntr) { fNTagTrkCut = ntr; }\r
-  void SetIPSigCut(Double_t ips) { fIPSigCut = ips; }\r
-  void SetMinClusEne(Double_t ene) { fMinClusEne = ene; }\r
-\r
-  void InitParameters();\r
-\r
-  void Terminate(TList * outputList);\r
-  void ReadHistograms(TList * outputList); //Fill histograms with\r
-                                          //histograms in ouput list,\r
-                                          //needed in Terminate.            \r
-  private:\r
-  //For DVM B-tag method\r
-  Double_t ComputeSignDca(AliAODTrack *track, AliAODTrack *track2 , float cut1);\r
-  //the 2 following functions are internal methods of the b-tagging\r
-  //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
-  //Need a clean way to get the MC info.  An AliAODMCParticle object\r
-  //is returned from whichever source we are operating on\r
-  AliAODMCParticle* GetMCParticle(Int_t part);\r
-  //Get MC B Parent pt\r
-  Double_t GetBParentPt(Int_t label);\r
-  //Get Number of particles in AliAODMCParticle array, if it exists\r
-  Int_t GetNumAODMCParticles();\r
-\r
-  private:\r
-  TString  fCalorimeter;  //! Which detector? EMCAL or PHOS\r
-  Double_t fpOverEmin;    //! Minimum p/E value for Electrons\r
-  Double_t fpOverEmax;    //! Maximum p/E value for Electrons\r
-  Double_t fResidualCut;  //! Track-cluster matching distance\r
-  Double_t fMinClusEne;   //! Min clus energy for matching\r
-\r
-  //DVM B-tagging\r
-  Double_t fDrCut;       //max dR\r
-  Double_t fPairDcaCut;  //max pair-DCA\r
-  Double_t fDecayLenCut; //max 3d-decaylength\r
-  Double_t fImpactCut;   //max track impact param\r
-  Double_t fAssocPtCut;  //min associated pt\r
-  Double_t fMassCut;     //min Minv cut\r
-  Double_t fSdcaCut;     //min signDca\r
-  Int_t   fITSCut;       //min ITS hits (both)\r
-  //IP Sig B-tagging\r
-  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
-  ///////////////////////////////////////\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
-  TH3F *fh3pOverE;     //! p/E for track-cluster matches vs pt vs mult\r
-  TH3F *fh3EOverp;     //! E/p for track-cluster matches vs pt vs mult\r
-  TH3F *fh3pOverE2;     //! p/E for track-cluster matches vs pt vs mult\r
-  TH3F *fh3EOverp2;     //! E/p for track-cluster matches vs pt vs mult\r
-  TH3F *fh3pOverE3;     //! p/E for track-cluster matches vs pt vs mult\r
-  TH3F *fh3EOverp3;     //! E/p for track-cluster matches vs pt vs mult\r
-\r
-  //JLK\r
-  TH2F *fh2pOverE;      //! p/E for track-cluster matches vs pt vs mult         \r
-  TH2F *fh2EOverp;      //! E/p for track-cluster matches vs pt vs mult         \r
-  TH2F *fh2pOverE2;     //! p/E for track-cluster matches vs pt vs mult         \r
-  TH2F *fh2EOverp2;     //! E/p for track-cluster matches vs pt vs mult         \r
-  //JLK\r
-\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 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
-  TH2F* fh2TrackPtVsClusterE;    //!track pt vs. cluster energy\r
-  TH2F* fh2TrackPhiVsClusterPhi; //!track phi vs. cluster phi\r
-  TH2F* fh2TrackEtaVsClusterEta; //!track eta vs. cluster eta\r
-\r
-  //Photonic Electron checks\r
-  TH1F* fh1OpeningAngle; //!opening angle between pairs of photon candidates\r
-  TH1F* fh1MinvPhoton;   //!invariant mass distribution of electron pairs\r
-\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
-\r
-  TH1F * fhPtNPE;  //! Number of non-photonic electron vs transverse momentum \r
-  TH2F * fhPhiNPE; //! Azimuthal angle of non-photonic electron vs transverse momentum \r
-  TH2F * fhEtaNPE; //! Pseudorapidity of non-photonic electron vs tranvserse momentum \r
-\r
-  TH1F * fhPtPE;  //! Number of photonic electron vs transverse momentum \r
-  TH2F * fhPhiPE; //! Azimuthal angle of photonic electron vs transverse momentum \r
-  TH2F * fhEtaPE; //! Pseudorapidity of photonic electron vs tranvserse momentum \r
-\r
-  //These next set do use some MC info.  The first bin of the second\r
-  //dimension is filled for both REAL and MC data, other bins filled\r
-  //only if MC\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
-  TH2F* fhPtNPEleEMCAL;    //!Pt distribution of non-photonic reco\r
-                          //!electrons using EMCAL only\r
-                          //!in EMCAL acceptance\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 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
-  TH1F * fhePlusTagJetPt1x4;  //! IPSig B-tagging : eJet + result for (1 track, ipSignif>4)\r
-  TH1F * fhePlusTagJetPt2x3;  //! IPSig B-tagging : eJet + result for (2 track, ipSignif>3)\r
-  TH1F * fhePlusTagJetPt3x2;  //! IPSig B-tagging : eJet + 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
-  TH2F* fhLeadJetType;   //! How many leading of each tag were found vs jet pt\r
-  TH2F* fhBJetXsiFF;     //! B-tagged jet FF with xsi = log(pt_Jet/pt_Track)\r
-  TH2F* fhBJetPtFF;      //! B-tagged jet FF with pt_Track\r
-  TH2F* fhBJetEtaPhi;    //! B-tagged jet eta-phi distribution\r
-  TH2F* fhNonBJetXsiFF;  //! Non b-tagged jet FF with xsi = log(pt_Jet/pt_Track)\r
-  TH2F* fhNonBJetPtFF;   //! Non b-tagged jet FF with pt_Track\r
-  TH2F* fhNonBJetEtaPhi; //! Non b-tagged jet eta-phi distribution\r
-\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* fhPtTrack;         //!Pt distribution of reco tracks with MC-ID\r
-\r
-  TH2F* fhPtNPEBHadron;    //!correlate our best reconstructed\r
-                          //b-electrons with the b-hadron momentum\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
-  TH1F * fhFakeJetPt1x4;    //! IPSig B-tagging : fake result for (1 track, ipSignif>4)\r
-  TH1F * fhFakeJetPt2x3;    //! IPSig B-tagging : fake result for (2 track, ipSignif>3)\r
-  TH1F * fhFakeJetPt3x2;    //! IPSig B-tagging : fake result for (3 track, ipSignif>2)\r
-\r
-  TH2F* fhDVMJet;        //! DVM jet algo check\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
-  TH2F* fhMCBHadronElePt; //! Pt of B-hadrons vs pt of electron\r
-  TH1F* fhPtMCHadron;     //! Pt distribution of MC charged hadrons (pi,k,p) in EMCAL acceptance\r
-  TH2F* fhPtMCElectron;   //! Pt distribution of MC electrons from various sources in EMCAL\r
-  TH2F* fhMCXYConversion; //! XY distribution of conversion electrons\r
-  TH2F* fhMCRadPtConversion; //! Radius vs. pT distribution of conversion electrons\r
-\r
-  ClassDef(AliAnaElectron,12)\r
-\r
-} ;\r
\r
-\r
-#endif//ALIANAELECTRON_H\r
-\r
-\r
-\r