]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - JETAN/AliJetESDReader.cxx
Fix for ITS nsigma (Annalisa)
[u/mrichter/AliRoot.git] / JETAN / AliJetESDReader.cxx
index 6675a5d5b48e1c9ac9dcf74571ee4ce3032c56ae..c2247426407f78d69c1d9b6dd2144fd166f9435c 100755 (executable)
 // ESD reader for jet analysis
 // Authors: Mercedes Lopez Noriega (mercedes.lopez.noriega@cern.ch)
 //          Magali Estienne <magali.estienne@subatech.in2p3.fr>
+//
+// **February 2011
+// implemented standard geometry (AliEMCALGeometry) instead of dummy one (AliJetDummyGeo)
+// moved geometry definition in AliJetReader
+// marco.bregant@subatech.in2p3.fr
 //------------------------------------------------------------------------- 
 
 // --- Standard library ---
@@ -25,6 +30,7 @@
 
 // --- ROOT system ---
 #include <TSystem.h>
+#include <TString.h>
 #include <TStopwatch.h>
 #include <TLorentzVector.h>
 #include <TVector3.h>
 #include "AliJetESDReader.h"
 #include "AliJetESDReaderHeader.h"
 #include "AliESDEvent.h"
+#include "AliVEvent.h"
 #include "AliESD.h"
 #include "AliESDtrack.h"
-#include "AliJetDummyGeo.h"
-#include "AliJetFillUnitArrayTracks.h"
-#include "AliJetFillUnitArrayEMCalDigits.h"
+#include "AliEMCALGeometry.h"
+#include "AliEMCALEMCGeometry.h"
+#include "AliJetESDFillUnitArrayTracks.h"
+#include "AliJetESDFillUnitArrayEMCalDigits.h"
+#include "AliJetHadronCorrectionv1.h"
 #include "AliJetUnitArray.h"
 #include "AliAnalysisTask.h"
+#include "AliOADBContainer.h"
 
+using std::cout;
+using std::endl;
 ClassImp(AliJetESDReader)
 
 AliJetESDReader::AliJetESDReader():
-  AliJetReader(),  
-  fGeom(0),
-  fChain(0x0),
-  fTree(0x0),
-  fESD(0x0),
+  AliJetReader(), 
   fHadCorr(0x0),
   fTpcGrid(0x0),
   fEmcalGrid(0x0),
@@ -66,10 +74,10 @@ AliJetESDReader::AliJetESDReader():
   fGrid2(0),
   fGrid3(0),
   fGrid4(0),
-  fPtCut(0),
-  fHCorrection(0),
-  fECorrection(0),
-  fEFlag(kFALSE),
+  fApplyElectronCorrection(kFALSE),
+  fApplyMIPCorrection(kTRUE),
+  fApplyFractionHadronicCorrection(kFALSE),
+  fFractionHadronicCorrection(0.3),
   fNumUnits(0),
   fDebug(0),
   fMass(0),
@@ -79,7 +87,6 @@ AliJetESDReader::AliJetESDReader():
   fDZ(0),
   fNeta(0),
   fNphi(0),
-  fArrayInitialised(0),
   fRefArray(0x0),
   fProcId(kFALSE)
 {
@@ -125,9 +132,7 @@ void AliJetESDReader::OpenInputFiles()
        
        if (strstr(name,pattern)){
         printf("Adding %s\n",name);
-        char path[256];
-        sprintf(path,"%s/%s/AliESDs.root",dirName,name);
-        fChain->AddFile(path);
+        fChain->AddFile(Form("%s/%s/AliESDs.root",dirName,name));
         a++;
        }
    }
@@ -151,8 +156,70 @@ void AliJetESDReader::OpenInputFiles()
 
 }
 
+//__________________________________________________________
+void AliJetESDReader::SetApplyMIPCorrection(Bool_t val)
+{
+  //
+  // Set flag to apply MIP correction fApplyMIPCorrection
+  // - exclusive with fApplyFractionHadronicCorrection
+  //
+
+  fApplyMIPCorrection = val;
+  if(fApplyMIPCorrection == kTRUE)
+    {
+      SetApplyFractionHadronicCorrection(kFALSE);
+      printf("Enabling MIP Correction \n");
+    }
+  else 
+    {
+      printf("Disabling MIP Correction \n");
+    }
+}
+
+//__________________________________________________________
+void AliJetESDReader::SetApplyFractionHadronicCorrection(Bool_t val)
+{
+  //
+  // Set flag to apply EMC hadronic correction fApplyFractionHadronicCorrection
+  // - exclusive with fApplyMIPCorrection
+  //
+
+  fApplyFractionHadronicCorrection = val;
+  if(fApplyFractionHadronicCorrection == kTRUE)
+    {
+      SetApplyMIPCorrection(kFALSE);
+      printf("Enabling Fraction Hadronic Correction \n");
+    }
+  else 
+    {
+      printf("Disabling Fraction Hadronic Correction \n");
+    }
+}
+
+//__________________________________________________________
+void AliJetESDReader::SetFractionHadronicCorrection(Double_t val)
+{
+  //
+  // Set value to fFractionHadronicCorrection (default is 0.3)
+  // apply EMC hadronic correction fApplyFractionHadronicCorrection
+  // - exclusive with fApplyMIPCorrection
+  //
+
+  fFractionHadronicCorrection = val;
+  if(fFractionHadronicCorrection > 0.0 && fFractionHadronicCorrection <= 1.0)
+    {
+      SetApplyFractionHadronicCorrection(kTRUE);
+      printf("Fraction Hadronic Correction %1.3f \n",fFractionHadronicCorrection);
+    }
+  else 
+    {
+      SetApplyFractionHadronicCorrection(kFALSE);
+    }
+}
+
+
 //____________________________________________________________________________
-void AliJetESDReader::SetInputEvent(TObject* esd, TObject* /*aod*/, TObject* /*mc*/) {
+void AliJetESDReader::SetInputEvent(const TObject* esd, const TObject* /*aod*/, const TObject* /*mc*/) {
     // Connect the tree
      fESD   = (AliESDEvent*) esd;
 }
@@ -237,8 +304,11 @@ void AliJetESDReader::CreateTasks(TChain* tree)
   fDZ = fReaderHeader->GetDZ();
   fTree = tree;
 
-  // Init EMCAL geometry 
-  SetEMCALGeometry();
+  // Init EMCAL geometry, if needed
+   if(fGeom == 0)
+         SetEMCALGeometry();
+       else Info(" SetEMCALGeometry","was already done.. it's called just once !!");
+
   // Init parameters
   InitParameters();
   // Create and init unit array
@@ -247,7 +317,7 @@ void AliJetESDReader::CreateTasks(TChain* tree)
   // Create global reader task for analysis 
   fFillUnitArray = new TTask("fFillUnitArray","Fill unit array jet finder");
   // Create a task for to fill the charged particle information 
-  fFillUAFromTracks = new AliJetFillUnitArrayTracks(); 
+  fFillUAFromTracks = new AliJetESDFillUnitArrayTracks(); 
   fFillUAFromTracks->SetReaderHeader(fReaderHeader);
   fFillUAFromTracks->SetGeom(fGeom);
   fFillUAFromTracks->SetTPCGrid(fTpcGrid);
@@ -260,15 +330,17 @@ void AliJetESDReader::CreateTasks(TChain* tree)
       fFillUAFromTracks->SetGrid3(fGrid3);
       fFillUAFromTracks->SetGrid4(fGrid4);
     }
-  fFillUAFromTracks->SetHadCorrection(fHCorrection);
+  fFillUAFromTracks->SetApplyMIPCorrection(fApplyMIPCorrection);
   fFillUAFromTracks->SetHadCorrector(fHadCorr);
   // Create a task for to fill the neutral particle information 
-  fFillUAFromEMCalDigits = new AliJetFillUnitArrayEMCalDigits();
+  fFillUAFromEMCalDigits = new AliJetESDFillUnitArrayEMCalDigits();
   fFillUAFromEMCalDigits->SetReaderHeader(fReaderHeader);
   fFillUAFromEMCalDigits->SetGeom(fGeom);
   fFillUAFromEMCalDigits->SetTPCGrid(fTpcGrid);
   fFillUAFromEMCalDigits->SetEMCalGrid(fEmcalGrid);
-  fFillUAFromEMCalDigits->SetEleCorrection(fECorrection);
+  fFillUAFromEMCalDigits->SetApplyFractionHadronicCorrection(fApplyFractionHadronicCorrection);
+  fFillUAFromEMCalDigits->SetFractionHadronicCorrection(fFractionHadronicCorrection);
+   fFillUAFromEMCalDigits->SetApplyElectronCorrection(fApplyElectronCorrection);
   // Add the task to global task
   fFillUnitArray->Add(fFillUAFromTracks);
   fFillUnitArray->Add(fFillUAFromEMCalDigits);
@@ -289,7 +361,6 @@ Bool_t AliJetESDReader::ExecTasks(Bool_t procid, TRefArray* refArray)
 
   fProcId = procid;
   fRefArray = refArray;
-  vector<Float_t> vtmp(3);
 
   // clear momentum array
   ClearArray();
@@ -335,48 +406,19 @@ Bool_t AliJetESDReader::ExecTasks(Bool_t procid, TRefArray* refArray)
   return kTRUE;
 }
 
-//____________________________________________________________________________
-Bool_t AliJetESDReader::SetEMCALGeometry()
-{
-  // 
-  // Set the EMCal Geometry
-  //
-
-  if (!fTree->GetFile()) 
-    return kFALSE;
-
-  TString geomFile(fTree->GetFile()->GetName());
-  geomFile.ReplaceAll("AliESDs", "geometry");
-  
-  // temporary workaround for PROOF bug #18505
-  geomFile.ReplaceAll("#geometry.root#geometry.root", "#geometry.root");
-  if(fDebug>1) printf("Current geometry file %s \n", geomFile.Data());
-
-  // Define EMCAL geometry to be able to read ESDs
-  fGeom = AliJetDummyGeo::GetInstance();
-  if (fGeom == 0)
-    fGeom = AliJetDummyGeo::GetInstance("EMCAL_COMPLETE","EMCAL");
-  
-  // To be setted to run some AliEMCALGeometry functions
-  TGeoManager::Import(geomFile);
-  fGeom->GetTransformationForSM();  
-  printf("\n EMCal Geometry set ! \n");
-  
-  return kTRUE;
-}
 
 //____________________________________________________________________________  
 void AliJetESDReader::InitParameters()
 {
   // Initialise parameters
   fOpt = fReaderHeader->GetDetector();
-  fHadCorr        = 0;          // For hadron correction
+  //  fHadCorr        = 0;          // For hadron correction
   if(fEFlag==kFALSE){
     if(fOpt==0 || fOpt==1)  
       fECorrection    = 0;        // For electron correction
     else fECorrection = 1;        // For electron correction
   }
-  fNumUnits       = fGeom->GetNCells();      // Number of cells in EMCAL
+  fNumUnits       = fGeom->GetEMCGeometry()->GetNCells();      // Number of cells in EMCAL
   if(fDebug>1) printf("\n EMCal parameters initiated ! \n");
 }
 
@@ -415,46 +457,37 @@ void AliJetESDReader::InitUnitArray()
          // Define a grid of cell for the gaps between SM
          Double_t phimin0 = 0., phimin1 = 0., phimin2 = 0., phimin3 = 0., phimin4 = 0.;
          Double_t phimax0 = 0., phimax1 = 0., phimax2 = 0., phimax3 = 0., phimax4 = 0.;
-         fGeom->GetPhiBoundariesOfSMGap(0,phimin0,phimax0);
+         fGeom->GetEMCGeometry()->GetPhiBoundariesOfSMGap(0,phimin0,phimax0);
          fGrid0 = new AliJetGrid(0,95,phimin0,phimax0,-0.7,0.7); // 0.015 x 0.015
          fGrid0->SetGridType(0);
          fGrid0->SetMatrixIndexes();
          fGrid0->SetIndexIJ();
          n0 = fGrid0->GetNEntries();
-         fGeom->GetPhiBoundariesOfSMGap(1,phimin1,phimax1);
+         fGeom->GetEMCGeometry()->GetPhiBoundariesOfSMGap(1,phimin1,phimax1);
          fGrid1 = new AliJetGrid(0,95,phimin1,phimax1,-0.7,0.7); // 0.015 x 0.015
          fGrid1->SetGridType(0);
          fGrid1->SetMatrixIndexes();
          fGrid1->SetIndexIJ();
          n1 = fGrid1->GetNEntries();
-         fGeom->GetPhiBoundariesOfSMGap(2,phimin2,phimax2);
+         fGeom->GetEMCGeometry()->GetPhiBoundariesOfSMGap(2,phimin2,phimax2);
          fGrid2 = new AliJetGrid(0,95,phimin2,phimax2,-0.7,0.7); // 0.015 x 0.015
          fGrid2->SetGridType(0);
          fGrid2->SetMatrixIndexes();
          fGrid2->SetIndexIJ();
          n2 = fGrid2->GetNEntries();
-         fGeom->GetPhiBoundariesOfSMGap(3,phimin3,phimax3);
+         fGeom->GetEMCGeometry()->GetPhiBoundariesOfSMGap(3,phimin3,phimax3);
          fGrid3 = new AliJetGrid(0,95,phimin3,phimax3,-0.7,0.7); // 0.015 x 0.015
          fGrid3->SetGridType(0);  
          fGrid3->SetMatrixIndexes();
          fGrid3->SetIndexIJ();
          n3 = fGrid3->GetNEntries();
-         fGeom->GetPhiBoundariesOfSMGap(4,phimin4,phimax4);
+         fGeom->GetEMCGeometry()->GetPhiBoundariesOfSMGap(4,phimin4,phimax4);
          fGrid4 = new AliJetGrid(0,95,phimin4,phimax4,-0.7,0.7); // 0.015 x 0.015
          fGrid4->SetGridType(0);
          fGrid4->SetMatrixIndexes();
          fGrid4->SetIndexIJ();
          n4 = fGrid4->GetNEntries();
 
-         if(fDebug>1) 
-           {
-             cout << "n0 cells: " << n0 << "phimin0: " << phimin0 << ", phimax0: " << phimax0 << endl;
-             cout << "n1 cells: " << n1 << "phimin1: " << phimin1 << ", phimax1: " << phimax1 << endl;
-             cout << "n2 cells: " << n2 << "phimin2: " << phimin2 << ", phimax2: " << phimax2 << endl;
-             cout << "n3 cells: " << n3 << "phimin3: " << phimin3 << ", phimax3: " << phimax3 << endl;
-             cout << "n4 cells: " << n4 << "phimin4: " << phimin4 << ", phimax4: " << phimax4 << endl;
-           }
-         
          nGaps = n0+n1+n2+n3+n4;
 
        }