Modifications in AliRoot for re-processing a selected event.
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Mar 2012 14:53:04 +0000 (14:53 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Mar 2012 14:53:04 +0000 (14:53 +0000)
Ivana Hrivnacova <Ivana.Hrivnacova@cern.ch>

EVGEN/AliGenExtFile.cxx
EVGEN/AliGenExtFile.h
STEER/STEER/AliMC.cxx
STEER/STEER/AliMC.h

index 8821335..b1d0a38 100644 (file)
@@ -48,7 +48,8 @@ ClassImp(AliGenExtFile)
 AliGenExtFile::AliGenExtFile()
     :AliGenMC(),
      fFileName(0),
-     fReader(0)
+     fReader(0),
+     fStartEvent(0)
 {
 //  Constructor
 //
@@ -59,7 +60,8 @@ AliGenExtFile::AliGenExtFile()
 AliGenExtFile::AliGenExtFile(Int_t npart)
     :AliGenMC(npart),
      fFileName(0),
-     fReader(0)
+     fReader(0),
+     fStartEvent(0)
 {
 //  Constructor
     fName   = "ExtFile";
@@ -80,7 +82,7 @@ void AliGenExtFile::Init()
     if (fReader) fReader->Init();
 }
 
-    
+//___________________________________________________________
 void AliGenExtFile::Generate()
 {
 // Generate particles
@@ -96,6 +98,19 @@ void AliGenExtFile::Generate()
   //
   if (fVertexSmear == kPerEvent) Vertex();
 
+  // Fast forward up to start Event
+  for (Int_t ie=0; ie<fStartEvent; ++ie ) {
+    Int_t nTracks = fReader->NextEvent();      
+    if (nTracks == 0) {
+      // printf("\n No more events !!! !\n");
+      Warning("AliGenExtFile::Generate","\nNo more events in external file!!!\nLast event may be empty or incomplete.\n");
+      return;
+    }
+    TParticle* iparticle = 0x0;
+    while ((iparticle=fReader->NextParticle()) ) ;
+    cout << "Skipping event " << ie << endl;
+  }  
+
   while(1) {
     Int_t nTracks = fReader->NextEvent();      
     if (nTracks == 0) {
@@ -192,6 +207,7 @@ void AliGenExtFile::Generate()
   CdEventFile();
 }
 
+//___________________________________________________________
 void AliGenExtFile::CdEventFile()
 {
 // CD back to the event file
index 230de91..648a183 100644 (file)
@@ -27,10 +27,12 @@ class AliGenExtFile : public AliGenMC
     // generate event
     virtual void Generate();
     void SetReader(AliGenReader* reader) {fReader = reader;}
+    void SetStartEvent(Int_t startEvent) {fStartEvent = startEvent;}
  protected:
     void CdEventFile();
     const Text_t     *fFileName;      //! File to read from
     AliGenReader     *fReader;        //! Reader to read the file
+    Int_t  fStartEvent; //! Start event number
 
  private:
     AliGenExtFile(const AliGenExtFile &ext);
index 4f031ad..642bfaf 100644 (file)
@@ -58,6 +58,10 @@ ClassImp(AliMC)
 //_______________________________________________________________________
 AliMC::AliMC() :
   fGenerator(0),
+  fSaveRndmStatus(kFALSE),
+  fSaveRndmEventStatus(kFALSE),
+  fReadRndmStatus(kFALSE),
+  fRndmFileName("random.root"),
   fEventEnergy(0),
   fSummEnergy(0),
   fSum2Energy(0),
@@ -83,6 +87,10 @@ AliMC::AliMC() :
 AliMC::AliMC(const char *name, const char *title) :
   TVirtualMCApplication(name, title),
   fGenerator(0),
+  fSaveRndmStatus(kFALSE),
+  fSaveRndmEventStatus(kFALSE),
+  fReadRndmStatus(kFALSE),
+  fRndmFileName("random.root"),
   fEventEnergy(0),
   fSummEnergy(0),
   fSum2Energy(0),
@@ -443,7 +451,7 @@ void AliMC::EnergySummary()
   //  fSummEnergy.Set(0);
   //  fSum2Energy.Set(0);
 }
-
+#include <TFile.h>
 //_____________________________________________________________________________
 void AliMC::BeginEvent()
 {
@@ -457,7 +465,7 @@ void AliMC::BeginEvent()
   AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
   AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
   AliDebug(1, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
-    
+
   AliRunLoader *runloader=AliRunLoader::Instance();
 
   /*******************************/    
@@ -479,7 +487,30 @@ void AliMC::BeginEvent()
   else
       runloader->MakeStack();//or make a new one
   
+  // Random engine status
+  //
   
+  if ( fSaveRndmStatus || fSaveRndmEventStatus) {
+    TString fileName="random";
+    if ( fSaveRndmEventStatus ) {
+      fileName += "Evt";
+      fileName += gAlice->GetEventNrInRun();
+    }
+    fileName += ".root";
+       
+    // write ROOT random engine status
+    cout << "Saving random engine status in " << fileName.Data() << endl;
+    TFile f(fileName.Data(),"RECREATE");
+    gRandom->Write(fileName.Data());
+  }     
+
+  if ( fReadRndmStatus ) {
+    //read ROOT random engine status
+    cout << "Reading random engine status from " << fRndmFileName.Data() << endl;
+    TFile f(fRndmFileName.Data());
+    gRandom->Read(fRndmFileName.Data());    
+  }       
+
   if(AliSimulation::Instance()->Lego() == 0x0)
   { 
       AliDebug(1, "fRunLoader->MakeTree(K)");
@@ -722,6 +753,7 @@ void AliMC::Init()
 {
   // MC initialization
 
+
    //=================Create Materials and geometry
    gMC->Init();
   // Set alignable volumes for the whole geometry (with old root)
@@ -743,7 +775,6 @@ void AliMC::Init()
 
    // Register MC in configuration 
    AliConfig::Instance()->Add(gMC);
-
 }
 
 //_______________________________________________________________________
index bef8127..9709139 100644 (file)
@@ -109,6 +109,12 @@ public:
 // Geometry related
    void           SetGeometryFromCDB();
    Bool_t         IsGeometryFromCDB() const;
+   
+// Random number generator status
+   void           SetSaveRndmStatus(Bool_t value)          { fSaveRndmStatus = value; }  
+   void           SetSaveRndmStatusPerEvent(Bool_t value)  { fSaveRndmEventStatus = value; }  
+   void           SetReadRndmStatus(Bool_t value)          { fReadRndmStatus = value; };   
+   void           SetRndmFileName(const TString& fileName) { fRndmFileName = fileName; };   
 
  private:
    AliMC(const AliMC&); // Not implemented
@@ -118,6 +124,10 @@ public:
  private:
    void RemapHits();
    AliGenerator  *fGenerator;         //  Generator used in the MC
+   Bool_t         fSaveRndmStatus;    //! Options to save random engine status
+   Bool_t         fSaveRndmEventStatus; //! Options to save random engine status for each event
+   Bool_t         fReadRndmStatus;    //! Options to read random engine status
+   TString        fRndmFileName;      //! The file name of random engine status to be read in
    TArrayF        fEventEnergy;       //! Energy deposit for current event
    TArrayF        fSummEnergy;        //! Energy per event in each volume
    TArrayF        fSum2Energy;        //! Energy squared per event in each volume