#include "TObjArray.h"
#include "TObjString.h"
#include "AliHLTSimulation.h"
+#include "AliSimulation.h"
#include "AliLog.h"
#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliHeader.h"
-#include "AliTracker.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
#include "AliCDBPath.h"
#include "AliCDBId.h"
#include "AliCDBMetaData.h"
+#include "AliCDBStorage.h"
+#include "AliGRPObject.h"
+#include "AliGRPManager.h"
#include "AliHLTSystem.h"
+#include "AliHLTPluginBase.h"
#include "AliRawReaderFile.h"
#include "AliRawReaderDate.h"
#include "AliRawReaderRoot.h"
#include "AliESDEvent.h"
#include "AliHLTOUTComponent.h"
+#include "AliTracker.h"
+#include "TGeoGlobalMagField.h"
+#include "TSystem.h"
+#include "TMath.h"
+#include "TGeoGlobalMagField.h"
#if ALIHLTSIMULATION_LIBRARY_VERSION != LIBHLTSIM_VERSION
#error library version in header file and lib*.pkg do not match
AliHLTSimulation::AliHLTSimulation()
:
fOptions(),
- fpSystem(NULL),
+ fpPluginBase(new AliHLTPluginBase),
fpRawReader(NULL)
{
// see header file for class documentation
AliHLTSimulation::~AliHLTSimulation()
{
// see header file for function documentation
- if (fpSystem) {
- delete fpSystem;
- }
- fpSystem=NULL;
+ if (fpPluginBase) delete fpPluginBase;
+ fpPluginBase=NULL;
+
if (fpRawReader) {
delete fpRawReader;
}
fOptions=options;
TString sysOp;
- if (!fpSystem) fpSystem=new AliHLTSystem;
- if (!fpSystem) {
- AliError("can not create AliHLTSystem object");
+ if(!fpPluginBase) {
+ AliError("internal initialization failed");
+ return -EINVAL;
+ }
+
+ AliHLTSystem* pSystem=fpPluginBase->GetInstance();
+ if (!pSystem) {
+ AliError("can not get AliHLTSystem instance");
return -ENOMEM;
}
- if (fpSystem->CheckStatus(AliHLTSystem::kError)) {
+ if (pSystem->CheckStatus(AliHLTSystem::kError)) {
AliError("HLT system in error state");
return -EFAULT;
}
delete pTokens;
}
- // init solenoid field
- Bool_t bUniformField=kTRUE;
- AliTracker::SetFieldMap(pRunLoader->GetAliRun()->Field(),bUniformField);
- Double_t solenoidBz=AliTracker::GetBz();
AliCDBManager* man = AliCDBManager::Instance();
if (man && man->IsDefaultStorageSet())
{
- const char* cdbSolenoidPath="HLT/ConfigHLT/SolenoidBz";
- int runNo=pRunLoader->GetHeader()->GetRun();
- TString cdbSolenoidParam;
- cdbSolenoidParam.Form("-solenoidBz %f", solenoidBz);
-
- // check if the entry is already there
- AliCDBEntry *pEntry = man->Get(cdbSolenoidPath, runNo);
- TObjString* pString=NULL;
- if (pEntry) pString=dynamic_cast<TObjString*>(pEntry->GetObject());
-
- if (!pEntry || !pString || pString->GetString().CompareTo(cdbSolenoidParam)!=0) {
- TObjString obj(cdbSolenoidParam);
- AliCDBPath cdbSolenoidEntry(cdbSolenoidPath);
- AliCDBId cdbSolenoidId(cdbSolenoidEntry, runNo, runNo);
- AliCDBMetaData cdbMetaData;
- man->Put(&obj, cdbSolenoidId, &cdbMetaData);
+ // init solenoid field
+ // 2009-11-07 magnetic field handling fo HLT components has been switched to the
+ // global AliMagF instance, the HLT/ConfigHLT/SolenoidBz entry is obsolete
+ // The global instance is either established by the AliRoot environment or the
+ // component external interface.
+ if (TGeoGlobalMagField::Instance()->GetField()) {
+ AliDebug(0, Form("magnetic field: %f", AliTracker::GetBz()));
+ } else {
+ // workaround for bug #51285
+ AliGRPManager grpman;
+ if (grpman.ReadGRPEntry() &&
+ grpman.SetMagField()) {
+ // nothing to do any more
+ }
+ AliError(Form("can not get the AliMagF instance, falling back to GRP entry (%f)", AliTracker::GetBz()));
}
+ } else if (man) {
+ AliError("OCDB default storage not yet set, can not prepare OCDB entries");
+ } else {
+ AliError("unable to get instance of AliCDBMetaData, can not prepare OCDB entries");
}
// scan options
- if (fpSystem->ScanOptions(sysOp.Data())<0) {
+ if (pSystem->ScanOptions(sysOp.Data())<0) {
AliError("error setting options for HLT system");
return -EINVAL;
}
- if (!fpSystem->CheckStatus(AliHLTSystem::kReady)) {
- if ((fpSystem->Configure(fpRawReader, pRunLoader))<0) {
+ if (!pSystem->CheckStatus(AliHLTSystem::kReady)) {
+ if ((pSystem->Configure(fpRawReader, pRunLoader))<0) {
AliError("error during HLT system configuration");
return -EFAULT;
}
int AliHLTSimulation::Run(AliRunLoader* pRunLoader)
{
// HLT reconstruction for simulated data
+ if(!fpPluginBase) {
+ AliError("internal initialization failed");
+ return -EINVAL;
+ }
+
if(!pRunLoader) {
AliError("Missing RunLoader! 0x0");
return -EINVAL;
int nEvents = pRunLoader->GetNumberOfEvents();
int iResult=0;
- if (fpSystem->CheckStatus(AliHLTSystem::kError)) {
+ AliHLTSystem* pSystem=fpPluginBase->GetInstance();
+ if (!pSystem) {
+ AliError("can not get AliHLTSystem instance");
+ return -ENOMEM;
+ }
+
+ if (pSystem->CheckStatus(AliHLTSystem::kError)) {
AliError("HLT system in error state");
return -EFAULT;
}
// Note: the rawreader is already placed at the first event
- if ((iResult=fpSystem->Reconstruct(1, pRunLoader, fpRawReader))>=0) {
- fpSystem->FillESD(0, pRunLoader, NULL);
+ if ((iResult=pSystem->Reconstruct(1, pRunLoader, fpRawReader))>=0) {
+ pSystem->FillESD(0, pRunLoader, NULL);
for (int i=1; i<nEvents; i++) {
if (fpRawReader && !fpRawReader->NextEvent()) {
AliError("mismatch in event count, rawreader corrupted");
break;
}
- fpSystem->Reconstruct(1, pRunLoader, fpRawReader);
- fpSystem->FillESD(i, pRunLoader, NULL);
+ pSystem->Reconstruct(1, pRunLoader, fpRawReader);
+ pSystem->FillESD(i, pRunLoader, NULL);
}
// send specific 'event' to execute the stop sequence
- fpSystem->Reconstruct(0, NULL, NULL);
+ pSystem->Reconstruct(0, NULL, NULL);
}
return iResult;
}
return LIBHLTSIM_VERSION;
}
-extern "C" void AliHLTSimulationCompileInfo(const char*& date, const char*& time)
+int AliHLTSimulationSetup(AliHLTSimulation* /*pHLTSim*/, AliSimulation* pSim, const char* specificObjects)
+{
+ // see header file for function documentation
+
+ // this is an attempt to solve issue #48360
+ // since there are many jobs running in parallel during the production,
+ // all the jobs want to put entries into the OCDB. The solution is to
+ // make them temporary, since they are only used to propagate information
+ // from the simulation to the reconstruction.
+
+ if (!pSim) return -EINVAL;
+ const char* entries[]={
+ NULL
+ };
+
+ TString specificStorage;
+ specificStorage.Form("local://%s",gSystem->pwd());
+ for (const char** pEntry=entries; *pEntry!=NULL; pEntry++) {
+ const char* pObject=specificObjects?strstr(specificObjects, *pEntry):NULL;
+ if (pObject) {
+ // skip this entry if it is found in the list and either
+ // last one or separated by a blank
+ pObject+=strlen(*pEntry);
+ if (*pObject==0 || *pObject==' ') continue;
+ }
+ pSim->SetSpecificStorage(*pEntry, specificStorage.Data());
+ }
+
+ return 0;
+}
+
+#ifndef HAVE_COMPILEINFO
+extern "C" void CompileInfo(const char*& date, const char*& time)
{
// the fall back compile info of the HLTsim library
// this is not up-to-date if other files have been changed and recompiled
date=__DATE__; time=__TIME__;
return;
}
+#endif