X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliRun.cxx;h=9b91c4e3492f361059b6ec517ee5b70412fb5e10;hb=24f126079399620106ef944221d0d1ce3c4bbed2;hp=c2cbff57663648e9efb58c4719cd0e011016fb20;hpb=21bf7095173459ea18fc36cc9387a9bb563fa194;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliRun.cxx b/STEER/AliRun.cxx index c2cbff57663..9b91c4e3492 100644 --- a/STEER/AliRun.cxx +++ b/STEER/AliRun.cxx @@ -49,6 +49,7 @@ #include #include #include +#include // #include "AliLog.h" #include "AliDetector.h" @@ -63,15 +64,16 @@ #include "AliPDG.h" #include "AliRun.h" #include "AliStack.h" +#include "AliCDBManager.h" +#include "AliAlignObj.h" AliRun *gAlice; - ClassImp(AliRun) //_______________________________________________________________________ AliRun::AliRun(): - fRun(0), + fRun(-1), fEvent(0), fEventNrInRun(0), fEventsPerRun(0), @@ -80,13 +82,17 @@ AliRun::AliRun(): fMCApp(0), fDisplay(0), fField(0), - fMC(0), fNdets(0), fInitDone(kFALSE), fLego(0), fPDGDB(0), //Particle factory object - fConfigFunction("\0"), + fConfigFunction(""), fRandom(0), + fBaseFileName(""), + fIsRootGeometry(kFALSE), + fGeometryFromCDB(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -94,12 +100,13 @@ AliRun::AliRun(): // AliConfig::Instance();//skowron 29 Feb 2002 //ensures that the folder structure is build + } //_______________________________________________________________________ AliRun::AliRun(const AliRun& arun): TNamed(arun), - fRun(0), + fRun(-1), fEvent(0), fEventNrInRun(0), fEventsPerRun(0), @@ -108,13 +115,17 @@ AliRun::AliRun(const AliRun& arun): fMCApp(0), fDisplay(0), fField(0), - fMC(0), fNdets(0), fInitDone(kFALSE), fLego(0), fPDGDB(0), //Particle factory object fConfigFunction("\0"), fRandom(0), + fBaseFileName(""), + fIsRootGeometry(kFALSE), + fGeometryFromCDB(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -126,7 +137,7 @@ AliRun::AliRun(const AliRun& arun): //_____________________________________________________________________________ AliRun::AliRun(const char *name, const char *title): TNamed(name,title), - fRun(0), + fRun(-1), fEvent(0), fEventNrInRun(0), fEventsPerRun(0), @@ -135,13 +146,17 @@ AliRun::AliRun(const char *name, const char *title): fMCApp(0), fDisplay(0), fField(0), - fMC(gMC), fNdets(0), fInitDone(kFALSE), fLego(0), fPDGDB(TDatabasePDG::Instance()), //Particle factory object! fConfigFunction("Config();"), fRandom(new TRandom3()), + fBaseFileName(""), + fIsRootGeometry(kFALSE), + fGeometryFromCDB(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -162,8 +177,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(); @@ -270,6 +283,30 @@ 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::SetGeometryFromCDB() +{ + // Set the loading of geometry from cdb instead of creating it + // A default CDB storage needs to be set before this method is called + if(AliCDBManager::Instance()->IsDefaultStorageSet() && + AliCDBManager::Instance()->GetRun() >= 0){ + SetRootGeometry(); + fGeometryFromCDB = kTRUE; + }else{ + AliError("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + AliError("Loading of geometry from CDB ignored. First set a default CDB storage!"); + AliError("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); + } +} + //_______________________________________________________________________ void AliRun::SetField(Int_t type, Int_t version, Float_t scale, Float_t maxField, const char* filename) @@ -324,7 +361,7 @@ void AliRun::FinishRun() // // Called at the end of the run. // - + if(fLego) { AliDebug(1, "Finish Lego"); @@ -348,12 +385,7 @@ void AliRun::FinishRun() Write(0,TObject::kOverwrite);//write AliRun fRunLoader->Write(0,TObject::kOverwrite);//write RunLoader itself - // Clean tree information - AliDebug(1, "fRunLoader->Stack()->FinishRun()"); - fRunLoader->Stack()->FinishRun(); - - if(fMCApp) fMCApp->FinishRun(); - + if(fMCApp) fMCApp->FinishRun(); fRunLoader->Synchronize(); } @@ -371,7 +403,7 @@ void AliRun::Announce() const printf(" You are running AliRoot version NewIO\n"); printf("%6s","*"); - printf(" The cvs tag for the current program is $Name$\n"); + printf(" The SVN version for the current program is $Id$\n"); printf("%6s","*");printf("%64s","*\n"); printf("%70s", @@ -441,8 +473,8 @@ Int_t AliRun::GetEvent(Int_t event) // Set Trees branch addresses TIter next(fModules); - AliModule *detector; - while((detector = dynamic_cast(next()))) + AliDetector *detector; + while((detector = dynamic_cast(next()))) { detector->SetTreeAddress(); } @@ -453,27 +485,28 @@ 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; @@ -545,12 +578,17 @@ void AliRun::InitMC(const char *setup) gROOT->LoadMacro(setup); gInterpreter->ProcessLine(fConfigFunction.Data()); + if(AliCDBManager::Instance()->GetRun() >= 0) { + SetRunNumber(AliCDBManager::Instance()->GetRun()); + } else { + AliWarning("Run number not initialized!!"); + } + fRunLoader->CdGAFile(); - + AliPDG::AddParticlesToPdgDataBase(); fNdets = fModules->GetLast()+1; - TIter next(fModules); for(Int_t i=0; iSetRadiusRange(rmin, rmax); gener->SetZMax(zmax); gener->SetCoor1Range(nc1, c1min, c1max); @@ -786,9 +827,9 @@ void AliRun::RunLego(const char *setup, Int_t nc1, Float_t c1min, //Run Lego Object - if (fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nc1 * nc2); - //gMC->ProcessRun(nc1*nc2+1); - gMC->ProcessRun(nc1*nc2); + + if (fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nev); + gMC->ProcessRun(nev); // End of this run, close files FinishRun(); @@ -818,10 +859,12 @@ void AliRun::Field(const Double_t* x, Double_t *b) const // // Return the value of the magnetic field // + Float_t xfloat[3]; for (Int_t i=0; i<3; i++) xfloat[i] = x[i]; if (Field()) { + Float_t bfloat[3]; Field()->Field(xfloat,bfloat); for (Int_t j=0; j<3; j++) b[j] = bfloat[j]; @@ -830,6 +873,8 @@ void AliRun::Field(const Double_t* x, Double_t *b) const AliError("No mag field defined!"); b[0]=b[1]=b[2]=0.; } + + } // @@ -939,17 +984,13 @@ void AliRun::AddModule(AliModule* mod) fNdets++; } +//_____________________________________________________________________________ +/*inline*/ Bool_t AliRun::IsFileAccessible(const char* fnam, EAccessMode mode) +{ return !gSystem->AccessPathName(fnam,mode);} -//_______________________________________________________________________ -Int_t AliRun::GetDebug() const -{ - AliWarning("Don't use this method any more, use AliDebug instead"); - return AliDebugLevel(); -} - -//_______________________________________________________________________ -void AliRun::SetDebug(Int_t level) +//______________________________________________________ +/*inline*/ Bool_t AliRun::IsFileAccessible(Char_t* name,EAccessMode mode) { - AliWarning("Don't use this method any more, use AliLog instead"); - AliLog::SetClassDebugLevel("AliRun", level); + TString str = name; gSystem->ExpandPathName(str); + return !gSystem->AccessPathName(str.Data(),mode); }