]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliRun.cxx
introducing SDD, SSD layer misal (Andrea Dainese)
[u/mrichter/AliRoot.git] / STEER / AliRun.cxx
index ba1f90e3630cb3f64a9a58dcf088615106bf6a07..9b91c4e3492f361059b6ec517ee5b70412fb5e10 100644 (file)
@@ -49,6 +49,7 @@
 #include <TRandom3.h>
 #include <TSystem.h>
 #include <TVirtualMC.h>
+#include <TGeoManager.h>
 // 
 #include "AliLog.h"
 #include "AliDetector.h"
@@ -63,9 +64,8 @@
 #include "AliPDG.h"
 #include "AliRun.h"
 #include "AliStack.h"
-#ifdef __APPLE__
-//#include "AliTPCTrackHitsInterfaces.h"
-#endif
+#include "AliCDBManager.h"
+#include "AliAlignObj.h"
 
 AliRun *gAlice;
 
@@ -73,7 +73,7 @@ ClassImp(AliRun)
 
 //_______________________________________________________________________
 AliRun::AliRun():
-  fRun(0),
+  fRun(-1),
   fEvent(0),
   fEventNrInRun(0),
   fEventsPerRun(0),
@@ -82,13 +82,17 @@ AliRun::AliRun():
   fMCApp(0),
   fDisplay(0),
   fField(0),
-  fMC(0),
   fNdets(0),
   fInitDone(kFALSE),
   fLego(0),
   fPDGDB(0),  //Particle factory object
-  fConfigFunction("\0"),
+  fConfigFunction(""),
   fRandom(0),
+  fBaseFileName(""),
+  fIsRootGeometry(kFALSE),
+  fGeometryFromCDB(kFALSE),
+  fGeometryFileName(""),
+  fTriggerDescriptor(""),
   fRunLoader(0x0)
 {
   //
@@ -96,12 +100,13 @@ AliRun::AliRun():
   //
   AliConfig::Instance();//skowron 29 Feb 2002
                         //ensures that the folder structure is build
+
 }
 
 //_______________________________________________________________________
 AliRun::AliRun(const AliRun& arun):
   TNamed(arun),
-  fRun(0),
+  fRun(-1),
   fEvent(0),
   fEventNrInRun(0),
   fEventsPerRun(0),
@@ -110,13 +115,17 @@ AliRun::AliRun(const AliRun& arun):
   fMCApp(0),
   fDisplay(0),
   fField(0),
-  fMC(0),
   fNdets(0),
   fInitDone(kFALSE),
   fLego(0),
   fPDGDB(0),  //Particle factory object
   fConfigFunction("\0"),
   fRandom(0),
+  fBaseFileName(""),
+  fIsRootGeometry(kFALSE),
+  fGeometryFromCDB(kFALSE),
+  fGeometryFileName(""),
+  fTriggerDescriptor(""),
   fRunLoader(0x0)
 {
   //
@@ -128,7 +137,7 @@ AliRun::AliRun(const AliRun& arun):
 //_____________________________________________________________________________
 AliRun::AliRun(const char *name, const char *title):
   TNamed(name,title),
-  fRun(0),
+  fRun(-1),
   fEvent(0),
   fEventNrInRun(0),
   fEventsPerRun(0),
@@ -137,13 +146,17 @@ AliRun::AliRun(const char *name, const char *title):
   fMCApp(0),
   fDisplay(0),
   fField(0),
-  fMC(gMC),
   fNdets(0),
   fInitDone(kFALSE),
   fLego(0),
   fPDGDB(TDatabasePDG::Instance()),        //Particle factory object!
   fConfigFunction("Config();"),
   fRandom(new TRandom3()),
+  fBaseFileName(""),
+  fIsRootGeometry(kFALSE),
+  fGeometryFromCDB(kFALSE),
+  fGeometryFileName(""),
+  fTriggerDescriptor(""),
   fRunLoader(0x0)
 {
   //
@@ -164,8 +177,6 @@ AliRun::AliRun(const char *name, const char *title):
 
   // Add to list of browsable  
   gROOT->GetListOfBrowsables()->Add(this,name);
-  // Create the TNode geometry for the event display
-  BuildSimpleGeometry();
   
   // Create default mag field
   SetField();
@@ -173,14 +184,6 @@ AliRun::AliRun(const char *name, const char *title):
   // Add particle list to configuration
   AliConfig::Instance()->Add(fPDGDB); 
 
-#ifdef __APPLE__
-  // Terrible hack to avoid problem with the initialisation of 
-  // static and globals on Mac OS X 
-  //  AliClassAliTrackHitsInfo p1=galiclass____AliClassAliTrackHitsInfo;
-  // AliClassAliTrackHitsParam p2=galiclass____AliTrackHitsParam;
-  //AliClassAliHitInfo p3=galiclass____AliHitInfo;
-#endif
-
 }
 
 
@@ -280,6 +283,30 @@ void  AliRun::SetField(AliMagF* magField)
   fField->ReadField();
 }
 
+//_______________________________________________________________________
+void AliRun::SetRootGeometry(Bool_t flag)
+{
+// Instruct application that the geometry is to be retreived from a root file.
+   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() &&
+       AliCDBManager::Instance()->GetRun() >= 0){
+    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)
@@ -334,7 +361,7 @@ void AliRun::FinishRun()
   //
   // Called at the end of the run.
   //
-  
+
   if(fLego) 
    {
     AliDebug(1, "Finish Lego");
@@ -358,12 +385,7 @@ void AliRun::FinishRun()
   Write(0,TObject::kOverwrite);//write AliRun
   fRunLoader->Write(0,TObject::kOverwrite);//write RunLoader itself
   
-  // Clean tree information
-  AliDebug(1, "fRunLoader->Stack()->FinishRun()");
-  fRunLoader->Stack()->FinishRun();
-
-  if(fMCApp) fMCApp->FinishRun();
-
+  if(fMCApp) fMCApp->FinishRun();  
   fRunLoader->Synchronize();
 }
 
@@ -381,7 +403,7 @@ void AliRun::Announce() const
   printf("    You are running AliRoot version NewIO\n");
 
   printf("%6s","*");
-  printf("    The cvs tag for the current program is $Name$\n");
+  printf("    The SVN version for the current program is $Id$\n");
 
   printf("%6s","*");printf("%64s","*\n");
   printf("%70s",
@@ -451,8 +473,8 @@ Int_t AliRun::GetEvent(Int_t event)
 
   // Set Trees branch addresses
   TIter next(fModules);
-  AliModule *detector;
-  while((detector = dynamic_cast<AliModule*>(next()))) 
+  AliDetector *detector;
+  while((detector = dynamic_cast<AliDetector*>(next()))) 
    {
      detector->SetTreeAddress();
    }
@@ -463,27 +485,28 @@ Int_t AliRun::GetEvent(Int_t event)
 //_______________________________________________________________________
 TGeometry *AliRun::GetGeometry()
 {
-  //
-  // Import Alice geometry from current file
-  // Return pointer to geometry object
-  //
-  if (!fGeometry) fGeometry = dynamic_cast<TGeometry*>(gDirectory->Get("AliceGeom"));
-  //
-  // Unlink and relink nodes in detectors
-  // This is bad and there must be a better way...
-  //
+
+  // Create the TNode geometry for the event display
+  if (!fGeometry) { 
+    BuildSimpleGeometry();
+    //
+    // Unlink and relink nodes in detectors
+    // This is bad and there must be a better way...
+    //
   
-  TIter next(fModules);
-  AliModule *detector;
-  while((detector = dynamic_cast<AliModule*>(next()))) {
-    TList *dnodes=detector->Nodes();
-    Int_t j;
-    TNode *node, *node1;
-    for ( j=0; j<dnodes->GetSize(); j++) {
-      node = dynamic_cast<TNode*>(dnodes->At(j));
-      node1 = fGeometry->GetNode(node->GetName());
-      dnodes->Remove(node);
-      dnodes->AddAt(node1,j);
+    TIter next(fModules);
+    AliModule *detector;
+    while((detector = dynamic_cast<AliModule*>(next()))) {
+      detector->BuildGeometry();
+      TList *dnodes=detector->Nodes();
+      Int_t j;
+      TNode *node, *node1;
+      for ( j=0; j<dnodes->GetSize(); j++) {
+       node = dynamic_cast<TNode*>(dnodes->At(j));
+       node1 = fGeometry->GetNode(node->GetName());
+       dnodes->Remove(node);
+       dnodes->AddAt(node1,j);
+      }
     }
   }
   return fGeometry;
@@ -555,12 +578,17 @@ void AliRun::InitMC(const char *setup)
   gROOT->LoadMacro(setup);
   gInterpreter->ProcessLine(fConfigFunction.Data());
 
+  if(AliCDBManager::Instance()->GetRun() >= 0) { 
+       SetRunNumber(AliCDBManager::Instance()->GetRun());
+  } else {
+       AliWarning("Run number not initialized!!");
+  }
+  
   fRunLoader->CdGAFile();
-
+    
   AliPDG::AddParticlesToPdgDataBase();  
 
   fNdets = fModules->GetLast()+1;
-
   TIter next(fModules);
   for(Int_t i=0; i<fNdets; ++i)
    {
@@ -730,7 +758,7 @@ void AliRun::Tree2Tree(Option_t *option, const char *selected)
 //_______________________________________________________________________
 void AliRun::RunLego(const char *setup, Int_t nc1, Float_t c1min,
                     Float_t c1max,Int_t nc2,Float_t c2min,Float_t c2max,
-                    Float_t rmin,Float_t rmax,Float_t zmax, AliLegoGenerator* gener)
+                    Float_t rmin,Float_t rmax,Float_t zmax, AliLegoGenerator* gener, Int_t nev)
 {
   //
   // Generates lego plots of:
@@ -769,14 +797,17 @@ void AliRun::RunLego(const char *setup, Int_t nc1, Float_t c1min,
   */
   //End_Html
   //
-
+  // Number of events 
+    if (nev == -1) nev  = nc1 * nc2;
+    
   // check if initialisation has been done
   // If runloader has been initialized, set the number of events per file to nc1 * nc2
-
+    
   // Set new generator
   if (!gener) gener  = new AliLegoGenerator();
   //
   // Configure Generator
+  
   gener->SetRadiusRange(rmin, rmax);
   gener->SetZMax(zmax);
   gener->SetCoor1Range(nc1, c1min, c1max);
@@ -796,9 +827,9 @@ void AliRun::RunLego(const char *setup, Int_t nc1, Float_t c1min,
   
   //Run Lego Object
 
-  if (fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nc1 * nc2);
-  //gMC->ProcessRun(nc1*nc2+1);
-  gMC->ProcessRun(nc1*nc2);
+
+  if (fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nev);
+  gMC->ProcessRun(nev);
   
   // End of this run, close files
   FinishRun();
@@ -828,10 +859,12 @@ void AliRun::Field(const Double_t* x, Double_t *b) const
   //
   // Return the value of the magnetic field
   //
+    
   Float_t xfloat[3];
   for (Int_t i=0; i<3; i++) xfloat[i] = x[i]; 
   
   if (Field()) {
+
     Float_t bfloat[3];
     Field()->Field(xfloat,bfloat);
     for (Int_t j=0; j<3; j++) b[j] = bfloat[j]; 
@@ -840,6 +873,8 @@ void AliRun::Field(const Double_t* x, Double_t *b) const
     AliError("No mag field defined!");
     b[0]=b[1]=b[2]=0.;
   }
+
+  
 }      
 
 // 
@@ -949,23 +984,6 @@ void AliRun::AddModule(AliModule* mod)
   fNdets++;
 }
 
-
-//_______________________________________________________________________
-Int_t AliRun::GetDebug() const
-{
-  AliFatal("Don't use this method any more, use AliDebug instead");
-  return AliDebugLevel();
-}
-
-//_______________________________________________________________________
-void AliRun::SetDebug(Int_t level)
-{
-  AliFatal("Don't use this method any more, use AliLog instead");
-  AliLog::SetClassDebugLevel("AliRun", level);
-}
-
-
-// added by Alberto Colla
 //_____________________________________________________________________________
 /*inline*/ Bool_t AliRun::IsFileAccessible(const char* fnam, EAccessMode mode)
 { return !gSystem->AccessPathName(fnam,mode);}
@@ -976,5 +994,3 @@ void AliRun::SetDebug(Int_t level)
   TString str = name; gSystem->ExpandPathName(str);
   return !gSystem->AccessPathName(str.Data(),mode);
 }
-
-