]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliSimulation.cxx
Correcting the previous numerical protection.
[u/mrichter/AliRoot.git] / STEER / AliSimulation.cxx
index 61bdac1ef8ff5d50091bfbcbe4f022294a2e1070..5b35373c8674e945b6bdf3e991780957a85ab34e 100644 (file)
 #include "AliCDBManager.h"
 #include "AliAlignObj.h"
 #include "AliCentralTrigger.h"
-#include "AliDAQConfig.h"
+#include "AliDAQ.h"
 #include "AliDigitizer.h"
 #include "AliGenerator.h"
 #include "AliLog.h"
@@ -158,7 +158,8 @@ AliSimulation::AliSimulation(const char* configFileName, const char* cdbUri,
   fAlignObjArray(NULL),
   fUseBkgrdVertex(kTRUE),
   fRegionOfInterest(kFALSE),
-  fCDBUri(cdbUri)
+  fCDBUri(cdbUri),
+  fSpecCDBUri()
 {
 // create simulation object with default parameters
 
@@ -190,7 +191,8 @@ AliSimulation::AliSimulation(const AliSimulation& sim) :
   fAlignObjArray(NULL),
   fUseBkgrdVertex(sim.fUseBkgrdVertex),
   fRegionOfInterest(sim.fRegionOfInterest),
-  fCDBUri(sim.fCDBUri)
+  fCDBUri(sim.fCDBUri),
+  fSpecCDBUri()
 {
 // copy constructor
 
@@ -204,6 +206,11 @@ AliSimulation::AliSimulation(const AliSimulation& sim) :
     if (!sim.fBkgrdFileNames->At(i)) continue;
     fBkgrdFileNames->Add(sim.fBkgrdFileNames->At(i)->Clone());
   }
+
+  for (Int_t i = 0; i < sim.fSpecCDBUri.GetEntriesFast(); i++) {
+    if (sim.fSpecCDBUri[i]) fSpecCDBUri.Add(sim.fSpecCDBUri[i]->Clone());
+  }
+
 }
 
 //_____________________________________________________________________________
@@ -229,6 +236,8 @@ AliSimulation::~AliSimulation()
     fBkgrdFileNames->Delete();
     delete fBkgrdFileNames;
   }
+
+  fSpecCDBUri.Delete();
 }
 
 
@@ -241,37 +250,57 @@ void AliSimulation::SetNumberOfEvents(Int_t nEvents)
 }
 
 //_____________________________________________________________________________
-void AliSimulation::InitCDBStorage(const char* uri)
+void AliSimulation::InitCDBStorage()
 {
 // activate a default CDB storage
 // First check if we have any CDB storage set, because it is used 
 // to retrieve the calibration and alignment constants
 
   AliCDBManager* man = AliCDBManager::Instance();
-  if (!man->IsDefaultStorageSet())
+  if (man->IsDefaultStorageSet())
   {
-    AliWarningClass("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
-    AliWarningClass("Default CDB storage not yet set");
-    AliWarningClass(Form("Using default storage declared in AliSimulation: %s",uri));
-    AliWarningClass("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
-    SetDefaultStorage(uri);
-  }  
+    AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    AliWarning("Default CDB storage has been already set !");
+    AliWarning(Form("Ignoring the default storage declared in AliReconstruction: %s",fCDBUri.Data()));
+    AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    fCDBUri = "";
+  }
+  else {
+    AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    AliWarning(Form("Default CDB storage is set to: %s",fCDBUri.Data()));
+    AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    man->SetDefaultStorage(fCDBUri);
+  }
+
+  // Now activate the detector specific CDB storage locations
+  for (Int_t i = 0; i < fSpecCDBUri.GetEntriesFast(); i++) {
+    TObject* obj = fSpecCDBUri[i];
+    if (!obj) continue;
+    AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    AliWarning(Form("Specific CDB storage for %s is set to: %s",obj->GetName(),obj->GetTitle()));
+    AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+    man->SetSpecificStorage(obj->GetName(),obj->GetTitle());
+  }
   
 }
 
 //_____________________________________________________________________________
 void AliSimulation::SetDefaultStorage(const char* uri) {
-// activate a default CDB storage 
+// Store the desired default CDB storage location
+// Activate it later within the Run() method
 
-   AliCDBManager::Instance()->SetDefaultStorage(uri);
+  fCDBUri = uri;
 
 }
 
 //_____________________________________________________________________________
 void AliSimulation::SetSpecificStorage(const char* detName, const char* uri) {
-// activate a detector-specific CDB storage 
+// Store a detector-specific CDB storage location
+// Activate it later within the Run() method
 
-   AliCDBManager::Instance()->SetSpecificStorage(detName, uri);
+  TObject* obj = fSpecCDBUri.FindObject(detName);
+  if (obj) fSpecCDBUri.Remove(obj);
+  fSpecCDBUri.Add(new TNamed(detName, uri));
 
 }
 
@@ -331,7 +360,7 @@ Bool_t AliSimulation::ApplyAlignObjsToGeom(TObjArray* alObjArray)
     }
 
   if (AliDebugLevelClass() >= 1) {
-    gGeoManager->CheckOverlaps(20);
+    gGeoManager->GetTopNode()->CheckOverlaps(20);
     TObjArray* ovexlist = gGeoManager->GetListOfOverlaps();
     if(ovexlist->GetEntriesFast()){  
       AliError("The application of alignment objects to the geometry caused huge overlaps/extrusions!");
@@ -409,7 +438,6 @@ Bool_t AliSimulation::ApplyAlignObjsToGeom(const char* detName, Int_t runnum, In
   // to the TGeo geometry passed as argument
   //
 
-  InitCDBStorage("local://$ALICE_ROOT");
   AliCDBPath path(detName,"Align","Data");
   AliCDBEntry* entry = AliCDBManager::Instance()->Get(path.GetPath(),runnum,version,sversion);
 
@@ -568,7 +596,7 @@ Bool_t AliSimulation::Run(Int_t nEvents)
 {
 // run the generation, simulation and digitization
 
-  InitCDBStorage(fCDBUri);
+  InitCDBStorage();
 
   if (nEvents > 0) fNEvents = nEvents;
 
@@ -613,10 +641,8 @@ Bool_t AliSimulation::Run(Int_t nEvents)
   }
 
   // digits -> trigger
-  if (!fMakeTrigger.IsNull()) {
-    if (!RunTrigger(fMakeTrigger)) {
-      if (fStopOnError) return kFALSE;
-    }
+  if (!RunTrigger(fMakeTrigger)) {
+    if (fStopOnError) return kFALSE;
   }
 
   // digits -> raw data
@@ -642,6 +668,16 @@ Bool_t AliSimulation::RunTrigger(const char* descriptors)
    if (!runLoader) return kFALSE;
    TString des = descriptors;
 
+   if (des.IsNull()) {
+     if (gAlice->GetTriggerDescriptor() != "") {
+       des = gAlice->GetTriggerDescriptor();
+     }
+     else {
+       AliWarning("No trigger descriptor is specified. Skipping the trigger simulation...");
+       return kTRUE;
+     }
+   }
+
    runLoader->MakeTree( "CT" );
    AliCentralTrigger* aCTP = runLoader->GetTrigger();
   // Load Descriptors
@@ -698,6 +734,16 @@ Bool_t AliSimulation::RunSimulation(Int_t nEvents)
     gAlice->Init(fConfigFileName.Data());
   ););
 
+  // Get the trigger descriptor string
+  // Either from AliSimulation or from
+  // gAlice
+  if (fMakeTrigger.IsNull()) {
+    if (gAlice->GetTriggerDescriptor() != "")
+      fMakeTrigger = gAlice->GetTriggerDescriptor();
+  }
+  else
+    gAlice->SetTriggerDescriptor(fMakeTrigger.Data());
+
   // Set run number in CDBManager
   AliCDBManager::Instance()->SetRun(gAlice->GetRunNumber());
   AliInfo(Form("Run number: %d",AliCDBManager::Instance()->GetRun()));
@@ -714,7 +760,11 @@ Bool_t AliSimulation::RunSimulation(Int_t nEvents)
   if (gGeoManager) gGeoManager->Export("geometry.root");
 
   // Misalign geometry
-  if (!MisalignGeometry(runLoader)) return kFALSE;
+//   if (!MisalignGeometry(runLoader)) {
+//     delete runLoader;
+//     return kFALSE;
+//   }
+  MisalignGeometry(runLoader);
 
   // Temporary fix by A.Gheata
   // Could be removed with the next Root version (>5.11)
@@ -1078,16 +1128,16 @@ Bool_t AliSimulation::ConvertRawFilesToDate(const char* dateFileName)
     Int_t prevLDC = -1;
 
     // loop over detectors and DDLs
-    for (Int_t iDet = 0; iDet < kNDetectors; iDet++) {
-      for (Int_t iDDL = 0; iDDL < kDetectorDDLs[iDet]; iDDL++) {
+    for (Int_t iDet = 0; iDet < AliDAQ::kNDetectors; iDet++) {
+      for (Int_t iDDL = 0; iDDL < AliDAQ::NumberOfDdls(iDet); iDDL++) {
 
-        Int_t ddlID = 0x100*iDet + iDDL;
+        Int_t ddlID = AliDAQ::DdlID(iDet,iDDL);
         Int_t ldcID = Int_t(ldc + 0.0001);
-        ldc += kDetectorLDCs[iDet] / kDetectorDDLs[iDet];
+        ldc += AliDAQ::NumberOfLdcs(iDet) / AliDAQ::NumberOfDdls(iDet);
 
         char rawFileName[256];
-        sprintf(rawFileName, "raw%d/%s_%d.ddl", 
-                iEvent, kDetectors[iDet], ddlID);
+        sprintf(rawFileName, "raw%d/%s", 
+                iEvent, AliDAQ::DdlFileName(iDet,iDDL));
 
        // check existence and size of raw data file
         FILE* file = fopen(rawFileName, "rb");