]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliRun.cxx
Corrected protection.
[u/mrichter/AliRoot.git] / STEER / AliRun.cxx
index 481580699d046288aca6a01d1cec846505421f5f..8cde7de914e3599a8a0c54fb7cbf3949415cfcad 100644 (file)
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
-#include <TBRIK.h> 
 #include <TCint.h> 
-#include <TDatabasePDG.h>
-#include <TGeometry.h>
-#include <TNode.h>
 #include <TROOT.h>
 #include <TRandom3.h>
 #include <TSystem.h>
 // 
 #include "AliLog.h"
 #include "AliDetector.h"
-#include "AliDisplay.h"
 #include "AliHeader.h"
-#include "AliLego.h"
-#include "AliLegoGenerator.h"
 #include "AliMC.h"
-#include "AliMagFC.h"
-#include "AliMagFCM.h"
-#include "AliMagFDM.h"
 #include "AliPDG.h"
 #include "AliRun.h"
 #include "AliStack.h"
-#ifdef __APPLE__
-//#include "AliTPCTrackHitsInterfaces.h"
-#endif
+#include "AliCDBManager.h"
+#include "AliAlignObj.h"
+#include "AliSimulation.h"
+#include "AliLego.h"
 
 AliRun *gAlice;
 
@@ -74,23 +65,13 @@ ClassImp(AliRun)
 
 //_______________________________________________________________________
 AliRun::AliRun():
-  fRun(0),
-  fEvent(0),
-  fEventNrInRun(0),
-  fEventsPerRun(0),
+//  fRun(-1),
+  fEventNrInRun(-1),
   fModules(0),
-  fGeometry(0),
   fMCApp(0),
-  fDisplay(0),
-  fField(0),
-  fMC(0),
   fNdets(0),
-  fInitDone(kFALSE),
-  fLego(0),
-  fPDGDB(0),  //Particle factory object
-  fConfigFunction("\0"),
-  fRandom(0),
-  fIsRootGeometry(kFALSE),
+  fConfigFunction(""),
+  fBaseFileName(""),
   fRunLoader(0x0)
 {
   //
@@ -98,56 +79,18 @@ AliRun::AliRun():
   //
   AliConfig::Instance();//skowron 29 Feb 2002
                         //ensures that the folder structure is build
-}
 
-//_______________________________________________________________________
-AliRun::AliRun(const AliRun& arun):
-  TNamed(arun),
-  fRun(0),
-  fEvent(0),
-  fEventNrInRun(0),
-  fEventsPerRun(0),
-  fModules(0),
-  fGeometry(0),
-  fMCApp(0),
-  fDisplay(0),
-  fField(0),
-  fMC(0),
-  fNdets(0),
-  fInitDone(kFALSE),
-  fLego(0),
-  fPDGDB(0),  //Particle factory object
-  fConfigFunction("\0"),
-  fRandom(0),
-  fIsRootGeometry(kFALSE),
-  fRunLoader(0x0)
-{
-  //
-  // Copy constructor for AliRun
-  //
-  arun.Copy(*this);
 }
 
 //_____________________________________________________________________________
 AliRun::AliRun(const char *name, const char *title):
   TNamed(name,title),
-  fRun(0),
-  fEvent(0),
-  fEventNrInRun(0),
-  fEventsPerRun(0),
+  fEventNrInRun(-1),
   fModules(new TObjArray(77)), // Support list for the Detectors
-  fGeometry(0),
-  fMCApp(0),
-  fDisplay(0),
-  fField(0),
-  fMC(gMC),
+  fMCApp(new AliMC(GetName(),GetTitle())),
   fNdets(0),
-  fInitDone(kFALSE),
-  fLego(0),
-  fPDGDB(TDatabasePDG::Instance()),        //Particle factory object!
   fConfigFunction("Config();"),
-  fRandom(new TRandom3()),
-  fIsRootGeometry(kFALSE),
+  fBaseFileName(""),
   fRunLoader(0x0)
 {
   //
@@ -160,7 +103,7 @@ AliRun::AliRun(const char *name, const char *title):
   gAlice     = this;
 
   // Set random number generator
-  gRandom = fRandom;
+  gRandom = new TRandom3();
 
   if (gSystem->Getenv("CONFIG_SEED")) {
      gRandom->SetSeed(static_cast<UInt_t>(atoi(gSystem->Getenv("CONFIG_SEED"))));
@@ -168,26 +111,9 @@ 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();
-
-  // 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
-
 }
 
-
 //_______________________________________________________________________
 AliRun::~AliRun()
 {
@@ -207,119 +133,17 @@ AliRun::~AliRun()
        modfold->Remove(mod);
      }
    }
-  
-  
-  delete fField;
+    
   delete fMCApp;
   delete gMC; gMC=0;
-  delete fGeometry;
-  delete fDisplay;
-  delete fLego;
   if (fModules) {
     fModules->Delete();
     delete fModules;
   }
   
-  delete fPDGDB;
-}
-
-//_______________________________________________________________________
-void AliRun::Copy(TObject &) const
-{
-  AliFatal("Not implemented!");
-}
-
-//_______________________________________________________________________
-void AliRun::Build()
-{
-  //
-  // Initialize Alice geometry
-  // Dummy routine
-  //
-}
-//_______________________________________________________________________
-void AliRun::BuildSimpleGeometry()
-{
-  //
-  // Create a simple TNode geometry used by Root display engine
-  //
-  // Initialise geometry
-  //
-  fGeometry = new TGeometry("AliceGeom","Galice Geometry for Hits");
-  new TMaterial("void","Vacuum",0,0,0);  //Everything is void
-  TBRIK *brik = new TBRIK("S_alice","alice volume","void",2000,2000,3000);
-  brik->SetVisibility(0);
-  new TNode("alice","alice","S_alice");
-}
-
-//_______________________________________________________________________
-void AliRun::CleanDetectors()
-{
-  //
-  // Clean Detectors at the end of event
-  //
-   fRunLoader->CleanDetectors();
-}
-
-//_______________________________________________________________________
-void AliRun::ResetHits() 
-{
-  fMCApp->ResetHits();
-}
-
-//_______________________________________________________________________
-AliGenerator* AliRun::Generator() const 
-{
-  return fMCApp->Generator();
-}
-
-//_______________________________________________________________________
-void  AliRun::SetField(AliMagF* magField)
-{
-  //
-  // Set Magnetic Field Map
-  //
-  fField = 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->SetRootGeometry();
-}
-//_______________________________________________________________________
-void AliRun::SetField(Int_t type, Int_t version, Float_t scale,
-                     Float_t maxField, const char* filename)
-{
-  //
-  //  Set magnetic field parameters
-  //  type      Magnetic field transport flag 0=no field, 2=helix, 3=Runge Kutta
-  //  version   Magnetic field map version (only 1 active now)
-  //  scale     Scale factor for the magnetic field
-  //  maxField  Maximum value for the magnetic field
-
-  //
-  // --- Sanity check on mag field flags
-  if(fField) delete fField;
-  if(version==1) {
-    fField = new AliMagFC("Map1"," ",type,scale,maxField);
-  } else if(version<=2) {
-    fField = new AliMagFCM("Map2-3",filename,type,scale,maxField);
-    fField->ReadField();
-  } else if(version==3) {
-    fField = new AliMagFDM("Map4",filename,type,scale,maxField);
-    fField->ReadField();
-  } else {
-    AliWarning(Form("Invalid map %d",version));
-  }
 }
 
 //_____________________________________________________________________________
-
 void AliRun::InitLoaders()
 {
   //creates list of getters
@@ -338,45 +162,6 @@ void AliRun::InitLoaders()
    }
   AliDebug(1, "Done");
 }
-//_____________________________________________________________________________
-
-void AliRun::FinishRun()
-{
-  //
-  // Called at the end of the run.
-  //
-  
-  if(fLego) 
-   {
-    AliDebug(1, "Finish Lego");
-    fRunLoader->CdGAFile();
-    fLego->FinishRun();
-   }
-  
-  // Clean detector information
-  TIter next(fModules);
-  AliModule *detector;
-  while((detector = dynamic_cast<AliModule*>(next()))) {
-    AliDebug(2, Form("%s->FinishRun()", detector->GetName()));
-    detector->FinishRun();
-  }
-  
-  AliDebug(1, "fRunLoader->WriteHeader(OVERWRITE)");
-  fRunLoader->WriteHeader("OVERWRITE");
-
-  // Write AliRun info and all detectors parameters
-  fRunLoader->CdGAFile();
-  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();
-
-  fRunLoader->Synchronize();
-}
 
 //_______________________________________________________________________
 void AliRun::Announce() const
@@ -392,7 +177,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",
@@ -447,14 +232,14 @@ Int_t AliRun::GetEvent(Int_t event)
 // Reset existing structures
   fMCApp->ResetHits();
   fMCApp->ResetTrackReferences();
-  ResetDigits();
-  ResetSDigits();
+  fMCApp->ResetDigits();
+  fMCApp->ResetSDigits();
 
 /*****************************************/ 
 /****       R  E  L  O  A  D          ****/
 /*****************************************/
 
-  fRunLoader->GetEvent(event);
+  AliRunLoader::Instance()->GetEvent(event);
 
 /*****************************************/ 
 /****  P O S T    R E L O A D I N G   ****/
@@ -462,42 +247,13 @@ 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();
    }
  
-  return fRunLoader->GetHeader()->GetNtrack();
-}
-
-//_______________________________________________________________________
-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...
-  //
-  
-  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);
-    }
-  }
-  return fGeometry;
+  return AliRunLoader::Instance()->GetHeader()->GetNtrack();
 }
 
 //_______________________________________________________________________
@@ -506,158 +262,14 @@ void AliRun::SetBaseFile(const char *filename)
   fBaseFileName = filename;
 }
 
-//_______________________________________________________________________
-void AliRun::ResetDigits()
-{
-  //
-  //  Reset all Detectors digits
-  //
-  TIter next(fModules);
-  AliModule *detector;
-  while((detector = dynamic_cast<AliModule*>(next()))) {
-     detector->ResetDigits();
-  }
-}
-
-//_______________________________________________________________________
-void AliRun::ResetSDigits()
-{
-  //
-  //  Reset all Detectors digits
-  //
-  TIter next(fModules);
-  AliModule *detector;
-  while((detector = dynamic_cast<AliModule*>(next()))) {
-     detector->ResetSDigits();
-  }
-}
-
-
-//_______________________________________________________________________
 
-void AliRun::ResetPoints()
-{
-  //
-  // Reset all Detectors points
-  //
-  TIter next(fModules);
-  AliModule *detector;
-  while((detector = dynamic_cast<AliModule*>(next()))) {
-     detector->ResetPoints();
-  }
-}
 //_______________________________________________________________________
-
-void AliRun::InitMC(const char *setup)
-{
-  //
-  // Initialize ALICE Simulation run
-  //
-  Announce();
-
-  if(fInitDone) {
-    AliWarning("Cannot initialise AliRun twice!");
-    return;
-  }
-    
-  if (!fMCApp)  
-    fMCApp=new AliMC(GetName(),GetTitle());
-    
-  gROOT->LoadMacro(setup);
-  gInterpreter->ProcessLine(fConfigFunction.Data());
-
-  fRunLoader->CdGAFile();
-
-  AliPDG::AddParticlesToPdgDataBase();  
-
-  fNdets = fModules->GetLast()+1;
-
-  TIter next(fModules);
-  for(Int_t i=0; i<fNdets; ++i)
-   {
-     TObject *objfirst, *objlast;
-     AliModule *detector=dynamic_cast<AliModule*>(fModules->At(i));
-     objlast = gDirectory->GetList()->Last();
-      
-     // Add Detector histograms in Detector list of histograms
-     if (objlast) objfirst = gDirectory->GetList()->After(objlast);
-     else         objfirst = gDirectory->GetList()->First();
-     while (objfirst) 
-      {
-        detector->Histograms()->Add(objfirst);
-        objfirst = gDirectory->GetList()->After(objfirst);
-      }
-   }
-   
-   fMCApp->Init();
-   
-   //Must be here because some MCs (G4) adds detectors here and not in Config.C
-   InitLoaders();
-   fRunLoader->MakeTree("E");
-   if (fLego == 0x0)
-    {
-      fRunLoader->LoadKinematics("RECREATE");
-      fRunLoader->LoadTrackRefs("RECREATE");
-      fRunLoader->LoadHits("all","RECREATE");
-    }
-   fInitDone = kTRUE;
-   //
-   // Save stuff at the beginning of the file to avoid file corruption
-   fRunLoader->CdGAFile();
-   Write();
-   fEventNrInRun = -1; //important - we start Begin event from increasing current number in run
-}
-
-//_______________________________________________________________________
-
-void AliRun::RunMC(Int_t nevent, const char *setup)
-{
-  //
-  // Main function to be called to process a galice run
-  // example
-  //    Root > gAlice.Run(); 
-  // a positive number of events will cause the finish routine
-  // to be called
-  //
-  fEventsPerRun = nevent;
-  // check if initialisation has been done
-  if (!fInitDone) InitMC(setup);
-  
-  // Create the Root Tree with one branch per detector
-  //Hits moved to begin event -> now we are crating separate tree for each event
-
-  gMC->ProcessRun(nevent);
-
-  // End of this run, close files
-  if(nevent>0) FinishRun();
-}
-
-//_______________________________________________________________________
-void AliRun::RunReco(const char *selected, Int_t first, Int_t last)
-{
-  //
-  // Main function to be called to reconstruct Alice event
-  // 
-   Int_t nev = fRunLoader->GetNumberOfEvents();
-   AliDebug(1, Form("Found %d events", nev));
-   Int_t nFirst = first;
-   Int_t nLast  = (last < 0)? nev : last;
-   
-   for (Int_t nevent = nFirst; nevent <= nLast; nevent++) {
-     AliDebug(1, Form("Processing event %d", nevent));
-     GetEvent(nevent);
-     Digits2Reco(selected);
-   }
-}
-
-//_______________________________________________________________________
-
 void AliRun::Hits2Digits(const char *selected)
 {
 
    // Convert Hits to sumable digits
    // 
-   for (Int_t nevent=0; nevent<gAlice->TreeE()->GetEntries(); nevent++) {
+   for (Int_t nevent=0; nevent<AliRunLoader::Instance()->TreeE()->GetEntries(); nevent++) {
      GetEvent(nevent);
      Hits2SDigits(selected);
      SDigits2Digits(selected);
@@ -666,7 +278,6 @@ void AliRun::Hits2Digits(const char *selected)
 
 
 //_______________________________________________________________________
-
 void AliRun::Tree2Tree(Option_t *option, const char *selected)
 {
   //
@@ -738,124 +349,6 @@ 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)
-{
-  //
-  // Generates lego plots of:
-  //    - radiation length map phi vs theta
-  //    - radiation length map phi vs eta
-  //    - interaction length map
-  //    - g/cm2 length map
-  //
-  //  ntheta    bins in theta, eta
-  //  themin    minimum angle in theta (degrees)
-  //  themax    maximum angle in theta (degrees)
-  //  nphi      bins in phi
-  //  phimin    minimum angle in phi (degrees)
-  //  phimax    maximum angle in phi (degrees)
-  //  rmin      minimum radius
-  //  rmax      maximum radius
-  //  
-  //
-  //  The number of events generated = ntheta*nphi
-  //  run input parameters in macro setup (default="Config.C")
-  //
-  //  Use macro "lego.C" to visualize the 3 lego plots in spherical coordinates
-  //Begin_Html
-  /*
-    <img src="picts/AliRunLego1.gif">
-  */
-  //End_Html
-  //Begin_Html
-  /*
-    <img src="picts/AliRunLego2.gif">
-  */
-  //End_Html
-  //Begin_Html
-  /*
-    <img src="picts/AliRunLego3.gif">
-  */
-  //End_Html
-  //
-
-  // 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);
-  gener->SetCoor2Range(nc2, c2min, c2max);
-  
-  
-  //Create Lego object  
-  fLego = new AliLego("lego",gener);
-
-  if (!fInitDone) InitMC(setup);
-  //Save current generator
-  
-  AliGenerator *gen=fMCApp->Generator();
-  fMCApp->ResetGenerator(gener);
-  //Prepare MC for Lego Run
-  gMC->InitLego();
-  
-  //Run Lego Object
-
-  if (fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nc1 * nc2);
-  //gMC->ProcessRun(nc1*nc2+1);
-  gMC->ProcessRun(nc1*nc2);
-  
-  // End of this run, close files
-  FinishRun();
-  // Restore current generator
-  fMCApp->ResetGenerator(gen);
-  // Delete Lego Object
-  delete fLego; fLego=0;
-}
-
-//_______________________________________________________________________
-void AliRun::SetConfigFunction(const char * config) 
-{
-  //
-  // Set the signature of the function contained in Config.C to configure
-  // the run
-  //
-  fConfigFunction=config;
-}
-
-// 
-// MC Application
-// 
-
-//_______________________________________________________________________
-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]; 
-  } 
-  else {
-    AliError("No mag field defined!");
-    b[0]=b[1]=b[2]=0.;
-  }
-}      
-
-// 
-// End of MC Application
-// 
 
 //_______________________________________________________________________
 void AliRun::Streamer(TBuffer &R__b)
@@ -866,20 +359,20 @@ void AliRun::Streamer(TBuffer &R__b)
     if (!gAlice) gAlice = this;
     AliRun::Class()->ReadBuffer(R__b, this);
     gROOT->GetListOfBrowsables()->Add(this,"Run");
-
-    gRandom = fRandom;
+    gRandom = new TRandom3();
   } else {
     AliRun::Class()->WriteBuffer(R__b, this);
   }
 }
-//_______________________________________________________________________
 
+//_______________________________________________________________________
 void AliRun::SetGenEventHeader(AliGenEventHeader* header)
 {
-  fRunLoader->GetHeader()->SetGenEventHeader(header);
+  AliRunLoader::Instance()->GetHeader()->SetGenEventHeader(header);
 }
-//_______________________________________________________________________
 
+
+//_______________________________________________________________________
 Int_t AliRun::GetEvNumber() const
 { 
 //Returns number of current event  
@@ -891,8 +384,8 @@ Int_t AliRun::GetEvNumber() const
 
   return fRunLoader->GetEventNumber();
 }
-//_______________________________________________________________________
 
+//_______________________________________________________________________
 void AliRun::SetRunLoader(AliRunLoader* rloader)
 {
   //
@@ -942,6 +435,7 @@ void AliRun::SetRunLoader(AliRunLoader* rloader)
    }
 }
 
+//_______________________________________________________________________
 void AliRun::AddModule(AliModule* mod)
 {
   //
@@ -960,16 +454,3 @@ void AliRun::AddModule(AliModule* mod)
   fNdets++;
 }
 
-// added by Alberto Colla
-//_____________________________________________________________________________
-/*inline*/ Bool_t AliRun::IsFileAccessible(const char* fnam, EAccessMode mode)
-{ return !gSystem->AccessPathName(fnam,mode);}
-
-//______________________________________________________
-/*inline*/ Bool_t AliRun::IsFileAccessible(Char_t* name,EAccessMode mode)
-{
-  TString str = name; gSystem->ExpandPathName(str);
-  return !gSystem->AccessPathName(str.Data(),mode);
-}
-
-