#include <TSystem.h>
#include <TVirtualMC.h>
#include <TVirtualMCApplication.h>
+#include <TDatime.h>
#include "AliAlignObj.h"
#include "AliCDBEntry.h"
#include "AliCodeTimer.h"
#include "AliDAQ.h"
#include "AliDigitizer.h"
-#include "AliESD.h"
+#include "AliESDEvent.h"
#include "AliGRPObject.h"
#include "AliGenEventHeader.h"
#include "AliGenerator.h"
fLoadAlObjsListOfDets("ALL"),
fMakeSDigits("ALL"),
fMakeDigits("ALL"),
- fMakeTrigger(""),
+ fTriggerConfig(""),
fMakeDigitsFromHits(""),
fWriteRawData(""),
fRawDataFileName(""),
fLego(NULL),
fQADetectors("ALL"),
fQATasks("ALL"),
- fQAManager(NULL),
fRunQA(kTRUE),
fEventSpecie(AliRecoParam::kDefault),
fWriteQAExpertData(kTRUE),
+ fGeometryFile(),
fRunHLT("default"),
+ fpHLT(NULL),
fWriteGRPEntry(kTRUE)
{
// create simulation object with default parameters
SetGAliceFile("galice.root");
// for QA
- fQAManager = AliQAManager::QAManager("sim") ;
- fQAManager->SetActiveDetectors(fQADetectors) ;
+ AliQAManager * qam = AliQAManager::QAManager(AliQAv1::kSIMMODE) ;
+ qam->SetActiveDetectors(fQADetectors) ;
fQATasks = Form("%d %d %d", AliQAv1::kHITS, AliQAv1::kSDIGITS, AliQAv1::kDIGITS) ;
- fQAManager->SetTasks(fQATasks) ;
+ qam->SetTasks(fQATasks) ;
}
//_____________________________________________________________________________
fSpecCDBUri.Delete();
if (fgInstance==this) fgInstance = 0;
- delete fQAManager ;
-
+ AliQAManager::QAManager()->ShowQA() ;
+ AliQAManager::Destroy() ;
AliCodeTimer::Instance()->Print();
}
if (fInitCDBCalled) return;
fInitCDBCalled = kTRUE;
- fQAManager = AliQAManager::QAManager("sim") ;
- fQAManager->SetActiveDetectors(fQADetectors) ;
+ AliQAManager * qam = AliQAManager::QAManager(AliQAv1::kSIMMODE) ;
+ qam->SetActiveDetectors(fQADetectors) ;
fQATasks = Form("%d %d %d", AliQAv1::kHITS, AliQAv1::kSDIGITS, AliQAv1::kDIGITS) ;
- fQAManager->SetTasks(fQATasks) ;
+ qam->SetTasks(fQATasks) ;
if (fWriteQAExpertData)
- fQAManager->SetWriteExpert() ;
+ qam->SetWriteExpert() ;
- if (fQAManager->IsDefaultStorageSet()) {
+ if (qam->IsDefaultStorageSet()) {
AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
AliWarning("Default QA reference storage has been already set !");
AliWarning(Form("Ignoring the default storage declared in AliSimulation: %s",fQARefUri.Data()));
AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
- fQARefUri = fQAManager->GetDefaultStorage()->GetURI();
+ fQARefUri = qam->GetDefaultStorage()->GetURI();
} else {
if (fQARefUri.Length() > 0) {
AliDebug(2,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
AliWarning(Form("Setting it now to: %s", fQARefUri.Data()));
AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
- fQAManager->SetDefaultStorage(fQARefUri);
+ qam->SetDefaultStorage(fQARefUri);
}
}
}
if(fRun >= 0) {
- AliDebug(2,"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
AliDebug(2, Form("Setting CDB run number to: %d",fRun));
- AliDebug(2, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
} else {
fRun=0;
- AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
- AliWarning("Run number not yet set !!!!");
- AliWarning(Form("Setting it now to: %d", fRun));
- AliWarning("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
-
+ AliWarning(Form("Run number not yet set !!!! Setting it now to: %d",
+ fRun));
}
man->SetRun(fRun);
}
// Export ideal geometry
- if(!gAlice->IsRootGeometry()) AliGeomManager::GetGeometry()->Export("geometry.root");
+ if(!IsGeometryFromFile()) AliGeomManager::GetGeometry()->Export("geometry.root");
// Load alignment data from CDB and apply to geometry through AliGeomManager
if(fLoadAlignFromCDB){
// run the generation, simulation and digitization
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
+ AliSysInfo::AddStamp("Start_Run");
// Load run number and seed from environmental vars
ProcessEnvironmentVars();
+ AliSysInfo::AddStamp("ProcessEnvironmentVars");
gRandom->SetSeed(fSeed);
if (nEvents > 0) fNEvents = nEvents;
+ // create and setup the HLT instance
+ if (!fRunHLT.IsNull() && !CreateHLT()) {
+ if (fStopOnError) return kFALSE;
+ // disable HLT
+ fRunHLT="";
+ }
// generation and simulation -> hits
if (fRunGeneration) {
if (!RunSimulation()) if (fStopOnError) return kFALSE;
}
+ AliSysInfo::AddStamp("RunSimulation");
// initialize CDB storage from external environment
// (either CDB manager or AliSimulation setters),
// if not already done in RunSimulation()
InitCDB();
+ AliSysInfo::AddStamp("InitCDB");
// Set run number in CDBManager from data
// From this point on the run number must be always loaded from data!
if (!AliGeomManager::GetGeometry()) {
// Initialize the geometry manager
AliGeomManager::LoadGeometry("geometry.root");
+ AliSysInfo::AddStamp("GetGeometry");
+
// // Check that the consistency of symbolic names for the activated subdetectors
// // in the geometry loaded by AliGeomManager
// Misalign geometry
if(!MisalignGeometry()) if (fStopOnError) return kFALSE;
}
+ AliSysInfo::AddStamp("MissalignGeometry");
// hits -> summable digits
}
}
+ AliSysInfo::AddStamp("Hits2Digits");
// digits -> trigger
- if (!RunTrigger(fMakeTrigger,fMakeDigits)) {
+ if (!RunTrigger(fTriggerConfig,fMakeDigits)) {
if (fStopOnError) return kFALSE;
}
+ AliSysInfo::AddStamp("RunTrigger");
// digits -> raw data
}
}
+ AliSysInfo::AddStamp("WriteRaw");
// run HLT simulation on simulated digit data if raw data is not
// simulated, otherwise its called as part of WriteRawData
if (fStopOnError) return kFALSE;
}
}
+
+ AliSysInfo::AddStamp("RunHLT");
//QA
if (fRunQA) {
return kFALSE ;
}
+ AliSysInfo::AddStamp("RunQA");
+
// Cleanup of CDB manager: cache and active storages!
AliCDBManager::Instance()->ClearCache();
// run the generation and simulation
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
// initialize CDB storage and run number from external environment
// (either CDB manager or AliSimulation setters)
AliPDG::AddParticlesToPdgDataBase();
- gAlice->GetMCApp()->Init();
-
gMC->SetMagField(TGeoGlobalMagField::Instance()->GetField());
+ gAlice->GetMCApp()->Init();
+
//Must be here because some MCs (G4) adds detectors here and not in Config.C
gAlice->InitLoaders();
{
// run the trigger
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
// initialize CDB storage from external environment
// (either CDB manager or AliSimulation setters),
TString trconfiguration = config;
if (trconfiguration.IsNull()) {
- if (strcmp(gAlice->GetTriggerDescriptor(),"")) {
- trconfiguration = gAlice->GetTriggerDescriptor();
+ if(!fTriggerConfig.IsNull()) {
+ trconfiguration = fTriggerConfig;
}
else
AliWarning("No trigger descriptor is specified. Loading the one that is in the CDB.");
{
// run the generation and simulation
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
// initialize CDB storage and run number from external environment
// (either CDB manager or AliSimulation setters)
+ AliSysInfo::AddStamp("RunSimulation_Begin");
InitCDB();
+ AliSysInfo::AddStamp("RunSimulation_InitCDB");
InitRunNumber();
SetCDBLock();
+ AliSysInfo::AddStamp("RunSimulation_SetCDBLock");
if (!gAlice) {
AliError("no gAlice object. Restart aliroot and try again.");
gROOT->LoadMacro(fConfigFileName.Data());
gInterpreter->ProcessLine(gAlice->GetConfigFunction());
+ AliSysInfo::AddStamp("RunSimulation_Config");
if(AliCDBManager::Instance()->GetRun() >= 0) {
AliRunLoader::Instance()->SetRunNumber(AliCDBManager::Instance()->GetRun());
AliPDG::AddParticlesToPdgDataBase();
- gAlice->GetMCApp()->Init();
-
gMC->SetMagField(TGeoGlobalMagField::Instance()->GetField());
+ AliSysInfo::AddStamp("RunSimulation_GetField");
+ gAlice->GetMCApp()->Init();
+ AliSysInfo::AddStamp("RunSimulation_InitMCApp");
+
//Must be here because some MCs (G4) adds detectors here and not in Config.C
gAlice->InitLoaders();
AliRunLoader::Instance()->MakeTree("E");
AliRunLoader::Instance()->CdGAFile();
gAlice->Write();
gAlice->SetEventNrInRun(-1); //important - we start Begin event from increasing current number in run
+ AliSysInfo::AddStamp("RunSimulation_InitLoaders");
//___________________________________________________________________________________________
- // Get the trigger descriptor string
- // Either from AliSimulation or from
- // gAlice
- if (fMakeTrigger.IsNull()) {
- if (strcmp(gAlice->GetTriggerDescriptor(),""))
- fMakeTrigger = gAlice->GetTriggerDescriptor();
- }
- else
- gAlice->SetTriggerDescriptor(fMakeTrigger.Data());
+ AliSysInfo::AddStamp("RunSimulation_TriggerDescriptor");
// Set run number in CDBManager
AliInfo(Form("Run number: %d",AliCDBManager::Instance()->GetRun()));
if(!AliGeomManager::CheckSymNamesLUT(detsToBeChecked.Data()))
AliFatalClass("Current loaded geometry differs in the definition of symbolic names!");
MisalignGeometry(runLoader);
+ AliSysInfo::AddStamp("RunSimulation_MisalignGeometry");
#endif
// AliRunLoader* runLoader = AliRunLoader::Instance();
// Write GRP entry corresponding to the setting found in Cofig.C
if (fWriteGRPEntry)
WriteGRPEntry();
+ AliSysInfo::AddStamp("RunSimulation_WriteGRP");
if (nEvents <= 0) nEvents = fNEvents;
}
AliInfo("running gAlice");
- AliSysInfo::AddStamp("Start_simulation");
+ AliSysInfo::AddStamp("Start_ProcessRun");
// Create the Root Tree with one branch per detector
//Hits moved to begin event -> now we are crating separate tree for each event
// End of this run, close files
if(nEvents>0) FinishRun();
- AliSysInfo::AddStamp("Stop_simulation");
+ AliSysInfo::AddStamp("Stop_ProcessRun");
delete runLoader;
return kTRUE;
{
// run the digitization and produce summable digits
static Int_t eventNr=0;
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0) ;
// initialize CDB storage, run number, set CDB lock
InitCDB();
if (!det || !det->IsActive()) continue;
if (IsSelected(det->GetName(), detStr)) {
AliInfo(Form("creating summable digits for %s", det->GetName()));
- AliCodeTimerAuto(Form("creating summable digits for %s", det->GetName()));
+ AliCodeTimerStart(Form("creating summable digits for %s", det->GetName()));
det->Hits2SDigits();
+ AliCodeTimerStop(Form("creating summable digits for %s", det->GetName()));
AliSysInfo::AddStamp(Form("Digit_%s_%d",det->GetName(),eventNr), 0,1, eventNr);
}
}
{
// run the digitization and produce digits from sdigits
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
// initialize CDB storage, run number, set CDB lock
InitCDB();
{
// run the digitization and produce digits from hits
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
// initialize CDB storage, run number, set CDB lock
InitCDB();
// 'selrawdata' flag can be used to enable writing of detectors raw data
// accoring to the trigger cluster.
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
+ AliSysInfo::AddStamp("WriteRawData_Start");
TString detStr = detectors;
if (!WriteRawFiles(detStr.Data())) {
if (fStopOnError) return kFALSE;
}
+ AliSysInfo::AddStamp("WriteRawFiles");
// 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()) {
+ // bugfix 2009-06-26: the decision whether to write HLT raw data
+ // is taken in RunHLT. Here HLT always needs to be run in order to
+ // create HLT digits, unless its switched off. This is due to the
+ // special placement of the HLT between the generation of DDL files
+ // and conversion to DATE/Root file.
+ detStr.ReplaceAll("HLT", "");
+ if (!fRunHLT.IsNull()) {
if (!RunHLT()) {
if (fStopOnError) return kFALSE;
}
}
+ AliSysInfo::AddStamp("WriteRawData_RunHLT");
TString dateFileName(fileName);
if (!dateFileName.IsNull()) {
if (!ConvertRawFilesToDate(dateFileName,selDateFileName)) {
if (fStopOnError) return kFALSE;
}
+ AliSysInfo::AddStamp("ConvertRawFilesToDate");
if (deleteIntermediateFiles) {
AliRunLoader* runLoader = LoadRun("READ");
if (runLoader) for (Int_t iEvent = 0;
sprintf(command, "rm -r raw%d", iEvent);
gSystem->Exec(command);
}
+ delete runLoader;
}
if (rootOutput) {
if (!ConvertDateToRoot(dateFileName, fileName)) {
if (fStopOnError) return kFALSE;
}
+ AliSysInfo::AddStamp("ConvertDateToRoot");
if (deleteIntermediateFiles) {
gSystem->Unlink(dateFileName);
}
{
// convert the digits to raw data DDL files
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
AliRunLoader* runLoader = LoadRun("READ");
if (!runLoader) return kFALSE;
// The second argument is not empty when the user decides to write
// the detectors raw data according to the trigger cluster.
- AliCodeTimerAuto("")
+ AliCodeTimerAuto("",0)
char* path = gSystem->Which(gSystem->Getenv("PATH"), "dateStream");
if (!path) {
AliPDG::AddParticlesToPdgDataBase();
- gAlice->GetMCApp()->Init();
-
gMC->SetMagField(TGeoGlobalMagField::Instance()->GetField());
+ gAlice->GetMCApp()->Init();
+
//Must be here because some MCs (G4) adds detectors here and not in Config.C
gAlice->InitLoaders();
AliRunLoader::Instance()->MakeTree("E");
//
// Open esd file if available
TFile* esdFile = TFile::Open(esdFileName);
- Bool_t esdOK = (esdFile != 0);
- AliESD* esd = new AliESD;
TTree* treeESD = 0;
- if (esdOK) {
- treeESD = (TTree*) esdFile->Get("esdTree");
- if (!treeESD) {
- AliWarning("No ESD tree found");
- esdOK = kFALSE;
- } else {
- treeESD->SetBranchAddress("ESD", &esd);
- }
- }
+ AliESDEvent* esd = new AliESDEvent();
+ esdFile->GetObject("esdTree", treeESD);
+ if (treeESD) esd->ReadFromTree(treeESD);
+
//
// Create the RawReader
TString fileName(rawDirectory);
//
// If ESD information available obtain reconstructed vertex and store in header.
- if (esdOK) {
+ if (treeESD) {
treeESD->GetEvent(nev);
const AliESDVertex* esdVertex = esd->GetPrimaryVertex();
Double_t position[3];
return index ;
}
+//_____________________________________________________________________________
+Bool_t AliSimulation::CreateHLT()
+{
+ // Init the HLT simulation.
+ // The function loads the library and creates the instance of AliHLTSimulation.
+ // the main reason for the decoupled creation is to set the transient OCDB
+ // objects before the OCDB is locked
+
+ // load the library dynamically
+ gSystem->Load(ALIHLTSIMULATION_LIBRARY);
+
+ // check for the library version
+ AliHLTSimulationGetLibraryVersion_t fctVersion=(AliHLTSimulationGetLibraryVersion_t)(gSystem->DynFindSymbol(ALIHLTSIMULATION_LIBRARY, ALIHLTSIMULATION_GET_LIBRARY_VERSION));
+ if (!fctVersion) {
+ AliError(Form("can not load library %s", ALIHLTSIMULATION_LIBRARY));
+ return kFALSE;
+ }
+ if (fctVersion()!= ALIHLTSIMULATION_LIBRARY_VERSION) {
+ AliWarning(Form("%s version does not match: compiled for version %d, loaded %d", ALIHLTSIMULATION_LIBRARY, ALIHLTSIMULATION_LIBRARY_VERSION, fctVersion()));
+ }
+
+ // print compile info
+ typedef void (*CompileInfo)( const char*& date, const char*& time);
+ CompileInfo fctInfo=(CompileInfo)gSystem->DynFindSymbol(ALIHLTSIMULATION_LIBRARY, "CompileInfo");
+ if (fctInfo) {
+ const char* date="";
+ const char* time="";
+ (*fctInfo)(date, time);
+ if (!date) date="unknown";
+ if (!time) time="unknown";
+ AliInfo(Form("%s build on %s (%s)", ALIHLTSIMULATION_LIBRARY, date, time));
+ } else {
+ AliInfo(Form("no build info available for %s", ALIHLTSIMULATION_LIBRARY));
+ }
+
+ // create instance of the HLT simulation
+ AliHLTSimulationCreateInstance_t fctCreate=(AliHLTSimulationCreateInstance_t)(gSystem->DynFindSymbol(ALIHLTSIMULATION_LIBRARY, ALIHLTSIMULATION_CREATE_INSTANCE));
+ if (fctCreate==NULL || (fpHLT=(fctCreate()))==NULL) {
+ AliError(Form("can not create instance of HLT simulation (creator %p)", fctCreate));
+ return kFALSE;
+ }
+
+ TString specObjects;
+ for (Int_t i = 0; i < fSpecCDBUri.GetEntriesFast(); i++) {
+ if (specObjects.Length()>0) specObjects+=" ";
+ specObjects+=fSpecCDBUri[i]->GetName();
+ }
+
+ AliHLTSimulationSetup_t fctSetup=(AliHLTSimulationSetup_t)(gSystem->DynFindSymbol(ALIHLTSIMULATION_LIBRARY, ALIHLTSIMULATION_SETUP));
+ if (fctSetup==NULL || fctSetup(fpHLT, this, specObjects.Data())<0) {
+ AliWarning(Form("failed to setup HLT simulation (function %p)", fctSetup));
+ }
+
+ return kTRUE;
+}
+
//_____________________________________________________________________________
Bool_t AliSimulation::RunHLT()
{
// raw data is simulated
int iResult=0;
+
+ if (!fpHLT && !CreateHLT()) {
+ return kFALSE;
+ }
+ AliHLTSimulation* pHLT=fpHLT;
+
AliRunLoader* pRunLoader = LoadRun("READ");
if (!pRunLoader) return kFALSE;
// initialize CDB storage, run number, set CDB lock
+ // thats for the case of running HLT simulation without all the other steps
+ // multiple calls are handled by the function, so we can just call
InitCDB();
if (!SetRunNumberFromData()) if (fStopOnError) return kFALSE;
SetCDBLock();
- // load the library dynamically
- gSystem->Load(ALIHLTSIMULATION_LIBRARY);
-
- // check for the library version
- AliHLTSimulationGetLibraryVersion_t fctVersion=(AliHLTSimulationGetLibraryVersion_t)(gSystem->DynFindSymbol(ALIHLTSIMULATION_LIBRARY, ALIHLTSIMULATION_GET_LIBRARY_VERSION));
- if (!fctVersion) {
- AliError(Form("can not load library %s", ALIHLTSIMULATION_LIBRARY));
- return kFALSE;
- }
- if (fctVersion()!= ALIHLTSIMULATION_LIBRARY_VERSION) {
- AliError(Form("%s version does not match: compiled for version %d, loaded %d", ALIHLTSIMULATION_LIBRARY, ALIHLTSIMULATION_LIBRARY_VERSION, fctVersion()));
- return kFALSE;
- }
-
- // print compile info
- typedef void (*CompileInfo)( char*& date, char*& time);
- CompileInfo fctInfo=(CompileInfo)gSystem->DynFindSymbol(ALIHLTSIMULATION_LIBRARY, "CompileInfo");
- if (fctInfo) {
- Char_t* date=0;
- Char_t* time=0;
- (*fctInfo)(date,time);
- if (!date) {date=new Char_t[8]; strcpy(date,"unknown");}
- if (!time) {time=new Char_t[8]; strcpy(time,"unknown");}
- AliInfo(Form("%s build on %s (%s)", ALIHLTSIMULATION_LIBRARY, date, time));
- delete date;
- delete time;
- } else {
- AliInfo(Form("no build info available for %s", ALIHLTSIMULATION_LIBRARY));
- }
-
- // create instance of the HLT simulation
- AliHLTSimulationCreateInstance_t fctCreate=(AliHLTSimulationCreateInstance_t)(gSystem->DynFindSymbol(ALIHLTSIMULATION_LIBRARY, ALIHLTSIMULATION_CREATE_INSTANCE));
- AliHLTSimulation* pHLT=NULL;
- if (fctCreate==NULL || (pHLT=(fctCreate()))==NULL) {
- AliError(Form("can not create instance of HLT simulation (creator %p)", fctCreate));
- return kFALSE;
- }
-
// init the HLT simulation
TString options;
if (fRunHLT.CompareTo("default")!=0) options=fRunHLT;
// run the QA on summable hits, digits or digits
if(!gAlice) return kFALSE;
- fQAManager->SetRunLoader(AliRunLoader::Instance()) ;
+ AliQAManager::QAManager()->SetRunLoader(AliRunLoader::Instance()) ;
TString detectorsw("") ;
Bool_t rv = kTRUE ;
- fQAManager->SetEventSpecie(fEventSpecie) ;
- detectorsw = fQAManager->Run(fQADetectors.Data()) ;
+ AliQAManager::QAManager()->SetEventSpecie(fEventSpecie) ;
+ detectorsw = AliQAManager::QAManager()->Run(fQADetectors.Data()) ;
if ( detectorsw.IsNull() )
rv = kFALSE ;
return rv ;
}
Int_t colon = detAndAction.Index(":") ;
fQADetectors = detAndAction(0, colon) ;
- if (fQADetectors.Contains("ALL") )
- fQADetectors = Form("%s %s", fMakeDigits.Data(), fMakeDigitsFromHits.Data()) ;
- fQATasks = detAndAction(colon+1, detAndAction.Sizeof() ) ;
+ if (fQADetectors.Contains("ALL") ){
+ TString tmp = Form("%s %s", fMakeDigits.Data(), fMakeDigitsFromHits.Data()) ;
+ Int_t minus = fQADetectors.Last('-') ;
+ TString toKeep = Form("%s %s", fMakeDigits.Data(), fMakeDigitsFromHits.Data()) ;
+ TString toRemove("") ;
+ while (minus >= 0) {
+ toRemove = fQADetectors(minus+1, fQADetectors.Length()) ;
+ toRemove = toRemove.Strip() ;
+ toKeep.ReplaceAll(toRemove, "") ;
+ fQADetectors.ReplaceAll(Form("-%s", toRemove.Data()), "") ;
+ minus = fQADetectors.Last('-') ;
+ }
+ fQADetectors = toKeep ;
+ }
+ fQATasks = detAndAction(colon+1, detAndAction.Sizeof() ) ;
if (fQATasks.Contains("ALL") ) {
fQATasks = Form("%d %d %d", AliQAv1::kHITS, AliQAv1::kSDIGITS, AliQAv1::kDIGITS) ;
} else {
tempo.ReplaceAll(Form("%d", AliQAv1::kDIGITS), AliQAv1::GetTaskName(AliQAv1::kDIGITS)) ;
AliInfo( Form("QA will be done on \"%s\" for \"%s\"\n", fQADetectors.Data(), tempo.Data()) ) ;
fRunQA = kTRUE ;
- fQAManager->SetActiveDetectors(fQADetectors) ;
- fQAManager->SetTasks(fQATasks) ;
+ AliQAManager::QAManager()->SetActiveDetectors(fQADetectors) ;
+ AliQAManager::QAManager()->SetTasks(fQATasks) ;
for (Int_t det = 0 ; det < AliQAv1::kNDET ; det++)
- fQAManager->SetWriteExpert(AliQAv1::DETECTORINDEX_t(det)) ;
+ AliQAManager::QAManager()->SetWriteExpert(AliQAv1::DETECTORINDEX_t(det)) ;
return kTRUE;
}
grpObj->SetRunType("PHYSICS");
grpObj->SetTimeStart(0);
- grpObj->SetTimeEnd(9999);
+ TDatime curtime;
+ grpObj->SetTimeStart(0);
+ grpObj->SetTimeEnd(curtime.Convert());
+ grpObj->SetBeamEnergyIsSqrtSHalfGeV(); // new format of GRP: store sqrt(s)/2 in GeV
const AliGenerator *gen = gAlice->GetMCApp()->Generator();
if (gen) {
- grpObj->SetBeamEnergy(gen->GetEnergyCMS());
+ grpObj->SetBeamEnergy(gen->GetEnergyCMS()/2);
TString projectile;
Int_t a,z;
gen->GetProjectile(projectile,a,z);
}
}
// CTP
- if (!fMakeTrigger.IsNull() || strcmp(gAlice->GetTriggerDescriptor(),""))
+ if (!fTriggerConfig.IsNull())
detectorPattern |= (1 << AliDAQ::DetectorID("TRG"));
// HLT
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 = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
Float_t solenoidField = field ? TMath::Abs(field->SolenoidField()) : 0;
- Float_t factor = field ? field->Factor() : 0;
- Float_t l3current = TMath::Abs(factor)*solenoidField*30000./5.;
- grpObj->SetL3Current(l3current,(AliGRPObject::Stats)0);
-
- if (factor > 0) {
- grpObj->SetL3Polarity(0);
- grpObj->SetDipolePolarity(0);
- }
- else {
- grpObj->SetL3Polarity(1);
- grpObj->SetDipolePolarity(1);
- }
-
- if (TMath::Abs(factor) != 0)
- grpObj->SetDipoleCurrent(6000,(AliGRPObject::Stats)0);
- else
- grpObj->SetDipoleCurrent(0,(AliGRPObject::Stats)0);
+ Float_t factorSol = field ? field->GetFactorSol() : 0;
+ Float_t currentSol = TMath::Abs(factorSol)>1E-6 ?
+ TMath::Nint(TMath::Abs(solenoidField/factorSol))/5.*30000.*TMath::Abs(factorSol) : 0;
+ //
+ Float_t factorDip = field ? field->GetFactorDip() : 0;
+ Float_t currentDip = 6000.*TMath::Abs(factorDip);
+ //
+ grpObj->SetL3Current(currentSol,(AliGRPObject::Stats)0);
+ grpObj->SetDipoleCurrent(currentDip,(AliGRPObject::Stats)0);
+ grpObj->SetL3Polarity(factorSol>0 ? 0:1);
+ grpObj->SetDipolePolarity(factorDip>0 ? 0:1);
+ grpObj->SetUniformBMap(field->IsUniform()); // for special MC with k5kGUniform map
+ grpObj->SetPolarityConventionLHC(); // LHC convention +/+ current -> -/- field main components
+ //
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