]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliSimulation.cxx
HLT reconstruction is now embedded correctly into the simulation chain (Matthias)
[u/mrichter/AliRoot.git] / STEER / AliSimulation.cxx
index d8f2b72c6dfd2ab8c21fd111132a940e852a6304..c70e1d6aa6749f6eee433203fa867d59c5afc206 100644 (file)
 #include "AliHLTSimulation.h"
 #include "AliSysInfo.h"
 #include "AliMagF.h"
+#include "AliGRPObject.h"
 
 ClassImp(AliSimulation)
 
@@ -723,9 +724,9 @@ Bool_t AliSimulation::Run(Int_t nEvents)
   }
 
   
-  
-  // run HLT simulation
-  if (!fRunHLT.IsNull()) {
+  // run HLT simulation on simulated digit data if raw data is not
+  // simulated, otherwise its called as part of WriteRawData
+  if (!fRunHLT.IsNull() && fWriteRawData.IsNull()) {
     if (!RunHLT()) {
       if (fStopOnError) return kFALSE;
     }
@@ -1117,16 +1118,18 @@ Bool_t AliSimulation::WriteRawData(const char* detectors,
   AliCodeTimerAuto("")
   
   TString detStr = detectors;
-  if (IsSelected("HLT", detStr))
-  {
-       // Do nothing. "HLT" will be removed from detStr because the HLT raw
-       // data files are generated in RunHLT.
-  }
-
   if (!WriteRawFiles(detStr.Data())) {
     if (fStopOnError) return kFALSE;
   }
 
+  // run HLT simulation on simulated DDL raw files
+  // and produce HLT ddl raw files to be included in date/root file
+  if (IsSelected("HLT", detStr) && !fRunHLT.IsNull()) {
+    if (!RunHLT()) {
+      if (fStopOnError) return kFALSE;
+    }
+  }
+
   TString dateFileName(fileName);
   if (!dateFileName.IsNull()) {
     Bool_t rootOutput = dateFileName.EndsWith(".root");
@@ -1199,6 +1202,11 @@ Bool_t AliSimulation::WriteRawFiles(const char* detectors)
     runNbFile.close();
 
     TString detStr = detectors;
+    if (IsSelected("HLT", detStr)) {
+      // Do nothing. "HLT" will be removed from detStr and HLT raw
+      // data files are generated in RunHLT.
+    }
+
     TObjArray* detArray = runLoader->GetAliRun()->Detectors();
     for (Int_t iDet = 0; iDet < detArray->GetEntriesFast(); iDet++) {
       AliModule* det = (AliModule*) detArray->At(iDet);
@@ -1682,8 +1690,8 @@ Bool_t AliSimulation::RunHLT()
   // AliSimulation::SetRunHLT can be used to set the options for HLT simulation
   // The default simulation depends on the HLT component libraries and their
   // corresponding agents which define components and chains to run. See
-  // http://web.ift.uib.no/~kjeks/doc/alice-hlt/
-  // http://web.ift.uib.no/~kjeks/doc/alice-hlt/classAliHLTModuleAgent.html
+  // http://web.ift.uib.no/~kjeks/doc/alice-hlt-current/
+  // http://web.ift.uib.no/~kjeks/doc/alice-hlt-current/classAliHLTModuleAgent.html
   //
   // The libraries to be loaded can be specified as an option.
   // <pre>
@@ -1699,8 +1707,11 @@ Bool_t AliSimulation::RunHLT()
   //     disable redirection of log messages to AliLog class
   // \li config=<i>macro</i>
   //     configuration macro
-  // \li localrec=<i>configuration</i>
+  // \li chains=<i>configuration</i>
   //     comma separated list of configurations to be run during simulation
+  // \li rawfile=<i>file</i>
+  //     source for the RawReader to be created, the default is <i>./</i> if
+  //     raw data is simulated
 
   int iResult=0;
   AliRunLoader* pRunLoader = LoadRun("READ");
@@ -1750,11 +1761,21 @@ Bool_t AliSimulation::RunHLT()
   // init the HLT simulation
   TString options;
   if (fRunHLT.CompareTo("default")!=0) options=fRunHLT;
-  if (!IsSelected("HLT", fWriteRawData)) {
+  TString detStr = fWriteRawData;
+  if (!IsSelected("HLT", detStr)) {
     options+=" writerawfiles=";
   } else {
     options+=" writerawfiles=HLT";
   }
+
+  if (!detStr.IsNull() && !options.Contains("rawfile=")) {
+    // as a matter of fact, HLT will run reconstruction and needs the RawReader
+    // in order to get detector data. By default, RawReaderFile is used to read
+    // the already simulated ddl files. Date and Root files from the raw data
+    // are generated after the HLT simulation.
+    options+=" rawfile=./";
+  }
+
   AliHLTSimulationInit_t fctInit=(AliHLTSimulationInit_t)(gSystem->DynFindSymbol(ALIHLTSIMULATION_LIBRARY, ALIHLTSIMULATION_INIT));
   if (fctInit==NULL || (iResult=(fctInit(pHLT, pRunLoader, options.Data())))<0) {
     AliError(Form("can not init HLT simulation: error %d (init %p)", iResult, fctInit));
@@ -1876,23 +1897,26 @@ void AliSimulation::ProcessEnvironmentVars()
     AliInfo(Form("Run number = %d", fRun)); 
 }
 
-//_____________________________________________________________________________
+//---------------------------------------------------------------------
+
 void AliSimulation::WriteGRPEntry()
 {
   // Get the necessary information from galice (generator, trigger etc) and
   // write a GRP entry corresponding to the settings in the Config.C used
+  // note that Hall probes and Cavern and Surface Atmos pressures are not simulated.
+
+
   AliInfo("Writing global run parameters entry into the OCDB");
 
-  TMap *grpMap = new TMap();
-  grpMap->SetName("MONTECARLO");
+  AliGRPObject* grpObj = new AliGRPObject();
 
-  grpMap->Add(new TObjString("fRunType"),new TObjString("PHYSICS"));
-  grpMap->Add(new TObjString("fAliceStartTime"),new TObjString("0"));
-  grpMap->Add(new TObjString("fAliceStopTime"),new TObjString("9999"));
+  grpObj->SetRunType("PHYSICS");
+  grpObj->SetTimeStart(0);
+  grpObj->SetTimeEnd(9999);
 
   const AliGenerator *gen = gAlice->Generator();
   if (gen) {
-    grpMap->Add(new TObjString("fAliceBeamEnergy"),new TObjString(Form("%f",gen->GetEnergyCMS())));
+    grpObj->SetBeamEnergy(gen->GetEnergyCMS());
     TString projectile;
     Int_t a,z;
     gen->GetProjectile(projectile,a,z);
@@ -1900,16 +1924,17 @@ void AliSimulation::WriteGRPEntry()
     gen->GetTarget(target,a,z);
     TString beamType = projectile + "-" + target;
     if (!beamType.CompareTo("-")) {
-      grpMap->Add(new TObjString("fAliceBeamType"),new TObjString("UNKNOWN"));
+
+       grpObj->SetBeamType("UNKNOWN");
     }
     else {
-      grpMap->Add(new TObjString("fAliceBeamType"),new TObjString(beamType.Data()));
+       grpObj->SetBeamType(beamType);
     }
   }
   else {
-    AliWarning("Unknown beam type and energy!");
-    grpMap->Add(new TObjString("fAliceBeamEnergy"),new TObjString("UNKNOWN"));
-    grpMap->Add(new TObjString("fAliceBeamType"),new TObjString("0"));
+    AliWarning("Unknown beam type and energy! Setting energy to 0");
+    grpObj->SetBeamEnergy(0);
+    grpObj->SetBeamType("UNKNOWN");
   }
 
   UInt_t detectorPattern  = 0;
@@ -1925,37 +1950,36 @@ void AliSimulation::WriteGRPEntry()
   if (!fRunHLT.IsNull())
     detectorPattern |= (1 << AliDAQ::kHLTId);
 
-  grpMap->Add(new TObjString("fNumberOfDetectors"),new TObjString(Form("%d",nDets)));
-  grpMap->Add(new TObjString("fDetectorMask"),new TObjString(Form("%u",detectorPattern)));
-  grpMap->Add(new TObjString("fLHCPeriod"),new TObjString("LHC08c"));
-
-  grpMap->Add(new TObjString("fLHCState"),new TObjString("STABLE BEAMS"));
-  grpMap->Add(new TObjString("fLHCLuminosity"),new TObjString("0"));
-  grpMap->Add(new TObjString("fBeamIntensity"),new TObjString("0"));
+  grpObj->SetNumberOfDetectors((Char_t)nDets);
+  grpObj->SetDetectorMask((Int_t)detectorPattern);
+  grpObj->SetLHCPeriod("LHC08c");
+  grpObj->SetLHCState("STABLE_BEAMS");
+  grpObj->SetLHCLuminosity(0,(AliGRPObject::Stats)0);
+  grpObj->SetBeamIntensity(0,(AliGRPObject::Stats)0);
 
   AliMagF *field = gAlice->Field();
   Float_t solenoidField = TMath::Abs(field->SolenoidField());
   Float_t factor = field->Factor();
   Float_t l3current = TMath::Abs(factor)*solenoidField*30000./5.;
-  grpMap->Add(new TObjString("fL3Current"),new TObjString(Form("%f",l3current)));
+  grpObj->SetL3Current(l3current,(AliGRPObject::Stats)0);
   
   if (factor > 0) {
-    grpMap->Add(new TObjString("fL3Polarity"),new TObjString("0"));
-    grpMap->Add(new TObjString("fDipolePolarity"),new TObjString("0"));
+    grpObj->SetL3Polarity(0);
+    grpObj->SetDipolePolarity(0);
   }
   else {
-    grpMap->Add(new TObjString("fL3Polarity"),new TObjString("1"));
-    grpMap->Add(new TObjString("fDipolePolarity"),new TObjString("1"));
+    grpObj->SetL3Polarity(1);
+    grpObj->SetDipolePolarity(1);
   }
 
   if (TMath::Abs(factor) != 0)
-    grpMap->Add(new TObjString("fDipoleCurrent"),new TObjString("6000"));
+    grpObj->SetDipoleCurrent(6000,(AliGRPObject::Stats)0);
   else 
-    grpMap->Add(new TObjString("fDipoleCurrent"),new TObjString("0"));
+    grpObj->SetDipoleCurrent(0,(AliGRPObject::Stats)0);
 
-  grpMap->Add(new TObjString("fCavernTemperature"),new TObjString("0"));
-  grpMap->Add(new TObjString("fCavernPressure"),new TObjString("0"));
+  grpObj->SetCavernTemperature(0,(AliGRPObject::Stats)0);
+  
+  //grpMap->Add(new TObjString("fCavernPressure"),new TObjString("0")); ---> not inserted in simulation with the new object, since it is now an AliDCSSensor
 
   // Now store the entry in OCDB
   AliCDBManager* man = AliCDBManager::Instance();
@@ -1966,5 +1990,7 @@ void AliSimulation::WriteGRPEntry()
   metadata->SetResponsible("alice-off@cern.ch");
   metadata->SetComment("Automatically produced GRP entry for Monte Carlo");
  
-  man->Put(grpMap,id,metadata);
+  man->Put(grpObj,id,metadata);
 }
+
+