X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliRun.cxx;h=7d484367dbde676d2033b2cb660bed7b5cacb43b;hb=c8d547c3ff13a357ae5ee08309220a71eaab2c2d;hp=35ae61298c49abd3ed261f2abafbfd3bcca91e96;hpb=2057aecb08b8cfad37f9af46c11de054cd39dd1a;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliRun.cxx b/STEER/AliRun.cxx index 35ae61298c4..7d484367dbd 100644 --- a/STEER/AliRun.cxx +++ b/STEER/AliRun.cxx @@ -49,7 +49,9 @@ #include #include #include +#include // +#include "AliLog.h" #include "AliDetector.h" #include "AliDisplay.h" #include "AliHeader.h" @@ -62,10 +64,11 @@ #include "AliPDG.h" #include "AliRun.h" #include "AliStack.h" +#include "AliCDBManager.h" +#include "AliAlignObj.h" AliRun *gAlice; - ClassImp(AliRun) //_______________________________________________________________________ @@ -74,20 +77,21 @@ AliRun::AliRun(): fEvent(0), fEventNrInRun(0), fEventsPerRun(0), - fDebug(0), fModules(0), fGeometry(0), fMCApp(0), fDisplay(0), - fTimer(), fField(0), - fMC(0), fNdets(0), fInitDone(kFALSE), fLego(0), fPDGDB(0), //Particle factory object - fConfigFunction("\0"), + fConfigFunction(""), fRandom(0), + fBaseFileName(""), + fIsRootGeometry(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -104,20 +108,21 @@ AliRun::AliRun(const AliRun& arun): fEvent(0), fEventNrInRun(0), fEventsPerRun(0), - fDebug(0), fModules(0), fGeometry(0), fMCApp(0), fDisplay(0), - fTimer(), fField(0), - fMC(0), fNdets(0), fInitDone(kFALSE), fLego(0), fPDGDB(0), //Particle factory object fConfigFunction("\0"), fRandom(0), + fBaseFileName(""), + fIsRootGeometry(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -133,20 +138,21 @@ AliRun::AliRun(const char *name, const char *title): fEvent(0), fEventNrInRun(0), fEventsPerRun(0), - fDebug(0), fModules(new TObjArray(77)), // Support list for the Detectors fGeometry(0), fMCApp(0), fDisplay(0), - fTimer(), fField(0), - fMC(gMC), fNdets(0), fInitDone(kFALSE), fLego(0), fPDGDB(TDatabasePDG::Instance()), //Particle factory object! fConfigFunction("Config();"), fRandom(new TRandom3()), + fBaseFileName(""), + fIsRootGeometry(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -167,8 +173,6 @@ AliRun::AliRun(const char *name, const char *title): // Add to list of browsable gROOT->GetListOfBrowsables()->Add(this,name); - // Create the TNode geometry for the event display - BuildSimpleGeometry(); // Create default mag field SetField(); @@ -217,7 +221,7 @@ AliRun::~AliRun() //_______________________________________________________________________ void AliRun::Copy(TObject &) const { - Fatal("Copy","Not implemented!\n"); + AliFatal("Not implemented!"); } //_______________________________________________________________________ @@ -275,6 +279,13 @@ void AliRun::SetField(AliMagF* magField) fField->ReadField(); } +//_______________________________________________________________________ +void AliRun::SetRootGeometry(Bool_t flag) +{ +// Instruct application that the geometry is to be retreived from a root file. + fIsRootGeometry = flag; + if (flag && gMC) gMC->SetRootGeometry(); +} //_______________________________________________________________________ void AliRun::SetField(Int_t type, Int_t version, Float_t scale, Float_t maxField, const char* filename) @@ -298,7 +309,7 @@ void AliRun::SetField(Int_t type, Int_t version, Float_t scale, fField = new AliMagFDM("Map4",filename,type,scale,maxField); fField->ReadField(); } else { - Warning("SetField","Invalid map %d\n",version); + AliWarning(Form("Invalid map %d",version)); } } @@ -307,7 +318,7 @@ void AliRun::SetField(Int_t type, Int_t version, Float_t scale, void AliRun::InitLoaders() { //creates list of getters - if (GetDebug()) Info("InitLoaders",""); + AliDebug(1, ""); TIter next(fModules); AliModule *mod; while((mod = (AliModule*)next())) @@ -316,11 +327,11 @@ void AliRun::InitLoaders() AliDetector *det = dynamic_cast(mod); if (det) { - if (GetDebug()) Info("InitLoaders"," Adding %s ",det->GetName()); + AliDebug(2, Form("Adding %s", det->GetName())); fRunLoader->AddLoader(det); } } - if (GetDebug()) Info("InitLoaders","Done"); + AliDebug(1, "Done"); } //_____________________________________________________________________________ @@ -332,7 +343,7 @@ void AliRun::FinishRun() if(fLego) { - if (GetDebug()) Info("FinishRun"," Finish Lego"); + AliDebug(1, "Finish Lego"); fRunLoader->CdGAFile(); fLego->FinishRun(); } @@ -341,11 +352,11 @@ void AliRun::FinishRun() TIter next(fModules); AliModule *detector; while((detector = dynamic_cast(next()))) { - if (GetDebug()) Info("FinishRun"," %s->FinishRun()",detector->GetName()); + AliDebug(2, Form("%s->FinishRun()", detector->GetName())); detector->FinishRun(); } - if (GetDebug()) Info("FinishRun"," fRunLoader->WriteHeader(OVERWRITE)"); + AliDebug(1, "fRunLoader->WriteHeader(OVERWRITE)"); fRunLoader->WriteHeader("OVERWRITE"); // Write AliRun info and all detectors parameters @@ -354,7 +365,7 @@ void AliRun::FinishRun() fRunLoader->Write(0,TObject::kOverwrite);//write RunLoader itself // Clean tree information - if (GetDebug()) Info("FinishRun"," fRunLoader->Stack()->FinishRun()"); + AliDebug(1, "fRunLoader->Stack()->FinishRun()"); fRunLoader->Stack()->FinishRun(); if(fMCApp) fMCApp->FinishRun(); @@ -422,7 +433,7 @@ Int_t AliRun::GetEvent(Int_t event) // if (fRunLoader == 0x0) { - Error("GetEvent","RunLoader is not set. Can not load data."); + AliError("RunLoader is not set. Can not load data."); return -1; } /*****************************************/ @@ -458,27 +469,27 @@ Int_t AliRun::GetEvent(Int_t event) //_______________________________________________________________________ TGeometry *AliRun::GetGeometry() { - // - // Import Alice geometry from current file - // Return pointer to geometry object - // - if (!fGeometry) fGeometry = dynamic_cast(gDirectory->Get("AliceGeom")); - // - // Unlink and relink nodes in detectors - // This is bad and there must be a better way... - // + // Create the TNode geometry for the event display + if (!fGeometry) { + BuildSimpleGeometry(); + // + // Unlink and relink nodes in detectors + // This is bad and there must be a better way... + // - TIter next(fModules); - AliModule *detector; - while((detector = dynamic_cast(next()))) { - TList *dnodes=detector->Nodes(); - Int_t j; - TNode *node, *node1; - for ( j=0; jGetSize(); j++) { - node = dynamic_cast(dnodes->At(j)); - node1 = fGeometry->GetNode(node->GetName()); - dnodes->Remove(node); - dnodes->AddAt(node1,j); + TIter next(fModules); + AliModule *detector; + while((detector = dynamic_cast(next()))) { + detector->BuildGeometry(); + TList *dnodes=detector->Nodes(); + Int_t j; + TNode *node, *node1; + for ( j=0; jGetSize(); j++) { + node = dynamic_cast(dnodes->At(j)); + node1 = fGeometry->GetNode(node->GetName()); + dnodes->Remove(node); + dnodes->AddAt(node1,j); + } } } return fGeometry; @@ -540,24 +551,26 @@ void AliRun::InitMC(const char *setup) Announce(); if(fInitDone) { - Warning("Init","Cannot initialise AliRun twice!\n"); + AliWarning("Cannot initialise AliRun twice!"); return; } - fMCApp=new AliMC(GetName(),GetTitle()); + if (!fMCApp) + fMCApp=new AliMC(GetName(),GetTitle()); gROOT->LoadMacro(setup); gInterpreter->ProcessLine(fConfigFunction.Data()); + // Set the run number in the CDB manager as assigned from + // constructor or from config file + AliCDBManager::Instance()->SetRun(GetRunNumber()); + fRunLoader->CdGAFile(); AliPDG::AddParticlesToPdgDataBase(); fNdets = fModules->GetLast()+1; - // Added also after in case of interactive initialisation of modules - fNdets = fModules->GetLast()+1; - TIter next(fModules); for(Int_t i=0; iGetNumberOfEvents(); - if (GetDebug()) Info("RunReco","Found %d events",nev); + AliDebug(1, Form("Found %d events", nev)); Int_t nFirst = first; Int_t nLast = (last < 0)? nev : last; for (Int_t nevent = nFirst; nevent <= nLast; nevent++) { - if (GetDebug()) Info("RunReco","Processing event %d",nevent); + AliDebug(1, Form("Processing event %d", nevent)); GetEvent(nevent); Digits2Reco(selected); } @@ -688,7 +701,7 @@ void AliRun::Tree2Tree(Option_t *option, const char *selected) if (oS) { - if (GetDebug()) Info("Tree2Tree","Processing Hits2SDigits for %s ...",detector->GetName()); + AliDebug(1, Form("Processing Hits2SDigits for %s ...", detector->GetName())); loader->LoadHits("read"); if (loader->TreeS() == 0x0) loader->MakeTree("S"); detector->MakeBranch(option); @@ -699,7 +712,7 @@ void AliRun::Tree2Tree(Option_t *option, const char *selected) } if (oD) { - if (GetDebug()) Info("Tree2Tree","Processing SDigits2Digits for %s ...",detector->GetName()); + AliDebug(1, Form("Processing SDigits2Digits for %s ...", detector->GetName())); loader->LoadSDigits("read"); if (loader->TreeD() == 0x0) loader->MakeTree("D"); detector->MakeBranch(option); @@ -710,7 +723,7 @@ void AliRun::Tree2Tree(Option_t *option, const char *selected) } if (oR) { - if (GetDebug()) Info("Tree2Tree","Processing Digits2Reco for %s ...",detector->GetName()); + AliDebug(1, Form("Processing Digits2Reco for %s ...", detector->GetName())); loader->LoadDigits("read"); if (loader->TreeR() == 0x0) loader->MakeTree("R"); detector->MakeBranch(option); @@ -727,7 +740,7 @@ void AliRun::Tree2Tree(Option_t *option, const char *selected) //_______________________________________________________________________ void AliRun::RunLego(const char *setup, Int_t nc1, Float_t c1min, Float_t c1max,Int_t nc2,Float_t c2min,Float_t c2max, - Float_t rmin,Float_t rmax,Float_t zmax, AliLegoGenerator* gener) + Float_t rmin,Float_t rmax,Float_t zmax, AliLegoGenerator* gener, Int_t nev) { // // Generates lego plots of: @@ -766,10 +779,12 @@ void AliRun::RunLego(const char *setup, Int_t nc1, Float_t c1min, */ //End_Html // - + // Number of events + if (nev == -1) nev = nc1 * nc2; + // check if initialisation has been done // If runloader has been initialized, set the number of events per file to nc1 * nc2 - + // Set new generator if (!gener) gener = new AliLegoGenerator(); // @@ -793,9 +808,9 @@ void AliRun::RunLego(const char *setup, Int_t nc1, Float_t c1min, //Run Lego Object - if (fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nc1 * nc2); + if (fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nev); //gMC->ProcessRun(nc1*nc2+1); - gMC->ProcessRun(nc1*nc2); + gMC->ProcessRun(nev); // End of this run, close files FinishRun(); @@ -834,7 +849,7 @@ void AliRun::Field(const Double_t* x, Double_t *b) const for (Int_t j=0; j<3; j++) b[j] = bfloat[j]; } else { - printf("No mag field defined!\n"); + AliError("No mag field defined!"); b[0]=b[1]=b[2]=0.; } } @@ -871,7 +886,7 @@ Int_t AliRun::GetEvNumber() const //Returns number of current event if (fRunLoader == 0x0) { - Error("GetEvent","RunLoader is not set. Can not load data."); + AliError("RunLoader is not set. Can not load data."); return -1; } @@ -890,13 +905,13 @@ void AliRun::SetRunLoader(AliRunLoader* rloader) TString evfoldname; TFolder* evfold = fRunLoader->GetEventFolder(); if (evfold) evfoldname = evfold->GetName(); - else Warning("SetRunLoader","Did not get Event Folder from Run Loader"); + else AliWarning("Did not get Event Folder from Run Loader"); if ( fRunLoader->GetAliRun() ) {//if alrun already exists in folder if (fRunLoader->GetAliRun() != this ) {//and is different than this - crash - Fatal("AliRun","AliRun is already in Folder and it is not this object"); + AliFatal("AliRun is already in Folder and it is not this object"); return;//pro forma }//else do nothing } @@ -917,11 +932,11 @@ void AliRun::SetRunLoader(AliRunLoader* rloader) AliLoader* loader = fRunLoader->GetLoader(detector); if (loader == 0x0) { - Error("SetRunLoader","Can not get loader for detector %s",detector->GetName()); + AliError(Form("Can not get loader for detector %s", detector->GetName())); } else { - if (GetDebug()) Info("SetRunLoader","Setting loader for detector %s",detector->GetName()); + AliDebug(1, Form("Setting loader for detector %s", detector->GetName())); detector->SetLoader(loader); } } @@ -937,9 +952,23 @@ void AliRun::AddModule(AliModule* mod) if (strlen(mod->GetName()) == 0) return; if (GetModuleID(mod->GetName()) >= 0) return; - if (GetDebug()) Info("AddModule","%s",mod->GetName()); + AliDebug(1, mod->GetName()); if (fRunLoader == 0x0) AliConfig::Instance()->Add(mod); else AliConfig::Instance()->Add(mod,fRunLoader->GetEventFolder()->GetName()); Modules()->Add(mod); + + fNdets++; +} + +// added by Alberto Colla +//_____________________________________________________________________________ +/*inline*/ Bool_t AliRun::IsFileAccessible(const char* fnam, EAccessMode mode) +{ return !gSystem->AccessPathName(fnam,mode);} + +//______________________________________________________ +/*inline*/ Bool_t AliRun::IsFileAccessible(Char_t* name,EAccessMode mode) +{ + TString str = name; gSystem->ExpandPathName(str); + return !gSystem->AccessPathName(str.Data(),mode); }