Generation of event time-stamps according to GRP SOR/EOR times. The method to active...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 Aug 2011 14:01:33 +0000 (14:01 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 Aug 2011 14:01:33 +0000 (14:01 +0000)
STEER/STEER/AliMC.cxx
STEER/STEER/AliSimulation.cxx
STEER/STEER/AliSimulation.h
STEER/STEERBase/AliHeader.cxx
STEER/STEERBase/AliHeader.h

index 83dae2f..69e6967 100644 (file)
@@ -681,6 +681,7 @@ void AliMC::FinishEvent()
   // Update Header information 
   header->SetNprimary(stack->GetNprimary());
   header->SetNtrack(stack->GetNtrack());  
+  header->SetTimeStamp(AliSimulation::Instance()->GenerateTimeStamp());
 
   // Write out the kinematics
   if (!AliSimulation::Instance()->Lego()) stack->FinishEvent();
index 6306067..0c6ab5b 100644 (file)
@@ -196,6 +196,9 @@ AliSimulation::AliSimulation(const char* configFileName,
   fUseVertexFromCDB(0),
   fUseMagFieldFromGRP(0),
   fGRPWriteLocation(Form("local://%s", gSystem->pwd())),
+  fUseTimeStampFromCDB(0),
+  fTimeStart(0),
+  fTimeEnd(0),
   fQADetectors("ALL"),                  
   fQATasks("ALL"),     
   fRunQA(kTRUE), 
@@ -1032,6 +1035,23 @@ Bool_t AliSimulation::RunSimulation(Int_t nEvents)
          }
       }
   }
+
+  // If requested we take the SOR and EOR time-stamps from the GRP and use them
+  // in order to generate the event time-stamps
+  if (fUseTimeStampFromCDB) {
+    AliGRPManager grpM;
+    grpM.ReadGRPEntry();
+    const AliGRPObject *grpObj = grpM.GetGRPData();
+    if (!grpObj || (grpObj->GetTimeEnd() <= grpObj->GetTimeStart())) {
+      AliError("Missing GRP or bad SOR/EOR time-stamps! Switching off the time-stamp generation from GRP!");
+      fTimeStart = fTimeEnd = 0;
+      fUseTimeStampFromCDB = kFALSE;
+    }
+    else {
+      fTimeStart = grpObj->GetTimeStart();
+      fTimeEnd = grpObj->GetTimeEnd();
+    }
+  }
   
   if(AliCDBManager::Instance()->GetRun() >= 0) { 
     AliRunLoader::Instance()->SetRunNumber(AliCDBManager::Instance()->GetRun());
@@ -2267,10 +2287,8 @@ void AliSimulation::WriteGRPEntry()
   AliGRPObject* grpObj = new AliGRPObject();
 
   grpObj->SetRunType("PHYSICS");
-  grpObj->SetTimeStart(0);
-  TDatime curtime;
-  grpObj->SetTimeStart(0);
-  grpObj->SetTimeEnd(curtime.Convert()); 
+  grpObj->SetTimeStart(fTimeStart);
+  grpObj->SetTimeEnd(fTimeEnd); 
   grpObj->SetBeamEnergyIsSqrtSHalfGeV(); // new format of GRP: store sqrt(s)/2 in GeV
 
   const AliGenerator *gen = gAlice->GetMCApp()->Generator();
@@ -2374,4 +2392,13 @@ void AliSimulation::WriteGRPEntry()
   man->SetLock(1, fKey);
 }
 
-
+//_____________________________________________________________________________
+time_t AliSimulation::GenerateTimeStamp() const
+{
+  // Generate event time-stamp according to
+  // SOR/EOR time from GRP
+  if (fUseTimeStampFromCDB)
+    return fTimeStart + gRandom->Integer(fTimeEnd-fTimeStart);
+  else
+    return 0;
+}
index 6239ff5..76e4941 100644 (file)
@@ -135,6 +135,9 @@ public:
   void UseMagFieldFromGRP() {fUseMagFieldFromGRP = kTRUE;} 
   void SetGRPWriteLocation(char* loc) {fGRPWriteLocation = loc;}
 
+  void UseTimeStampFromCDB()   {fUseTimeStampFromCDB   = kTRUE;}
+  time_t GenerateTimeStamp() const;
+
 private:
 
   AliSimulation(const AliSimulation&); // Not implemented
@@ -190,6 +193,10 @@ private:
   Bool_t          fUseVertexFromCDB;   // Flag to use Vertex from CDB
   Bool_t          fUseMagFieldFromGRP; // Use magnetic field settings from GRP
   TString         fGRPWriteLocation;   // Location to write the GRP entry from simulation
+
+  Bool_t          fUseTimeStampFromCDB;// Flag to generate event time-stamps according to SOR/EOR from GRP
+  time_t          fTimeStart;          // SOR time-stamp
+  time_t          fTimeEnd;            // EOR time-stamp
   
   //QA stuff
   static const Int_t   fgkNDetectors = 15 ;             // number of detectors
@@ -208,7 +215,7 @@ private:
 
   Bool_t         fWriteGRPEntry;      // Write or not GRP entry corresponding to the settings in Config.C
 
-  ClassDef(AliSimulation, 11)  // class for running generation, simulation and digitization
+  ClassDef(AliSimulation, 12)  // class for running generation, simulation and digitization
 };
 
 #endif
index 3870381..6863be4 100644 (file)
@@ -42,6 +42,7 @@ AliHeader::AliHeader():
   fNtrack(0),
   fEvent(0),
   fEventNrInRun(0),
+  fTimeStamp(0),
   fStack(0),
   fGenHeader(0),
   fDetHeaders(0)
@@ -60,6 +61,7 @@ AliHeader::AliHeader(const AliHeader& head):
   fNtrack(0),
   fEvent(0),
   fEventNrInRun(0),
+  fTimeStamp(0),
   fStack(0),
   fGenHeader(0),
   fDetHeaders(0)
@@ -78,6 +80,7 @@ AliHeader::AliHeader(Int_t run, Int_t event):
   fNtrack(0),
   fEvent(event),
   fEventNrInRun(0),
+  fTimeStamp(0),
   fStack(0),
   fGenHeader(0), 
   fDetHeaders(0) 
@@ -95,6 +98,7 @@ AliHeader::AliHeader(Int_t run, Int_t event, Int_t evNumber):
   fNtrack(0),
   fEvent(event),
   fEventNrInRun(evNumber),
+  fTimeStamp(0),
   fStack(0),
   fGenHeader(0), 
   fDetHeaders(0) 
@@ -129,6 +133,7 @@ void AliHeader::Reset(Int_t run, Int_t event)
   fNprimary=0;
   fNtrack=0;
   fEvent=event;
+  fTimeStamp=0;
   if (fDetHeaders) fDetHeaders->Delete();
 }
 
@@ -144,6 +149,7 @@ void AliHeader::Reset(Int_t run, Int_t event, Int_t evNumber)
   fNtrack=0;
   fEvent=event;
   fEventNrInRun=evNumber;
+  fTimeStamp=0;
   if (fDetHeaders) fDetHeaders->Clear();
 }
 
@@ -159,6 +165,7 @@ void AliHeader::Print(const char*) const
   printf("              Number of Vertex %d\n",fNvertex);
   printf("              Number of Primary %d\n",fNprimary);
   printf("              Number of Tracks %d\n",fNtrack);
+  printf("              Time-stamp %ld\n",fTimeStamp);
   printf(
   "=========== Header for run %d Event %d = end ============================================\n\n",
   fRun,fEvent);
index f4ec8e5..1adbdd2 100644 (file)
@@ -58,6 +58,8 @@ public:
   virtual void AddDetectorEventHeader(AliDetectorEventHeader* header);
   virtual AliDetectorEventHeader* GetDetectorEventHeader(const char *name) const;
   
+  virtual  void SetTimeStamp(time_t timeStamp) {fTimeStamp = timeStamp;}
+  virtual  time_t GetTimeStamp() const {return fTimeStamp;}
   
   virtual void Print(const char *opt=0) const;
 
@@ -74,11 +76,12 @@ protected:
   Int_t         fNtrack;            //Number of tracks
   Int_t         fEvent;             //Event number (serial in the file)
   Int_t         fEventNrInRun;      //Unique Event number within the run
+  time_t        fTimeStamp;         //Event time-stamp
   AliStack     *fStack;             //Pointer to stack
   AliGenEventHeader* fGenHeader;    //Event Header for Generator
   TObjArray*         fDetHeaders;   //Event Headers for detector specific information 
 
-  ClassDef(AliHeader,3) //Alice event header    
+  ClassDef(AliHeader,4) //Alice event header    
 };
 
 #endif