option to set the number of events per file for individual detectors and data types
authortkuhr <tkuhr@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 1 Jun 2004 09:43:40 +0000 (09:43 +0000)
committertkuhr <tkuhr@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 1 Jun 2004 09:43:40 +0000 (09:43 +0000)
STEER/AliDataLoader.cxx
STEER/AliDataLoader.h
STEER/AliSimulation.cxx
STEER/AliSimulation.h

index 342f93e..ad55ed5 100644 (file)
@@ -43,6 +43,7 @@ AliDataLoader::AliDataLoader():
  fDirectory(0x0),
  fFileOption(),
  fCompressionLevel(2),
+ fNEventsPerFile(0),
  fBaseLoaders(0x0),
  fHasTask(kFALSE),
  fTaskName(),
@@ -61,6 +62,7 @@ AliDataLoader::AliDataLoader(const char* filename, const char* contname, const c
  fDirectory(0x0),
  fFileOption(0),
  fCompressionLevel(2),
+ fNEventsPerFile(0),
  fBaseLoaders(new TObjArray(4)),
  fHasTask(kFALSE),
  fTaskName(),
@@ -459,6 +461,9 @@ const TString AliDataLoader::SetFileOffset(const TString& fname)
 
 //return fname;
   Long_t offset = (Long_t)GetRunLoader()->GetFileOffset();
+  if (fNEventsPerFile > 0) {
+    offset = GetRunLoader()->GetEventNumber()/fNEventsPerFile;
+  }
   if (offset < 1) return fname;
 
   TString soffset;
index f4debec..70b71ad 100644 (file)
@@ -82,6 +82,8 @@ class AliDataLoader: public TNamed
    void               SetFileNameSuffix(const TString& suffix);//adds the suffix before ".root", 
                                                                //e.g. TPC.Digits.root -> TPC.DigitsMerged.root
                                                                //made on Jiri Chudoba demand
+   void               SetNumberOfEventsPerFile(Int_t nevpf) 
+     {fNEventsPerFile = nevpf;}
    const TString      SetFileOffset(const TString& fname);//adds the proper number before .root extension suffix
    void               SetDirName(TString& dirname);
 
@@ -118,6 +120,7 @@ class AliDataLoader: public TNamed
    TDirectory*  fDirectory; //!pointer to TDirectory
    TString      fFileOption; //!file option while opened 
    Int_t        fCompressionLevel; //Compression Level of File
+   Int_t        fNEventsPerFile;  //defines number of events stored per one file
    
    TObjArray*   fBaseLoaders;//base loaders
    Bool_t       fHasTask;// flag if has a task
@@ -127,7 +130,7 @@ class AliDataLoader: public TNamed
    TFolder*     fEventFolder;//!event folder
    TFolder*     fFolder;//! folder with data
    
-   ClassDef(AliDataLoader,1)
+   ClassDef(AliDataLoader,2)
  };
 
 
index 0aca64e..71da5a6 100644 (file)
 // RunHitsDigitization and WriteRawData can be used to run only parts of     //
 // the full simulation chain.                                                //
 //                                                                           //
+// The default number of events per file, which is usually set in the        //
+// config file, can be changed for individual detectors and data types       //
+// by calling                                                                //
+//                                                                           //
+//   sim.SetEventsPerFile("PHOS", "Reconstructed Points", 3);                //
+//                                                                           //
+// The first argument is the detector, the second one the data type and the  //
+// last one the number of events per file. Valid data types are "Hits",      //
+// "Summable Digits", "Digits", "Reconstructed Points" and "Tracks".         //
+// The number of events per file has to be set before the simulation of      //
+// hits. Otherwise it has no effect.                                         //
+//                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <TObjString.h>
@@ -114,6 +126,7 @@ AliSimulation::AliSimulation(const char* configFileName,
   fNEvents(1),
   fConfigFileName(configFileName),
   fGAliceFileName("galice.root"),
+  fEventsPerFile(),
   fBkgrdFileNames(NULL),
   fUseBkgrdVertex(kTRUE),
   fRegionOfInterest(kTRUE)
@@ -138,12 +151,18 @@ AliSimulation::AliSimulation(const AliSimulation& sim) :
   fNEvents(sim.fNEvents),
   fConfigFileName(sim.fConfigFileName),
   fGAliceFileName(sim.fGAliceFileName),
+  fEventsPerFile(),
   fBkgrdFileNames(NULL),
   fUseBkgrdVertex(sim.fUseBkgrdVertex),
   fRegionOfInterest(sim.fRegionOfInterest)
 {
 // copy constructor
 
+  for (Int_t i = 0; i < sim.fEventsPerFile.GetEntriesFast(); i++) {
+    if (!sim.fEventsPerFile[i]) continue;
+    fEventsPerFile.Add(sim.fEventsPerFile[i]->Clone());
+  }
+
   fBkgrdFileNames = new TObjArray;
   for (Int_t i = 0; i < sim.fBkgrdFileNames->GetEntriesFast(); i++) {
     if (!sim.fBkgrdFileNames->At(i)) continue;
@@ -166,6 +185,8 @@ AliSimulation::~AliSimulation()
 {
 // clean up
 
+  fEventsPerFile.Delete();
+
   if (fBkgrdFileNames) {
     fBkgrdFileNames->Delete();
     delete fBkgrdFileNames;
@@ -205,6 +226,18 @@ void AliSimulation::SetGAliceFile(const char* fileName)
 }
 
 //_____________________________________________________________________________
+void AliSimulation::SetEventsPerFile(const char* detector, const char* type, 
+                                    Int_t nEvents)
+{
+// set the number of events per file for the given detector and data type
+// ("Hits", "Summable Digits", "Digits", "Reconstructed Points" or "Tracks")
+
+  TNamed* obj = new TNamed(detector, type);
+  obj->SetUniqueID(nEvents);
+  fEventsPerFile.Add(obj);
+}
+
+//_____________________________________________________________________________
 void AliSimulation::MergeWith(const char* fileName, Int_t nSignalPerBkgrd)
 {
 // add a file with background events for merging
@@ -316,6 +349,33 @@ Bool_t AliSimulation::RunSimulation(Int_t nEvents)
     gAlice->Generator()->SetTrackingFlag(0);
   }
 
+  // set the number of events per file for given detectors and data types
+  for (Int_t i = 0; i < fEventsPerFile.GetEntriesFast(); i++) {
+    if (!fEventsPerFile[i]) continue;
+    const char* detName = fEventsPerFile[i]->GetName();
+    const char* typeName = fEventsPerFile[i]->GetTitle();
+    TString loaderName(detName);
+    loaderName += "Loader";
+    AliLoader* loader = runLoader->GetLoader(loaderName);
+    if (!loader) {
+      Error("RunSimulation", "no loader for %s found\n"
+           "Number of events per file not set for %s %s", 
+           detName, typeName, detName);
+      continue;
+    }
+    AliDataLoader* dataLoader = 
+      loader->GetDataLoader(typeName);
+    if (!dataLoader) {
+      Error("RunSimulation", "no data loader for %s found\n"
+           "Number of events per file not set for %s %s", 
+           typeName, detName, typeName);
+      continue;
+    }
+    dataLoader->SetNumberOfEventsPerFile(fEventsPerFile[i]->GetUniqueID());
+    Info("RunSimulation", "number of events per file set to %d for %s %s",
+        fEventsPerFile[i]->GetUniqueID(), detName, typeName);
+  }
+
   Info("RunSimulation", "running gAlice");
   gAlice->Run(nEvents);
 
index 8b00917..65bdb2c 100644 (file)
@@ -30,6 +30,8 @@ public:
   void           SetNumberOfEvents(Int_t nEvents);
   void           SetConfigFile(const char* fileName);
   void           SetGAliceFile(const char* fileName);
+  void           SetEventsPerFile(const char* detector, const char* type, 
+                                 Int_t nEvents);
 
   void           SetRunGeneration(Bool_t run) {fRunGeneration = run;};
   void           SetRunSimulation(Bool_t run) {fRunSimulation = run;};
@@ -71,6 +73,8 @@ private:
   Int_t          fNEvents;            // number of events
   TString        fConfigFileName;     // name of the config file
   TString        fGAliceFileName;     // name of the galice file
+  TObjArray      fEventsPerFile;      // number of events per file for given detectors and data types
+
   TObjArray*     fBkgrdFileNames;     // names of background files for merging
   Bool_t         fUseBkgrdVertex;     // use vertex from background in case of merging
   Bool_t         fRegionOfInterest;   // digitization in region of interest