X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliRun.cxx;h=9b91c4e3492f361059b6ec517ee5b70412fb5e10;hb=0acdb2bb0421396bdbce09a09e230b0e65499e64;hp=3aec60032c053eeb4e1e993d0fe2babe06e127f7;hpb=024cf675196bebb0ff74599c31999078a77f033d;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliRun.cxx b/STEER/AliRun.cxx index 3aec60032c0..9b91c4e3492 100644 --- a/STEER/AliRun.cxx +++ b/STEER/AliRun.cxx @@ -64,6 +64,7 @@ #include "AliPDG.h" #include "AliRun.h" #include "AliStack.h" +#include "AliCDBManager.h" #include "AliAlignObj.h" AliRun *gAlice; @@ -72,7 +73,7 @@ ClassImp(AliRun) //_______________________________________________________________________ AliRun::AliRun(): - fRun(0), + fRun(-1), fEvent(0), fEventNrInRun(0), fEventsPerRun(0), @@ -85,9 +86,13 @@ AliRun::AliRun(): fInitDone(kFALSE), fLego(0), fPDGDB(0), //Particle factory object - fConfigFunction("\0"), + fConfigFunction(""), fRandom(0), + fBaseFileName(""), fIsRootGeometry(kFALSE), + fGeometryFromCDB(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -95,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), @@ -115,7 +121,11 @@ AliRun::AliRun(const AliRun& arun): fPDGDB(0), //Particle factory object fConfigFunction("\0"), fRandom(0), + fBaseFileName(""), fIsRootGeometry(kFALSE), + fGeometryFromCDB(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -127,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), @@ -142,7 +152,11 @@ AliRun::AliRun(const char *name, const char *title): fPDGDB(TDatabasePDG::Instance()), //Particle factory object! fConfigFunction("Config();"), fRandom(new TRandom3()), + fBaseFileName(""), fIsRootGeometry(kFALSE), + fGeometryFromCDB(kFALSE), + fGeometryFileName(""), + fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -163,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(); @@ -276,8 +288,25 @@ void AliRun::SetRootGeometry(Bool_t flag) { // Instruct application that the geometry is to be retreived from a root file. fIsRootGeometry = flag; - if (flag) gMC->SetRootGeometry(); + 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) @@ -332,7 +361,7 @@ void AliRun::FinishRun() // // Called at the end of the run. // - + if(fLego) { AliDebug(1, "Finish Lego"); @@ -356,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(); } @@ -379,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", @@ -449,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(); } @@ -461,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; @@ -553,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); @@ -794,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(); @@ -826,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]; @@ -838,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.; } + + } // @@ -947,7 +984,6 @@ void AliRun::AddModule(AliModule* mod) fNdets++; } -// added by Alberto Colla //_____________________________________________________________________________ /*inline*/ Bool_t AliRun::IsFileAccessible(const char* fnam, EAccessMode mode) { return !gSystem->AccessPathName(fnam,mode);} @@ -958,30 +994,3 @@ void AliRun::AddModule(AliModule* mod) TString str = name; gSystem->ExpandPathName(str); return !gSystem->AccessPathName(str.Data(),mode); } - -//_____________________________________________________________________________ -Bool_t AliRun::ApplyAlignObjsToGeom(TObjArray* AlObjArray) -{ - // Read collection of alignment objects (AliAlignObj derived) saved - // in the TClonesArray ClArrayName and apply them to the geometry - // manager singleton. - // - Int_t nvols = AlObjArray->GetEntriesFast(); - - for(Int_t j=0; jUncheckedAt(j); - if (alobj->ApplyToGeometry() == kFALSE) - return kFALSE; - } - - gGeoManager->CheckOverlaps(50); - TObjArray* ovexlist = gGeoManager->GetListOfOverlaps(); - if(ovexlist->GetEntriesFast()){ - AliErrorClass("The application of alignment objects to the geometry caused huge overlaps/extrusions!"); - } - - return kTRUE; - -} -