// //
// sim.SetNumberOfEvents(n); //
// //
-// The name of the configuration file can be passed as argument to the //
-// AliSimulation constructor or can be specified by //
+// The name of the configuration file can be specified by //
// //
// sim.SetConfigFile("..."); //
// //
// to merge more than two event streams. It is assumed that the sdigits //
// were already produced for the background events. //
// //
-// The methods RunSimulation, RunSDigitization, RunDigitization and //
-// RunHitsDigitization can be used to run only parts of the full simulation //
-// chain. //
-// //
///////////////////////////////////////////////////////////////////////////////
//_____________________________________________________________________________
-AliSimulation::AliSimulation(const char* configFileName,
- const char* name, const char* title) :
- TNamed(name, title),
-
- fRunGeneration(kTRUE),
- fRunSimulation(kTRUE),
- fMakeSDigits("ALL"),
- fMakeDigits("ALL"),
- fMakeDigitsFromHits(""),
- fStopOnError(kFALSE),
-
- fNEvents(1),
- fConfigFileName(configFileName),
- fGAliceFileName("galice.root"),
- fBkgrdFileNames(NULL),
- fRegionOfInterest(kTRUE)
+AliSimulation::AliSimulation(const char* name, const char* title) :
+ TNamed(name, title)
{
// create simulation object with default parameters
+ Init();
}
//_____________________________________________________________________________
AliSimulation::AliSimulation(const AliSimulation& sim) :
- TNamed(sim),
-
- fRunGeneration(sim.fRunGeneration),
- fRunSimulation(sim.fRunSimulation),
- fMakeSDigits(sim.fMakeSDigits),
- fMakeDigits(sim.fMakeDigits),
- fMakeDigitsFromHits(sim.fMakeDigitsFromHits),
- fStopOnError(sim.fStopOnError),
-
- fNEvents(sim.fNEvents),
- fConfigFileName(sim.fConfigFileName),
- fGAliceFileName(sim.fGAliceFileName),
- fBkgrdFileNames(NULL),
- fRegionOfInterest(sim.fRegionOfInterest)
+ TNamed(sim)
{
// copy constructor
+ fRunGeneration = sim.fRunGeneration;
+ fRunSimulation = sim.fRunSimulation;
+ fMakeSDigits = sim.fMakeSDigits;
+ fMakeDigits = sim.fMakeDigits;
+ fMakeDigitsFromHits = sim.fMakeDigitsFromHits;
+ fStopOnError = sim.fStopOnError;
+
+ fNEvents = sim.fNEvents;
+ fConfigFileName = sim.fConfigFileName;
+ fGAliceFileName = sim.fGAliceFileName;
fBkgrdFileNames = new TObjArray;
for (Int_t i = 0; i < sim.fBkgrdFileNames->GetEntriesFast(); i++) {
if (!sim.fBkgrdFileNames->At(i)) continue;
fBkgrdFileNames->Add(sim.fBkgrdFileNames->At(i)->Clone());
}
+
+ fRunLoader = NULL;
}
//_____________________________________________________________________________
{
// clean up
- if (fBkgrdFileNames) {
- fBkgrdFileNames->Delete();
- delete fBkgrdFileNames;
- }
+ fBkgrdFileNames->Delete();
+ delete fBkgrdFileNames;
+}
+
+//_____________________________________________________________________________
+void AliSimulation::Init()
+{
+// set default parameters
+
+ fRunGeneration = kTRUE;
+ fRunSimulation = kTRUE;
+ fMakeSDigits = "ALL";
+ fMakeDigits = "ALL";
+ fMakeDigitsFromHits = "";
+ fStopOnError = kFALSE;
+
+ fNEvents = 1;
+ fConfigFileName = "Config.C";
+ fGAliceFileName = "galice.root";
+ fBkgrdFileNames = new TObjArray;
+ fRegionOfInterest = kTRUE;
+
+ fRunLoader = NULL;
}
TObjString* fileNameStr = new TObjString(fileName);
fileNameStr->SetUniqueID(nSignalPerBkgrd);
- if (!fBkgrdFileNames) fBkgrdFileNames = new TObjArray;
fBkgrdFileNames->Add(fileNameStr);
}
// generation and simulation -> hits
if (fRunGeneration) {
+ if (!gAlice) {
+ Error("Run", "no gAlice object. Restart aliroot and try again.");
+ return kFALSE;
+ }
+ if (gAlice->Modules()->GetEntries() > 0) {
+ Error("Run", "gAlice was already run. Restart aliroot and try again.");
+ return kFALSE;
+ }
if (!RunSimulation()) if (fStopOnError) return kFALSE;
}
+ // reopen the run loader
+ if (fRunLoader) delete fRunLoader;
+ fRunLoader = AliRunLoader::Open(fGAliceFileName.Data(),AliConfig::fgkDefaultEventFolderName,"UPDATE");
+ if (!fRunLoader) {
+ Error("Run", "no run loader found in file %s",
+ fGAliceFileName.Data());
+ return kFALSE;
+ }
+ fRunLoader->LoadgAlice();
+ gAlice = fRunLoader->GetAliRun();
+ if (!gAlice) {
+ Error("Run", "no gAlice object found in file %s",
+ fGAliceFileName.Data());
+ return kFALSE;
+ }
+
// hits -> summable digits
if (!fMakeSDigits.IsNull()) {
if (!RunSDigitization(fMakeSDigits)) if (fStopOnError) return kFALSE;
// hits -> digits
if (!fMakeDigitsFromHits.IsNull()) {
- if (fBkgrdFileNames && (fBkgrdFileNames->GetEntriesFast() > 0)) {
+ if (fBkgrdFileNames->GetEntriesFast() > 0) {
Warning("Run", "Merging and direct creation of digits from hits "
"was selected for some detectors. "
"No merging will be done for the following detectors: %s",
}
//_____________________________________________________________________________
-Bool_t AliSimulation::RunSimulation(Int_t nEvents)
+Bool_t AliSimulation::RunSimulation()
{
// run the generation and simulation
TStopwatch stopwatch;
stopwatch.Start();
- if (!gAlice) {
- Error("RunSimulation", "no gAlice object. Restart aliroot and try again.");
- return kFALSE;
- }
- if (gAlice->Modules()->GetEntries() > 0) {
- Error("RunSimulation",
- "gAlice was already run. Restart aliroot and try again.");
- return kFALSE;
- }
-
Info("RunSimulation", "initializing gAlice with config file %s",
fConfigFileName.Data());
gAlice->Init(fConfigFileName.Data());
- AliRunLoader* runLoader = gAlice->GetRunLoader();
- if (!runLoader) {
+ fRunLoader = gAlice->GetRunLoader();
+ if (!fRunLoader) {
Error("RunSimulation", "gAlice has no run loader object. "
"Check your config file: %s", fConfigFileName.Data());
return kFALSE;
}
- fGAliceFileName = runLoader->GetFileName();
+ fGAliceFileName = fRunLoader->GetFileName();
if (!fRunSimulation) {
if (!gAlice->Generator()) {
}
Info("RunSimulation", "running gAlice");
- if (nEvents <= 0) nEvents = fNEvents;
- gAlice->Run(nEvents);
-
- delete runLoader;
+ gAlice->Run(fNEvents);
Info("RunSimulation", "execution time:");
stopwatch.Print();
}
//_____________________________________________________________________________
-Bool_t AliSimulation::RunSDigitization(const char* detectors)
+Bool_t AliSimulation::RunSDigitization(const TString& detectors)
{
// run the digitization and produce summable digits
TStopwatch stopwatch;
stopwatch.Start();
- AliRunLoader* runLoader = LoadRun();
- if (!runLoader) return kFALSE;
-
TString detStr = detectors;
- TObjArray* detArray = runLoader->GetAliRun()->Detectors();
+ TObjArray* detArray = gAlice->Detectors();
for (Int_t iDet = 0; iDet < detArray->GetEntriesFast(); iDet++) {
AliModule* det = (AliModule*) detArray->At(iDet);
if (!det || !det->IsActive()) continue;
if (fStopOnError) return kFALSE;
}
- delete runLoader;
-
Info("RunSDigitization", "execution time:");
stopwatch.Print();
//_____________________________________________________________________________
-Bool_t AliSimulation::RunDigitization(const char* detectors,
- const char* excludeDetectors)
+Bool_t AliSimulation::RunDigitization(const TString& detectors,
+ const TString& excludeDetectors)
{
// run the digitization and produce digits from sdigits
TStopwatch stopwatch;
stopwatch.Start();
- while (AliRunLoader::GetRunLoader()) delete AliRunLoader::GetRunLoader();
- if (gAlice) delete gAlice;
- gAlice = NULL;
-
- Int_t nStreams = 1;
+ Int_t nStreams = fBkgrdFileNames->GetEntriesFast() + 1;
Int_t signalPerBkgrd = 1;
- if (fBkgrdFileNames) {
- nStreams = fBkgrdFileNames->GetEntriesFast() + 1;
- if (nStreams > 1) signalPerBkgrd = fBkgrdFileNames->At(0)->GetUniqueID();
- }
+ if (nStreams > 1) signalPerBkgrd = fBkgrdFileNames->At(0)->GetUniqueID();
AliRunDigitizer* manager = new AliRunDigitizer(nStreams, signalPerBkgrd);
manager->SetInputStream(0, fGAliceFileName.Data());
for (Int_t iStream = 1; iStream < nStreams; iStream++) {
TString detStr = detectors;
TString detExcl = excludeDetectors;
- manager->GetInputStream(0)->ImportgAlice();
- AliRunLoader* runLoader =
- AliRunLoader::GetRunLoader(manager->GetInputStream(0)->GetFolderName());
- TObjArray* detArray = runLoader->GetAliRun()->Detectors();
+ TObjArray* detArray = gAlice->Detectors();
for (Int_t iDet = 0; iDet < detArray->GetEntriesFast(); iDet++) {
AliModule* det = (AliModule*) detArray->At(iDet);
if (!det || !det->IsActive()) continue;
Info("RunDigitization", "executing digitization");
manager->Exec("");
}
-
delete manager;
Info("RunDigitization", "execution time:");
}
//_____________________________________________________________________________
-Bool_t AliSimulation::RunHitsDigitization(const char* detectors)
+Bool_t AliSimulation::RunHitsDigitization(const TString& detectors)
{
// run the digitization and produce digits from hits
TStopwatch stopwatch;
stopwatch.Start();
- AliRunLoader* runLoader = LoadRun();
- if (!runLoader) return kFALSE;
-
TString detStr = detectors;
- TObjArray* detArray = runLoader->GetAliRun()->Detectors();
+ TObjArray* detArray = gAlice->Detectors();
for (Int_t iDet = 0; iDet < detArray->GetEntriesFast(); iDet++) {
AliModule* det = (AliModule*) detArray->At(iDet);
if (!det || !det->IsActive()) continue;
if (fStopOnError) return kFALSE;
}
- delete runLoader;
-
Info("RunHitsDigitization", "execution time:");
stopwatch.Print();
}
-//_____________________________________________________________________________
-AliRunLoader* AliSimulation::LoadRun() const
-{
-// delete existing run loaders, open a new one and load gAlice
-
- while (AliRunLoader::GetRunLoader()) delete AliRunLoader::GetRunLoader();
- AliRunLoader* runLoader =
- AliRunLoader::Open(fGAliceFileName.Data(),
- AliConfig::fgkDefaultEventFolderName, "UPDATE");
- if (!runLoader) {
- Error("LoadRun", "no run loader found in file %s",
- fGAliceFileName.Data());
- return NULL;
- }
- runLoader->LoadgAlice();
- gAlice = runLoader->GetAliRun();
- if (!gAlice) {
- Error("LoadRun", "no gAlice object found in file %s",
- fGAliceFileName.Data());
- return NULL;
- }
- return runLoader;
-}
-
//_____________________________________________________________________________
Bool_t AliSimulation::IsSelected(TString detName, TString& detectors) const
{