X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=STEER%2FSTEER%2FAliSimulation.cxx;h=1c357549b76ff64281df458f43ab776ed3b2beae;hp=7ffa636e5266e8f7664110c907925d7779cfb486;hb=9a82a9001483f88b892e7da8f251c0e802615b1c;hpb=bd58d4b9c2050bef96e4395ef9b3792e923b534b diff --git a/STEER/STEER/AliSimulation.cxx b/STEER/STEER/AliSimulation.cxx index 7ffa636e526..1c357549b76 100644 --- a/STEER/STEER/AliSimulation.cxx +++ b/STEER/STEER/AliSimulation.cxx @@ -13,7 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* $Id$ */ +/* $Id: AliSimulation.cxx 64623 2013-10-21 13:38:58Z rgrosso $ */ /////////////////////////////////////////////////////////////////////////////// // // @@ -103,9 +103,20 @@ // The number of events per file has to be set before the simulation of // // hits. Otherwise it has no effect. // // // +// The trigger configuration is set by the method SetTriggerConfig(X) // +// X can take three kinds of values // +// // +// - The exact string "none" - case insensitive. In this case, not trigger // +// information is generated from the digits. // +// - The empty string or "ocdb" - case insensitive. In this case the // +// trigger configuration is read from OCDB // +// - Some string - say "p-p" - in which case the configuration is read from // +// fixed files in $ALICE_ROOT/GRP/CTP/ - say $ALICE_ROOT/GRP/CTP/p-p.cfg // +// // +// Default is to read from OCDB. // +// // /////////////////////////////////////////////////////////////////////////////// -#include #include #include #include @@ -148,6 +159,7 @@ #include "AliRun.h" #include "AliDigitizationInput.h" #include "AliRunLoader.h" +#include "AliStack.h" #include "AliSimulation.h" #include "AliSysInfo.h" #include "AliVertexGenFile.h" @@ -156,19 +168,16 @@ using std::ofstream; ClassImp(AliSimulation) AliSimulation *AliSimulation::fgInstance = 0; -const char* AliSimulation::fgkDetectorName[AliSimulation::fgkNDetectors] = {"ITS", "TPC", "TRD", "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE" -// #ifdef MFT_UPGRADE -// ,"MFT" -// #endif - ,"MFT" // AU - ,"HLT" -}; + const char* AliSimulation::fgkDetectorName[AliSimulation::fgkNDetectors] = {"ITS", "TPC", "TRD", + "TOF", "PHOS", "HMPID", "EMCAL", "MUON", "FMD", "ZDC", "PMD", "T0", "VZERO", "ACORDE","AD", + "FIT","MFT","HLT"}; //_____________________________________________________________________________ AliSimulation::AliSimulation(const char* configFileName, const char* name, const char* title) : TNamed(name, title), + fRunGeneratorOnly(kFALSE), fRunGeneration(kTRUE), fRunSimulation(kTRUE), fLoadAlignFromCDB(kTRUE), @@ -182,6 +191,7 @@ AliSimulation::AliSimulation(const char* configFileName, fDeleteIntermediateFiles(kFALSE), fWriteSelRawData(kFALSE), fStopOnError(kFALSE), + fUseMonitoring(kFALSE), fNEvents(1), fConfigFileName(configFileName), fGAliceFileName("galice.root"), @@ -378,7 +388,7 @@ void AliSimulation::SetCDBLock() { // Set CDB lock: from now on it is forbidden to reset the run number // or the default storage or to activate any further storage! - ULong_t key = AliCDBManager::Instance()->SetLock(1); + ULong64_t key = AliCDBManager::Instance()->SetLock(1); if (key) fKey = key; } @@ -631,6 +641,17 @@ Bool_t AliSimulation::Run(Int_t nEvents) if (nEvents > 0) fNEvents = nEvents; + // Run generator-only code on demand + if (fRunGeneratorOnly) + { + if(!RunGeneratorOnly()) + { + if (fStopOnError) return kFALSE; + } + else + return kTRUE; + } + // create and setup the HLT instance if (!fRunHLT.IsNull() && !CreateHLT()) { if (fStopOnError) return kFALSE; @@ -722,8 +743,13 @@ Bool_t AliSimulation::Run(Int_t nEvents) AliSysInfo::AddStamp("Hits2Digits"); - // digits -> trigger - if (!fTriggerConfig.IsNull() && !RunTrigger(fTriggerConfig,fMakeDigits)) { + // digits -> trigger. Set trigger configuration to "none" - any + // case - to not generate the trigger information. Set the trigger + // configuration to some string X to read from file at + // $ALICE_ROOT/GRP/CTP/X. Set the trigger configuration to the + // empty string or "ocdb" - any case - to read from OCDB. + if (!fTriggerConfig.EqualTo("none",TString::kIgnoreCase) && + !RunTrigger(fTriggerConfig,fMakeDigits)) { if (fStopOnError) return kFALSE; } @@ -759,7 +785,9 @@ Bool_t AliSimulation::Run(Int_t nEvents) } AliSysInfo::AddStamp("RunQA"); - + // + StoreUsedCDBMaps(); + // TString snapshotFileOut(""); if(TString(gSystem->Getenv("OCDB_SNAPSHOT_CREATE")) == TString("kTRUE")){ AliInfo(" ******** Creating the snapshot! *********"); @@ -879,7 +907,7 @@ Bool_t AliSimulation::RunLego(const char *setup, Int_t nc1, Float_t c1min, AliPDG::AddParticlesToPdgDataBase(); - gMC->SetMagField(TGeoGlobalMagField::Instance()->GetField()); + TVirtualMC::GetMC()->SetMagField(TGeoGlobalMagField::Instance()->GetField()); gAlice->GetMCApp()->Init(); @@ -897,13 +925,13 @@ Bool_t AliSimulation::RunLego(const char *setup, Int_t nc1, Float_t c1min, AliGenerator *gen=gAlice->GetMCApp()->Generator(); gAlice->GetMCApp()->ResetGenerator(gener); //Prepare MC for Lego Run - gMC->InitLego(); + TVirtualMC::GetMC()->InitLego(); //Run Lego Object AliRunLoader::Instance()->SetNumberOfEventsPerFile(nev); - gMC->ProcessRun(nev); + TVirtualMC::GetMC()->ProcessRun(nev); // End of this run, close files FinishRun(); @@ -973,7 +1001,8 @@ Bool_t AliSimulation::WriteTriggerRawData() // Details of the format are given in the // trigger TDR - pages 134 and 135. AliCTPRawData writer; - writer.RawData(); + //writer.RawData(); + writer.RawDataRun2(); return kTRUE; } @@ -1003,6 +1032,9 @@ Bool_t AliSimulation::RunSimulation(Int_t nEvents) AliError("gAlice was already run. Restart aliroot and try again."); return kFALSE; } + + // Setup monitoring if requested + gAlice->GetMCApp()->SetUseMonitoring(fUseMonitoring); AliInfo(Form("initializing gAlice with config file %s", fConfigFileName.Data())); @@ -1089,11 +1121,9 @@ Bool_t AliSimulation::RunSimulation(Int_t nEvents) AliPDG::AddParticlesToPdgDataBase(); - gMC->SetMagField(TGeoGlobalMagField::Instance()->GetField()); + TVirtualMC::GetMC()->SetMagField(TGeoGlobalMagField::Instance()->GetField()); AliSysInfo::AddStamp("RunSimulation_GetField"); - printf("Init() called \n"); gAlice->GetMCApp()->Init(); - printf("Init() back \n"); AliSysInfo::AddStamp("RunSimulation_InitMCApp"); //Must be here because some MCs (G4) adds detectors here and not in Config.C @@ -1212,8 +1242,7 @@ Bool_t AliSimulation::RunSimulation(Int_t nEvents) // Create the Root Tree with one branch per detector //Hits moved to begin event -> now we are crating separate tree for each event - printf("AliSimulation::ProcessRun called \n"); - gMC->ProcessRun(nEvents); + TVirtualMC::GetMC()->ProcessRun(nEvents); // End of this run, close files if(nEvents>0) FinishRun(); @@ -1224,6 +1253,75 @@ Bool_t AliSimulation::RunSimulation(Int_t nEvents) return kTRUE; } +//_____________________________________________________________________________ +Bool_t AliSimulation::RunGeneratorOnly() +{ + // Execute Config.C + TInterpreter::EErrorCode interpreterError=TInterpreter::kNoError; + gROOT->LoadMacro(fConfigFileName.Data()); + Long_t interpreterResult=gInterpreter->ProcessLine(gAlice->GetConfigFunction(), &interpreterError); + if (interpreterResult!=0 || interpreterError!=TInterpreter::kNoError) { + AliFatal(Form("execution of config file \"%s\" failed with error %d", fConfigFileName.Data(), (int)interpreterError)); + } + + // Setup the runloader and generator, check if everything is OK + AliRunLoader* runLoader = AliRunLoader::Instance(); + AliGenerator* generator = gAlice->GetMCApp()->Generator(); + if (!runLoader) { + AliError(Form("gAlice has no run loader object. " + "Check your config file: %s", fConfigFileName.Data())); + return kFALSE; + } + if (!generator) { + AliError(Form("gAlice has no generator object. " + "Check your config file: %s", fConfigFileName.Data())); + return kFALSE; + } + + runLoader->LoadKinematics("RECREATE"); + runLoader->MakeTree("E"); + + // Create stack and header + runLoader->MakeStack(); + AliStack* stack = runLoader->Stack(); + AliHeader* header = runLoader->GetHeader(); + + // Intialize generator + generator->Init(); + generator->SetStack(stack); + + // Run main generator loop + + for (Int_t iev=0; ievReset(0,iev); + runLoader->SetEventNumber(iev); + stack->Reset(); + runLoader->MakeTree("K"); + + // Generate event + generator->Generate(); + + // Finish event + header->SetNprimary(stack->GetNprimary()); + header->SetNtrack(stack->GetNtrack()); + stack->FinishEvent(); + header->SetStack(stack); + runLoader->TreeE()->Fill(); + runLoader->WriteKinematics("OVERWRITE"); + } + + // Finalize + generator->FinishRun(); + // Write file + runLoader->WriteHeader("OVERWRITE"); + generator->Write(); + runLoader->Write(); + + return kTRUE; +} + //_____________________________________________________________________________ Bool_t AliSimulation::RunSDigitization(const char* detectors) { @@ -1249,7 +1347,7 @@ Bool_t AliSimulation::RunSDigitization(const char* detectors) 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); + AliSysInfo::AddStamp(Form("SDigit_%s_%d",det->GetName(),eventNr), 0,1, eventNr); } } @@ -1270,7 +1368,6 @@ Bool_t AliSimulation::RunDigitization(const char* detectors, const char* excludeDetectors) { // run the digitization and produce digits from sdigits - AliCodeTimerAuto("",0) // initialize CDB storage, run number, set CDB lock @@ -1315,6 +1412,7 @@ Bool_t AliSimulation::RunDigitization(const char* detectors, } detArr.AddLast(digitizer); AliInfo(Form("Created digitizer from SDigits -> Digits for %s", det->GetName())); + } // if ((detStr.CompareTo("ALL") != 0) && !detStr.IsNull()) { @@ -1330,11 +1428,14 @@ Bool_t AliSimulation::RunDigitization(const char* detectors, digInp.InitEvent(); //this must be after call of Connect Input tress. if (outRl) outRl->SetEventNumber(eventsCreated-1); static_cast(digInp.GetInputStream(0))->ImportgAlice(); // use gAlice of the first input stream - for (int id=0;idDigitize(""); + for (int id=0;idDigitize(""); + AliSysInfo::AddStamp(Form("Digit_%s_%d",detArr[id]->GetName(),eventsCreated), 0,2, eventsCreated); + } digInp.FinishEvent(); }; digInp.FinishGlobal(); - // + // return kTRUE; } @@ -1880,7 +1981,7 @@ Int_t AliSimulation::ConvertRaw2SDigits(const char* rawDirectory, const char* es AliPDG::AddParticlesToPdgDataBase(); - gMC->SetMagField(TGeoGlobalMagField::Instance()->GetField()); + TVirtualMC::GetMC()->SetMagField(TGeoGlobalMagField::Instance()->GetField()); gAlice->GetMCApp()->Init(); @@ -2028,7 +2129,7 @@ void AliSimulation::FinishRun() AliRunLoader::Instance()->CdGAFile(); gAlice->Write(0,TObject::kOverwrite);//write AliRun AliRunLoader::Instance()->Write(0,TObject::kOverwrite);//write RunLoader itself - + // if(gAlice->GetMCApp()) gAlice->GetMCApp()->FinishRun(); AliRunLoader::Instance()->Synchronize(); } @@ -2435,3 +2536,54 @@ time_t AliSimulation::GenerateTimeStamp() const else return 0; } + +//_____________________________________________________________________________ +void AliSimulation::StoreUsedCDBMaps() const +{ + // write in galice.root maps with used CDB paths + // + // + AliRunLoader* runLoader = LoadRun(); + if (!runLoader) { + AliError("Failed to open gAlice.root in write mode"); + return; + } + // + const TMap *cdbMap = AliCDBManager::Instance()->GetStorageMap(); + const TList *cdbList = AliCDBManager::Instance()->GetRetrievedIds(); + // + TMap *cdbMapCopy = new TMap(cdbMap->GetEntries()); + cdbMapCopy->SetOwner(1); + // cdbMapCopy->SetName("cdbMap"); + TIter iter(cdbMap->GetTable()); + // + TPair* pair = 0; + while((pair = dynamic_cast (iter.Next()))){ + TObjString* keyStr = dynamic_cast (pair->Key()); + TObjString* valStr = dynamic_cast (pair->Value()); + if (keyStr && valStr) + cdbMapCopy->Add(new TObjString(keyStr->GetName()), new TObjString(valStr->GetName())); + } + // + TList *cdbListCopy = new TList(); + cdbListCopy->SetOwner(1); + // cdbListCopy->SetName("cdbList"); + // + TIter iter2(cdbList); + + AliCDBId* id=0; + while((id = dynamic_cast (iter2.Next()))){ + cdbListCopy->Add(new TObjString(id->ToString().Data())); + } + // + AliRunLoader::Instance()->CdGAFile(); + gDirectory->WriteObject(cdbMapCopy,"cdbMap","kSingleKey"); + gDirectory->WriteObject(cdbListCopy,"cdbList","kSingleKey"); + delete runLoader; + // + AliInfo(Form("Stored used OCDB entries as TMap %s and TList %s in %s", + cdbMapCopy->GetName(), + cdbListCopy->GetName(), + fGAliceFileName.Data())); + // +}