#include "AliGenEventHeader.h"
#include "AliMC.h"
#include "AliHLTSimulation.h"
-#include "AliQADataMakerSteer.h"
#include "AliSysInfo.h"
-#include "AliGenMC.h"
#include "AliMagF.h"
+#include "AliGRPObject.h"
ClassImp(AliSimulation)
SetGAliceFile("galice.root");
// for QA
- for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++)
- fQACycles[iDet] = 999999;
fQASteer = new AliQADataMakerSteer("sim") ;
fQASteer->SetActiveDetectors(fQADetectors) ;
+ fQATasks = Form("%d %d %d", AliQA::kHITS, AliQA::kSDIGITS, AliQA::kDIGITS) ;
fQASteer->SetTasks(fQATasks) ;
}
if (sim.fSpecCDBUri[i]) fSpecCDBUri.Add(sim.fSpecCDBUri[i]->Clone());
}
fgInstance = this;
-
-// for QA
- for (Int_t iDet = 0; iDet < fgkNDetectors; iDet++)
- fQACycles[iDet] = sim.fQACycles[iDet];
}
//_____________________________________________________________________________
}
-
- // 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;
}
TString trconfiguration = config;
if (trconfiguration.IsNull()) {
- if (gAlice->GetTriggerDescriptor() != "") {
+ if (strcmp(gAlice->GetTriggerDescriptor(),"")) {
trconfiguration = gAlice->GetTriggerDescriptor();
}
else
// Either from AliSimulation or from
// gAlice
if (fMakeTrigger.IsNull()) {
- if (gAlice->GetTriggerDescriptor() != "")
+ if (strcmp(gAlice->GetTriggerDescriptor(),""))
fMakeTrigger = gAlice->GetTriggerDescriptor();
}
else
if (fStopOnError) return kFALSE;
}
- delete runLoader;
- //PH Temporary fix to avoid interference with the PHOS loder/getter
- //PH The problem has to be solved in more general way 09/06/05
-
return kTRUE;
}
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");
if (fStopOnError) return kFALSE; else continue;
}
+ ofstream runNbFile(Form("run%u",runLoader->GetHeader()->GetRun()));
+ 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);
Int_t selEvents = 0;
for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
- fprintf(pipe, "GDC\n");
- Float_t ldc = 0;
- Int_t prevLDC = -1;
- if (selrawdata) {
+ UInt_t detectorPattern = 0;
+ runLoader->GetEvent(iEvent);
+ if (!runLoader->LoadTrigger()) {
+ AliCentralTrigger *aCTP = runLoader->GetTrigger();
+ detectorPattern = aCTP->GetClusterMask();
// Check if the event was triggered by CTP
- runLoader->GetEvent(iEvent);
- if (!runLoader->LoadTrigger()) {
- AliCentralTrigger *aCTP = runLoader->GetTrigger();
+ if (selrawdata) {
if (aCTP->GetClassMask()) selEvents++;
}
- else {
+ }
+ else {
+ AliWarning("No trigger can be loaded! Some fields in the event header will be empty !");
+ if (selrawdata) {
AliWarning("No trigger can be loaded! Writing of selected raw data is abandoned !");
selrawdata = kFALSE;
}
}
+ fprintf(pipe, "GDC DetectorPattern %u\n", detectorPattern);
+ Float_t ldc = 0;
+ Int_t prevLDC = -1;
+
// loop over detectors and DDLs
for (Int_t iDet = 0; iDet < AliDAQ::kNDetectors; iDet++) {
for (Int_t iDDL = 0; iDDL < AliDAQ::NumberOfDdls(iDet); iDDL++) {
for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
// Get the trigger decision and cluster
+ UInt_t detectorPattern = 0;
TString detClust;
runLoader->GetEvent(iEvent);
if (!runLoader->LoadTrigger()) {
AliCentralTrigger *aCTP = runLoader->GetTrigger();
if (aCTP->GetClassMask() == 0) continue;
- detClust = AliDAQ::ListOfTriggeredDetectors(aCTP->GetClusterMask());
+ detectorPattern = aCTP->GetClusterMask();
+ detClust = AliDAQ::ListOfTriggeredDetectors(detectorPattern);
AliInfo(Form("List of detectors to be read out: %s",detClust.Data()));
}
- fprintf(pipe2, "GDC\n");
+ fprintf(pipe2, "GDC DetectorPattern %u\n", detectorPattern);
Float_t ldc = 0;
Int_t prevLDC = -1;
// 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>
// 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");
// 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));
{
// run the QA on summable hits, digits or digits
+ if(!gAlice) return kFALSE;
fQASteer->SetRunLoader(gAlice->GetRunLoader()) ;
TString detectorsw("") ;
detectorsw = fQASteer->Run(fQADetectors.Data()) ;
if ( detectorsw.IsNull() )
rv = kFALSE ;
+ else
+ fQASteer->EndOfCycle(detectorsw) ;
return rv ;
}
fQADetectors = detAndAction(0, colon) ;
if (fQADetectors.Contains("ALL") )
fQADetectors = Form("%s %s", fMakeDigits.Data(), fMakeDigitsFromHits.Data()) ;
- fQATasks = detAndAction(colon+1, detAndAction.Sizeof() ) ;
+ fQATasks = detAndAction(colon+1, detAndAction.Sizeof() ) ;
if (fQATasks.Contains("ALL") ) {
fQATasks = Form("%d %d %d", AliQA::kHITS, AliQA::kSDIGITS, AliQA::kDIGITS) ;
} else {
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 AliGenMC *gen = static_cast<const AliGenMC*>(gAlice->Generator());
+ 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);
TString target;
gen->GetTarget(target,a,z);
TString beamType = projectile + "-" + target;
- grpMap->Add(new TObjString("fAliceBeamType"),new TObjString(beamType.Data()));
+ if (!beamType.CompareTo("-")) {
+
+ grpObj->SetBeamType("UNKNOWN");
+ }
+ else {
+ 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("UNKNOWN"));
+ AliWarning("Unknown beam type and energy! Setting energy to 0");
+ grpObj->SetBeamEnergy(0);
+ grpObj->SetBeamType("UNKNOWN");
}
UInt_t detectorPattern = 0;
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("fLHCCondition"),new TObjString("0"));
- 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();
AliCDBId id("GRP/GRP/Data", man->GetRun(), man->GetRun());
AliCDBMetaData *metadata= new AliCDBMetaData();
- // Get root version
- const char* rootv = gROOT->GetVersion();
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);
}
+
+