Move checking of run and geometry name from AliEMCALv0::CreateGeometry() to AliEMCAL...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 3 Jul 2011 18:50:43 +0000 (18:50 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 3 Jul 2011 18:50:43 +0000 (18:50 +0000)
Do not produce Fatal but initialize the geometry not to the one specified in the Config.C but to the real corresponding geometry
to a given run number. The run number is obtained from OCDB.
Partial solution to request from savannah #83881

EMCAL/AliEMCAL.cxx
EMCAL/AliEMCAL.h
EMCAL/AliEMCALv0.cxx

index 55bb424..9eebc52 100644 (file)
@@ -39,8 +39,11 @@ class TFile;
 
 // --- AliRoot header files ---
 #include "AliMagF.h"
+#include "AliLog.h"
 #include "AliEMCAL.h"
 #include "AliRun.h"
+#include "AliRunLoader.h"
+#include "AliCDBManager.h"
 #include "AliEMCALLoader.h"
 #include "AliEMCALSDigitizer.h"
 #include "AliEMCALDigitizer.h"
@@ -59,7 +62,6 @@ AliEMCAL::AliEMCAL()
     fBirkC2(0.),
     fGeometry(0), 
     fCheckRunNumberAndGeoVersion(kTRUE)
-
 {
   // Default ctor 
   fName = "EMCAL" ;
@@ -76,7 +78,6 @@ AliEMCAL::AliEMCAL(const char* name, const char* title)
     fBirkC2(0.),
     fGeometry(0), 
     fCheckRunNumberAndGeoVersion(kTRUE)
-
 {
   //   ctor : title is used to identify the layout
   InitConstants();
@@ -95,7 +96,7 @@ void AliEMCAL::InitConstants()
   fBirkC0 = 1;
   fBirkC1 = 0.013/1.032;
   fBirkC2 = 9.6e-6/(1.032 * 1.032);
-  }
+}
 
 //Not needed, modify $ALICE_ROOT/data/galice.cuts instead.
 //Load the modified one in the configuration file with SetTransPar
@@ -306,3 +307,55 @@ AliLoader* AliEMCAL::MakeLoader(const char* topfoldername)
  fLoader = new AliEMCALLoader(GetName(),topfoldername);
  return fLoader;
 }
+
+//____________________________________________________________________________
+
+AliEMCALGeometry* AliEMCAL::GetGeometry() const
+{
+  //Initializes and returns geometry
+  
+  //Check if run number and requested geometry correspond to the same geometry as
+  //in real data taking. To prevent errors in official simulation productions
+  if(!(AliEMCALGeometry::GetInstance()))
+  {
+    if(!fCheckRunNumberAndGeoVersion){// Set geometry with the name used in the configuration file
+      return AliEMCALGeometry::GetInstance(GetTitle(),"EMCAL") ;
+    }
+    else{//Check run number and version and set the corresponding one.
+      //Get run number
+      //AliRunLoader *rl = AliRunLoader::Instance();
+      //Int_t runNumber = rl->GetRunNumber();
+      
+      AliCDBManager* man = AliCDBManager::Instance();
+      Int_t runNumber = man->GetRun();
+      
+      //Instanciate geometry depending on the run number
+      TString geoName(GetTitle());
+      if(runNumber > 104064 && runNumber <= 140000 ){//2009-2010 runs
+        //First year geometry, 4 SM.
+        
+        if(!geoName.Contains("FIRSTYEARV1")){ 
+          AliInfo(Form("*** ATTENTION *** \n \t Specified geometry name <<%s>> for run %d is not considered! \n \t In use <<EMCAL_FIRSTYEARV1>>, check run number and year \n ",
+                       geoName.Data(),runNumber)); }
+        else {
+          AliDebug(1,"Initialized geometry with name <<EMCAL_FIRSTYEARV1>>");}
+        
+        return AliEMCALGeometry::GetInstance("EMCAL_FIRSTYEARV1","EMCAL") ;// Set geometry with the name used in the configuration file
+      }
+      else{ //Default geometry
+        //Complete EMCAL geometry, 10 SM.
+  
+        if(!geoName.Contains("COMPLETEV1")){
+          AliInfo(Form("*** ATTENTION *** \n \t Specified geometry name <<%s>>  for run %d is  not considered! \n \t In use <<EMCAL_COMPLETEV1>>, check run number and year \n ",
+                       geoName.Data(),runNumber));}
+        else {
+          AliDebug(1,"Initialized geometry with name <<EMCAL_COMPLETEV1>>");}
+
+        return AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1","EMCAL") ;// Set geometry with the name used in the configuration file
+      }
+    }
+  }// Init geometry for the first time
+  
+  return AliEMCALGeometry::GetInstance();
+    
+}
index 63ba671..130481b 100644 (file)
@@ -60,8 +60,8 @@ class AliEMCAL : public AliDetector {
   virtual void  Digits2Raw();
   
   virtual void  FinishRun() {}                  
-  virtual AliEMCALGeometry * GetGeometry() const 
-    {return AliEMCALGeometry::GetInstance(GetTitle(),"") ;  }   
+  virtual AliEMCALGeometry * GetGeometry() const ;
+   // {return AliEMCALGeometry::GetInstance(GetTitle(),"") ;  }   
   virtual void    Hits2SDigits();
   virtual Int_t   IsVersion(void) const = 0 ;   
   
@@ -84,7 +84,7 @@ protected:
 
   AliEMCALGeometry* fGeometry;              //!
   Bool_t   fCheckRunNumberAndGeoVersion;    // Check if run number corresponds to the requested geometry and V1 is used
-
+  
 private:
   AliEMCAL(const AliEMCAL& emcal);
   AliEMCAL & operator = (const AliEMCAL & /*rvalue*/);
index bfedfdb..26fcb6b 100644 (file)
@@ -43,7 +43,6 @@
 
 // --- AliRoot header files ---
 #include "AliRun.h"
-#include "AliRunLoader.h"
 #include "AliLog.h"
 #include "AliGeomManager.h"
 
@@ -99,8 +98,11 @@ AliEMCALv0::AliEMCALv0(const char *name, const char *title)
   fGeometry = g;
   fSampleWidth = double(g->GetECPbRadThick()+g->GetECScintThick());
   if(gn.Contains("V1")) fSampleWidth += 2.*g->GetTrd1BondPaperThick();
-  printf("<I> AliEMCALv0::AliEMCALv : fGeometry %p : gMC %p : fSampleWidth %5.4f\n", 
-        fGeometry, gMC, fSampleWidth);
+  AliDebug(2,Form("fGeometry %p : gMC %p : fSampleWidth %5.4f\n", 
+        fGeometry, gMC, fSampleWidth));
+  //Set geometry name again, in case it was changed during the initialization of the geometry.
+  SetTitle(fGeometry->GetEMCGeometry()->GetName());
+
 }
 
 //______________________________________________________________________
@@ -117,33 +119,6 @@ void AliEMCALv0::CreateGeometry()
     Error("CreateGeometry","EMCAL Geometry class has not been set up.");
   } // end if
 
-  //Check if run number and requested geometry correspond to the same geometry as
-  //in real data taking. To prevent errors in official productions
-  if(fCheckRunNumberAndGeoVersion){
-    AliRunLoader *rl = AliRunLoader::Instance();
-    Int_t runNumber = rl->GetRunNumber();
-    TString geoName = geom->GetEMCGeometry()->GetGeoName();
-    if(!geoName.Contains("V1")) {
-      AliFatal(Form("Add <<V1>> at the end when setting EMCAL geometry name <<%s>>", geoName.Data()));
-    }
-    else if(runNumber > 104064){//Check runs with collisions since year 2009
-      Bool_t ok = kTRUE;
-      if(runNumber > 140000){ // run transition year 2010-2011 
-        if(geoName.Contains("FIRSTYEAR")) ok = kFALSE;
-      }
-      else {
-        if(geoName.Contains("COMPLETE"))  ok = kFALSE;
-      }
-      
-      if(!ok) {
-        AliFatal(Form("Run number -%d-, does not correspond to the requested geometry <<%s>> with -%d- SuperModules", 
-                      runNumber, geoName.Data(), geom->GetNumberOfSuperModules()));
-      }
-      
-      AliDebug(0,Form("Run number %d and geometry  %s, N Super Modules %d\n",
-                      runNumber, geoName.Data(), geom->GetNumberOfSuperModules()));
-    }
-  }
   // Get pointer to the array containing media indices
   fIdTmedArr = fIdtmed->GetArray() - 1599 ;