Possiblity to run the simulation starting from an external root file containing geome...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 13 Jul 2007 11:08:26 +0000 (11:08 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 13 Jul 2007 11:08:26 +0000 (11:08 +0000)
STEER/AliMC.cxx
STEER/AliRun.cxx
STEER/AliRun.h
STEER/AliSimulation.cxx
macros/Config.C

index 8b14fc7..531be41 100644 (file)
@@ -28,6 +28,7 @@
 #include <TStopwatch.h>
 #include <TSystem.h>
 #include <TVirtualMC.h>
+#include <TROOT.h>
  
 #include "AliLog.h"
 #include "AliDetector.h"
@@ -42,6 +43,9 @@
 #include "AliTrackReference.h"
 #include "AliSimulation.h"
 #include "AliGeomManager.h"
+#include "AliCDBManager.h"
+#include "AliCDBStorage.h"
+#include "AliCDBEntry.h"
 
 
 ClassImp(AliMC)
@@ -152,15 +156,25 @@ void  AliMC::ConstructGeometry()
   // at InitGeometry().
   //
 
-  if(gAlice->IsRootGeometry()){
-    // Load geometry
-    const char *geomfilename = gAlice->GetGeometryFileName();
-    if(gSystem->ExpandPathName(geomfilename)){
-      AliInfo(Form("Loading geometry from file:\n %40s\n\n",geomfilename));
-      TGeoManager::Import(geomfilename);
+  if(gAlice->IsRootGeometry()){ //load geometry either from CDB or from file
+    if(gAlice->IsGeomFromCDB()){
+      AliInfo("Loading geometry from CDB default storage");
+      AliCDBPath path("GRP","Geometry","Data");
+      AliCDBEntry *entry=AliCDBManager::Instance()->Get(path.GetPath());
+      if(!entry) AliFatal("Unable to load geometry from CDB!");
+      entry->SetOwner(0);
+      gGeoManager = (TGeoManager*) entry->GetObject();
+      if (!gGeoManager) AliFatal("TGeoManager object not found in the specified CDB entry!");
     }else{
-      AliInfo(Form("Geometry file %40s not found!\n",geomfilename));
-      return;
+      // Load geometry
+      const char *geomfilename = gAlice->GetGeometryFileName();
+      if(gSystem->ExpandPathName(geomfilename)){
+       AliInfo(Form("Loading geometry from file:\n %40s",geomfilename));
+       TGeoManager::Import(geomfilename);
+      }else{
+       AliInfo(Form("Geometry file %40s not found!\n",geomfilename));
+       return;
+      }
     }
   }else{
     // Create modules, materials, geometry
@@ -185,8 +199,10 @@ Bool_t  AliMC::MisalignGeometry()
 {
 // Call misalignment code if AliSimulation object was defined.
 
-   //Set alignable volumes for the whole geometry
-   SetAllAlignableVolumes();
+   if(!gAlice->IsRootGeometry()){
+     //Set alignable volumes for the whole geometry
+     SetAllAlignableVolumes();
+   }
    // Misalign geometry via AliSimulation instance
    if (!AliSimulation::GetInstance()) return kFALSE;
    AliGeomManager::SetGeometry(gGeoManager);
index 7d48436..1be7952 100644 (file)
@@ -90,6 +90,7 @@ AliRun::AliRun():
   fRandom(0),
   fBaseFileName(""),
   fIsRootGeometry(kFALSE),
+  fGeometryFromCDB(kFALSE),
   fGeometryFileName(""),
   fTriggerDescriptor(""),
   fRunLoader(0x0)
@@ -121,6 +122,7 @@ AliRun::AliRun(const AliRun& arun):
   fRandom(0),
   fBaseFileName(""),
   fIsRootGeometry(kFALSE),
+  fGeometryFromCDB(kFALSE),
   fGeometryFileName(""),
   fTriggerDescriptor(""),
   fRunLoader(0x0)
@@ -151,6 +153,7 @@ AliRun::AliRun(const char *name, const char *title):
   fRandom(new TRandom3()),
   fBaseFileName(""),
   fIsRootGeometry(kFALSE),
+  fGeometryFromCDB(kFALSE),
   fGeometryFileName(""),
   fTriggerDescriptor(""),
   fRunLoader(0x0)
@@ -286,6 +289,22 @@ void AliRun::SetRootGeometry(Bool_t flag)
    fIsRootGeometry = flag;
    if (flag && gMC) gMC->SetRootGeometry();
 }
+
+//_______________________________________________________________________
+void AliRun::SetGeometryFromCDB()
+{
+  // Set the loading of geometry from cdb instead of creating it
+  // A default CDB storage needs to be set before this method is called
+  if(AliCDBManager::Instance()->IsDefaultStorageSet()){
+    SetRootGeometry();
+    fGeometryFromCDB = kTRUE;
+  }else{
+    AliError("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    AliError("Loading of geometry from CDB ignored. First set a default CDB storage!");
+    AliError("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+  }
+}
+
 //_______________________________________________________________________
 void AliRun::SetField(Int_t type, Int_t version, Float_t scale,
                      Float_t maxField, const char* filename)
index a87930a..518adf3 100644 (file)
@@ -82,7 +82,12 @@ public:
    Bool_t         IsRootGeometry() const {return fIsRootGeometry;}
    void           SetRootGeometry(Bool_t flag=kTRUE);
    const char*    GetGeometryFileName() const {return fGeometryFileName.Data();}
-   void           SetGeometryFileName(const char *name) {fGeometryFileName = name;}
+   void           SetGeometryFromFile(const char *filename) {
+     SetRootGeometry();
+     fGeometryFileName = filename;
+   }
+   void           SetGeometryFromCDB();
+   Bool_t         IsGeomFromCDB() const {return fGeometryFromCDB;}
    const char*    GetTriggerDescriptor() const {return fTriggerDescriptor.Data();}
    void           SetTriggerDescriptor(const char *name) {fTriggerDescriptor = name;}
    virtual  void  ResetDigits();
@@ -160,6 +165,7 @@ protected:
   TRandom       *fRandom;            //  Pointer to the random number generator
   TString        fBaseFileName;      //  Name of the base root file
   Bool_t         fIsRootGeometry;    //! Flag telling if the geometry is loaded from file
+  Bool_t         fGeometryFromCDB;  //! Flag telling if the geometry is to be loaded from OCDB
   TString        fGeometryFileName;  //! Name of the geometry file
   TString        fTriggerDescriptor; //  Trigger descriptor identifier
   AliRunLoader  *fRunLoader;         //!run getter - written as a separate object
index e4bbd9a..506b71f 100644 (file)
@@ -276,7 +276,7 @@ void AliSimulation::InitCDBStorage()
   {
     AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
     AliWarning("Default CDB storage has been already set !");
-    AliWarning(Form("Ignoring the default storage declared in AliReconstruction: %s",fCDBUri.Data()));
+    AliWarning(Form("Ignoring the default storage declared in AliSimulation: %s",fCDBUri.Data()));
     AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
     fCDBUri = "";
   }
@@ -385,7 +385,7 @@ Bool_t AliSimulation::MisalignGeometry(AliRunLoader *runLoader)
   }
 
   // Export ideal geometry 
-  AliGeomManager::GetGeometry()->Export("geometry.root");
+  if(!gAlice->IsRootGeometry()) AliGeomManager::GetGeometry()->Export("geometry.root");
 
   // Load alignment data from CDB and apply to geometry through AliGeomManager
   if(fLoadAlignFromCDB){
index 5cd7e87..0c4521a 100644 (file)
@@ -60,6 +60,11 @@ void Config()
 
     new     TGeant3TGeo("C++ Interface to Geant3");
 
+    if(!AliCDBManager::Instance()->IsDefaultStorageSet()){
+      AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT");
+      AliCDBManager::Instance()->SetRun(0);
+    }
+
     AliRunLoader* rl=0x0;
 
     AliLog::Message(AliLog::kInfo, "Creating Run Loader", "Config.C", "Config.C", "Config()"," Config.C", __LINE__);
@@ -75,6 +80,8 @@ void Config()
     rl->SetCompressionLevel(2);
     rl->SetNumberOfEventsPerFile(3);
     gAlice->SetRunLoader(rl);
+    // gAlice->SetGeometryFromFile("geometry.root");
+    // gAlice->SetGeometryFromCDB();
 
     // Set the trigger configuration
     gAlice->SetTriggerDescriptor("Pb-Pb");