]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/PartCorrDep/AliAnaElectron.cxx
Correct and clean the vertex retrieval in case of SE or ME analysis
[u/mrichter/AliRoot.git] / PWG4 / PartCorrDep / AliAnaElectron.cxx
index 4f587a4d5465913a0de3e63488d50791b327d12e..00aa6ff54812bd4330a863344ca62f98841fe230 100755 (executable)
@@ -36,7 +36,7 @@
 #include "AliAnaElectron.h" \r
 #include "AliCaloTrackReader.h"\r
 #include "AliMCAnalysisUtils.h"\r
-#include "AliAODCaloCluster.h"\r
+#include "AliVCluster.h"\r
 #include "AliFiducialCut.h"\r
 #include "AliAODTrack.h"\r
 #include "AliAODPid.h"\r
@@ -75,7 +75,7 @@ AliAnaElectron::AliAnaElectron()
   fhPtNPE(0),fhPhiNPE(0),fhEtaNPE(0),\r
   fhPtPE(0),fhPhiPE(0),fhEtaPE(0),\r
   //for comparisons with tracking detectors\r
-  fhPtTrack(0),fhPtHadron(0),fhPtNPEleTPC(0),fhPtNPEleTPCTRD(0),fhPtNPEleTTE(0),\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
@@ -92,6 +92,7 @@ AliAnaElectron::AliAnaElectron()
   //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
@@ -106,7 +107,7 @@ AliAnaElectron::AliAnaElectron()
   InitParameters();\r
 \r
 }\r
-\r
+/*\r
 //____________________________________________________________________________\r
 AliAnaElectron::AliAnaElectron(const AliAnaElectron & g) \r
   : AliAnaPartCorrBaseClass(g),fCalorimeter(g.fCalorimeter),\r
@@ -294,6 +295,7 @@ AliAnaElectron & AliAnaElectron::operator = (const AliAnaElectron & g)
   return *this;\r
   \r
 }\r
+*/\r
 \r
 //____________________________________________________________________________\r
 AliAnaElectron::~AliAnaElectron() \r
@@ -302,6 +304,56 @@ AliAnaElectron::~AliAnaElectron()
 \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
@@ -551,52 +603,7 @@ TList *  AliAnaElectron::GetCreateOutputObjects()
 \r
   }//Histos with MC\r
   \r
-  //Save parameters used for analysis\r
-  TString parList ; //this will be list of parameters used for this analysis.\r
-  char onePar[500] ;\r
-  \r
-  sprintf(onePar,"--- AliAnaElectron ---\n") ;\r
-  parList+=onePar ;    \r
-  sprintf(onePar,"fCalorimeter: %s\n",fCalorimeter.Data()) ;\r
-  parList+=onePar ;  \r
-  sprintf(onePar,"fpOverEmin: %f\n",fpOverEmin) ;\r
-  parList+=onePar ;  \r
-  sprintf(onePar,"fpOverEmax: %f\n",fpOverEmax) ;\r
-  parList+=onePar ;  \r
-  sprintf(onePar,"fResidualCut: %f\n",fResidualCut) ;\r
-  parList+=onePar ;  \r
-  sprintf(onePar,"fMinClusEne: %f\n",fMinClusEne) ;\r
-  parList+=onePar ;\r
-  sprintf(onePar,"---DVM Btagging\n");\r
-  parList+=onePar ;\r
-  sprintf(onePar,"max IP-cut (e,h): %f\n",fImpactCut);\r
-  parList+=onePar ;\r
-  sprintf(onePar,"min ITS-hits: %d\n",fITSCut);\r
-  parList+=onePar ;\r
-  sprintf(onePar,"max dR (e,h): %f\n",fDrCut);\r
-  parList+=onePar ;\r
-  sprintf(onePar,"max pairDCA: %f\n",fPairDcaCut);\r
-  parList+=onePar ;\r
-  sprintf(onePar,"max decaylength: %f\n",fDecayLenCut);\r
-  parList+=onePar ;\r
-  sprintf(onePar,"min Associated Pt: %f\n",fAssocPtCut);\r
-  parList+=onePar ;\r
-  sprintf(onePar,"---IPSig Btagging\n");\r
-  parList+=onePar ;\r
-  sprintf(onePar,"min tag track: %d\n",fNTagTrkCut);\r
-  parList+=onePar ;\r
-  sprintf(onePar,"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
-  TObjString *oString= new TObjString(parList) ;\r
-  outputContainer->Add(oString);\r
-  \r
+\r
   return outputContainer ;\r
   \r
 }\r
@@ -661,8 +668,6 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
   // Also fill some QA histograms\r
   //\r
 \r
-  TObjArray *cl = new TObjArray();\r
-\r
   Double_t bfield = 0.;\r
   if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) bfield = GetReader()->GetBField();\r
 \r
@@ -671,7 +676,8 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
     printf("This class not yet implemented for PHOS\n");\r
     abort();\r
   }\r
-  cl = GetAODEMCAL();\r
+  \r
+  TObjArray *cl = GetAODEMCAL();\r
   \r
   ////////////////////////////////////////////////\r
   //Start from tracks and get associated clusters \r
@@ -758,7 +764,7 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
        if(IsDataMC()) {\r
          //Input from second AOD?\r
          Int_t input = 0;\r
-         if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) input = 1;\r
+         //if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) input = 1;\r
          tmctag = GetMCAnalysisUtils()->CheckOrigin(track->GetLabel(),GetReader(),input);\r
 \r
          if(trkChgHad) fhPtHadron->Fill(track->Pt(),GetMCSource(tmctag));\r
@@ -778,7 +784,7 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
         Double_t minPt   = -1;\r
 \r
        for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
-         AliAODCaloCluster * clus = (AliAODCaloCluster*) (cl->At(iclus));\r
+         AliVCluster * clus = (AliVCluster*) (cl->At(iclus));\r
          if(!clus) continue;\r
 \r
          //As of 11-Oct-2009\r
@@ -792,7 +798,7 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
           if (clus->GetM20()          < 0.03 ) continue;\r
           if (clus->GetM02()          < 0.03 ) continue;\r
          \r
-         Double_t x[3];\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
@@ -832,8 +838,8 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
            if(IsDataMC()) {  \r
              //Do you want the cluster or the track label?\r
              Int_t input = 0;\r
-             if(GetReader()->GetAODEMCALNormalInputEntries() <= iclus) input = 1;\r
-             cmctag = GetMCAnalysisUtils()->CheckOrigin(clus->GetLabel(0),GetReader(),input);\r
+             //if(GetReader()->GetAODEMCALNormalInputEntries() <= iclus) input = 1;\r
+             cmctag = GetMCAnalysisUtils()->CheckOrigin(clus->GetLabel(),GetReader(),input);\r
            }\r
            \r
            if(fWriteNtuple) {\r
@@ -894,7 +900,7 @@ void  AliAnaElectron::MakeAnalysisFillAOD()
            tr.SetDetector("CTS"); //PID determined by CTS\r
          }\r
 \r
-         if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) tr.SetInputFileIndex(1);\r
+         //if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) tr.SetInputFileIndex(1);\r
          //Make this preserve sign of particle\r
          if(track->Charge() < 0) tr.SetPdg(11); //electron is 11\r
          else  tr.SetPdg(-11); //positron is -11\r
@@ -1387,11 +1393,11 @@ Double_t AliAnaElectron::ComputeSignDca(AliAODTrack *tr, AliAODTrack *tr2 , floa
 \r
   Double_t vertex[3] = {-999.,-999.,-999}; //vertex\r
   if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) {\r
-    GetReader()->GetVertex(vertex); //If only one file, get the vertex from there\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
+    //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex);\r
   }\r
   \r
   TVector3 primV(vertex[0],vertex[1],vertex[2]) ;\r
@@ -1808,29 +1814,30 @@ Int_t AliAnaElectron::GetNumAODMCParticles()
 {\r
   //Get the number of AliAODMCParticles, if any\r
   Int_t num = 0;\r
-\r
+  Int_t npart0 = 0;\r
   TClonesArray * mcparticles0 = 0x0;\r
-  TClonesArray * mcparticles1 = 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 && GetDebug() > 0) {\r
-      printf("AliAnaElectron::MakeAnalysisFillHistograms() -  Standard MCParticles not available!\n");\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
+//    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
-\r
-    Int_t npart0 = mcparticles0->GetEntriesFast();\r
-    Int_t npart1 = 0;\r
-    if(mcparticles1) npart1 = mcparticles1->GetEntriesFast();\r
-    Int_t npart = npart0+npart1;\r
-    return npart;\r
+    //Int_t npart1 = 0;\r
+    //if(mcparticles1) npart1 = mcparticles1->GetEntriesFast();\r
+    //Int_t npart = npart0;//+npart1;\r
+    return npart0;\r
 \r
   }\r
 \r
@@ -1840,39 +1847,39 @@ Int_t AliAnaElectron::GetNumAODMCParticles()
 AliAODMCParticle* AliAnaElectron::GetMCParticle(Int_t ipart) \r
 {\r
   //Get the MC particle at position ipart\r
-\r
+  \r
   AliAODMCParticle* aodprimary = 0x0;\r
   TClonesArray * mcparticles0 = 0x0;\r
-  TClonesArray * mcparticles1 = 0x0;\r
-\r
+  //TClonesArray * mcparticles1 = 0x0;\r
+  \r
   if(GetReader()->ReadAODMCParticles()){\r
     //Get the list of MC particles                                                                                                                           \r
     mcparticles0 = GetReader()->GetAODMCParticles(0);\r
-    if(!mcparticles0 && GetDebug() > 0) {\r
-      printf("AliAnaElectron::MakeAnalysisFillHistograms() -  Standard MCParticles not available!\n");\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
+    //    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
-\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
 //__________________________________________________________________\r