X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliRun.cxx;h=316c47f9f7f7573be0c2e68333d9558fbab27d94;hb=d4212668b5a53c0033688b18b7313ffb5ddab461;hp=0803e497c8570a10232865ab1ca5560fe9463a55;hpb=b3276c04036eef4c837537e8aa9a505219ff5f18;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliRun.cxx b/STEER/AliRun.cxx index 0803e497c85..316c47f9f7f 100644 --- a/STEER/AliRun.cxx +++ b/STEER/AliRun.cxx @@ -40,32 +40,25 @@ // // /////////////////////////////////////////////////////////////////////////////// -#include #include -#include -#include -#include #include #include #include #include #include +#include // #include "AliLog.h" #include "AliDetector.h" -#include "AliDisplay.h" #include "AliHeader.h" -#include "AliLego.h" -#include "AliLegoGenerator.h" #include "AliMC.h" -#include "AliMagFC.h" -#include "AliMagFCM.h" -#include "AliMagFDM.h" #include "AliPDG.h" #include "AliRun.h" #include "AliStack.h" #include "AliCDBManager.h" #include "AliAlignObj.h" +#include "AliSimulation.h" +#include "AliLego.h" AliRun *gAlice; @@ -73,25 +66,13 @@ ClassImp(AliRun) //_______________________________________________________________________ AliRun::AliRun(): - fRun(0), - fEvent(0), - fEventNrInRun(0), - fEventsPerRun(0), +// fRun(-1), + fEventNrInRun(-1), fModules(0), - fGeometry(0), fMCApp(0), - fDisplay(0), - fField(0), fNdets(0), - fInitDone(kFALSE), - fLego(0), - fPDGDB(0), //Particle factory object fConfigFunction(""), - fRandom(0), fBaseFileName(""), - fIsRootGeometry(kFALSE), - fGeometryFileName(""), - fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -99,60 +80,18 @@ AliRun::AliRun(): // AliConfig::Instance();//skowron 29 Feb 2002 //ensures that the folder structure is build -} -//_______________________________________________________________________ -AliRun::AliRun(const AliRun& arun): - TNamed(arun), - fRun(0), - fEvent(0), - fEventNrInRun(0), - fEventsPerRun(0), - fModules(0), - fGeometry(0), - fMCApp(0), - fDisplay(0), - fField(0), - fNdets(0), - fInitDone(kFALSE), - fLego(0), - fPDGDB(0), //Particle factory object - fConfigFunction("\0"), - fRandom(0), - fBaseFileName(""), - fIsRootGeometry(kFALSE), - fGeometryFileName(""), - fTriggerDescriptor(""), - fRunLoader(0x0) -{ - // - // Copy constructor for AliRun - // - arun.Copy(*this); } //_____________________________________________________________________________ AliRun::AliRun(const char *name, const char *title): TNamed(name,title), - fRun(0), - fEvent(0), - fEventNrInRun(0), - fEventsPerRun(0), + fEventNrInRun(-1), fModules(new TObjArray(77)), // Support list for the Detectors - fGeometry(0), - fMCApp(0), - fDisplay(0), - fField(0), + fMCApp(new AliMC(GetName(),GetTitle())), fNdets(0), - fInitDone(kFALSE), - fLego(0), - fPDGDB(TDatabasePDG::Instance()), //Particle factory object! fConfigFunction("Config();"), - fRandom(new TRandom3()), fBaseFileName(""), - fIsRootGeometry(kFALSE), - fGeometryFileName(""), - fTriggerDescriptor(""), fRunLoader(0x0) { // @@ -165,7 +104,7 @@ AliRun::AliRun(const char *name, const char *title): gAlice = this; // Set random number generator - gRandom = fRandom; + gRandom = new TRandom3(); if (gSystem->Getenv("CONFIG_SEED")) { gRandom->SetSeed(static_cast(atoi(gSystem->Getenv("CONFIG_SEED")))); @@ -174,15 +113,8 @@ AliRun::AliRun(const char *name, const char *title): // Add to list of browsable gROOT->GetListOfBrowsables()->Add(this,name); - // Create default mag field - SetField(); - - // Add particle list to configuration - AliConfig::Instance()->Add(fPDGDB); - } - //_______________________________________________________________________ AliRun::~AliRun() { @@ -195,6 +127,7 @@ AliRun::~AliRun() { TFolder* evfold = fRunLoader->GetEventFolder(); TFolder* modfold = dynamic_cast(evfold->FindObjectAny(AliConfig::GetModulesFolderName())); + if(!modfold) AliFatal(Form("Folder %s not found\n",AliConfig::GetModulesFolderName().Data())); TIter next(fModules); AliModule *mod; while((mod = (AliModule*)next())) @@ -202,119 +135,17 @@ AliRun::~AliRun() modfold->Remove(mod); } } - - - delete fField; + delete fMCApp; delete gMC; gMC=0; - delete fGeometry; - delete fDisplay; - delete fLego; if (fModules) { fModules->Delete(); delete fModules; } - delete fPDGDB; -} - -//_______________________________________________________________________ -void AliRun::Copy(TObject &) const -{ - AliFatal("Not implemented!"); -} - -//_______________________________________________________________________ -void AliRun::Build() -{ - // - // Initialize Alice geometry - // Dummy routine - // -} - -//_______________________________________________________________________ -void AliRun::BuildSimpleGeometry() -{ - // - // Create a simple TNode geometry used by Root display engine - // - // Initialise geometry - // - fGeometry = new TGeometry("AliceGeom","Galice Geometry for Hits"); - new TMaterial("void","Vacuum",0,0,0); //Everything is void - TBRIK *brik = new TBRIK("S_alice","alice volume","void",2000,2000,3000); - brik->SetVisibility(0); - new TNode("alice","alice","S_alice"); -} - -//_______________________________________________________________________ -void AliRun::CleanDetectors() -{ - // - // Clean Detectors at the end of event - // - fRunLoader->CleanDetectors(); -} - -//_______________________________________________________________________ -void AliRun::ResetHits() -{ - fMCApp->ResetHits(); -} - -//_______________________________________________________________________ -AliGenerator* AliRun::Generator() const -{ - return fMCApp->Generator(); -} - -//_______________________________________________________________________ -void AliRun::SetField(AliMagF* magField) -{ - // - // Set Magnetic Field Map - // - fField = 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) -{ - // - // Set magnetic field parameters - // type Magnetic field transport flag 0=no field, 2=helix, 3=Runge Kutta - // version Magnetic field map version (only 1 active now) - // scale Scale factor for the magnetic field - // maxField Maximum value for the magnetic field - - // - // --- Sanity check on mag field flags - if(fField) delete fField; - if(version==1) { - fField = new AliMagFC("Map1"," ",type,scale,maxField); - } else if(version<=2) { - fField = new AliMagFCM("Map2-3",filename,type,scale,maxField); - fField->ReadField(); - } else if(version==3) { - fField = new AliMagFDM("Map4",filename,type,scale,maxField); - fField->ReadField(); - } else { - AliWarning(Form("Invalid map %d",version)); - } } //_____________________________________________________________________________ - void AliRun::InitLoaders() { //creates list of getters @@ -333,45 +164,6 @@ void AliRun::InitLoaders() } AliDebug(1, "Done"); } -//_____________________________________________________________________________ - -void AliRun::FinishRun() -{ - // - // Called at the end of the run. - // - - if(fLego) - { - AliDebug(1, "Finish Lego"); - fRunLoader->CdGAFile(); - fLego->FinishRun(); - } - - // Clean detector information - TIter next(fModules); - AliModule *detector; - while((detector = dynamic_cast(next()))) { - AliDebug(2, Form("%s->FinishRun()", detector->GetName())); - detector->FinishRun(); - } - - AliDebug(1, "fRunLoader->WriteHeader(OVERWRITE)"); - fRunLoader->WriteHeader("OVERWRITE"); - - // Write AliRun info and all detectors parameters - fRunLoader->CdGAFile(); - 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(); - - fRunLoader->Synchronize(); -} //_______________________________________________________________________ void AliRun::Announce() const @@ -387,7 +179,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", @@ -442,14 +234,14 @@ Int_t AliRun::GetEvent(Int_t event) // Reset existing structures fMCApp->ResetHits(); fMCApp->ResetTrackReferences(); - ResetDigits(); - ResetSDigits(); + fMCApp->ResetDigits(); + fMCApp->ResetSDigits(); /*****************************************/ /**** R E L O A D ****/ /*****************************************/ - fRunLoader->GetEvent(event); + AliRunLoader::Instance()->GetEvent(event); /*****************************************/ /**** P O S T R E L O A D I N G ****/ @@ -457,42 +249,13 @@ 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(); } - return fRunLoader->GetHeader()->GetNtrack(); -} - -//_______________________________________________________________________ -TGeometry *AliRun::GetGeometry() -{ - // 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()))) { - 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; + return AliRunLoader::Instance()->GetHeader()->GetNtrack(); } //_______________________________________________________________________ @@ -501,162 +264,14 @@ void AliRun::SetBaseFile(const char *filename) fBaseFileName = filename; } -//_______________________________________________________________________ -void AliRun::ResetDigits() -{ - // - // Reset all Detectors digits - // - TIter next(fModules); - AliModule *detector; - while((detector = dynamic_cast(next()))) { - detector->ResetDigits(); - } -} - -//_______________________________________________________________________ -void AliRun::ResetSDigits() -{ - // - // Reset all Detectors digits - // - TIter next(fModules); - AliModule *detector; - while((detector = dynamic_cast(next()))) { - detector->ResetSDigits(); - } -} - - -//_______________________________________________________________________ - -void AliRun::ResetPoints() -{ - // - // Reset all Detectors points - // - TIter next(fModules); - AliModule *detector; - while((detector = dynamic_cast(next()))) { - detector->ResetPoints(); - } -} -//_______________________________________________________________________ - -void AliRun::InitMC(const char *setup) -{ - // - // Initialize ALICE Simulation run - // - Announce(); - - if(fInitDone) { - AliWarning("Cannot initialise AliRun twice!"); - return; - } - - 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; - - TIter next(fModules); - for(Int_t i=0; i(fModules->At(i)); - objlast = gDirectory->GetList()->Last(); - - // Add Detector histograms in Detector list of histograms - if (objlast) objfirst = gDirectory->GetList()->After(objlast); - else objfirst = gDirectory->GetList()->First(); - while (objfirst) - { - detector->Histograms()->Add(objfirst); - objfirst = gDirectory->GetList()->After(objfirst); - } - } - - fMCApp->Init(); - - //Must be here because some MCs (G4) adds detectors here and not in Config.C - InitLoaders(); - fRunLoader->MakeTree("E"); - if (fLego == 0x0) - { - fRunLoader->LoadKinematics("RECREATE"); - fRunLoader->LoadTrackRefs("RECREATE"); - fRunLoader->LoadHits("all","RECREATE"); - } - fInitDone = kTRUE; - // - // Save stuff at the beginning of the file to avoid file corruption - fRunLoader->CdGAFile(); - Write(); - fEventNrInRun = -1; //important - we start Begin event from increasing current number in run -} - -//_______________________________________________________________________ - -void AliRun::RunMC(Int_t nevent, const char *setup) -{ - // - // Main function to be called to process a galice run - // example - // Root > gAlice.Run(); - // a positive number of events will cause the finish routine - // to be called - // - fEventsPerRun = nevent; - // check if initialisation has been done - if (!fInitDone) InitMC(setup); - - // Create the Root Tree with one branch per detector - //Hits moved to begin event -> now we are crating separate tree for each event - - gMC->ProcessRun(nevent); - - // End of this run, close files - if(nevent>0) FinishRun(); -} - -//_______________________________________________________________________ -void AliRun::RunReco(const char *selected, Int_t first, Int_t last) -{ - // - // Main function to be called to reconstruct Alice event - // - Int_t nev = fRunLoader->GetNumberOfEvents(); - 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++) { - AliDebug(1, Form("Processing event %d", nevent)); - GetEvent(nevent); - Digits2Reco(selected); - } -} //_______________________________________________________________________ - void AliRun::Hits2Digits(const char *selected) { // Convert Hits to sumable digits // - for (Int_t nevent=0; neventTreeE()->GetEntries(); nevent++) { + for (Int_t nevent=0; neventTreeE()->GetEntries(); nevent++) { GetEvent(nevent); Hits2SDigits(selected); SDigits2Digits(selected); @@ -665,7 +280,6 @@ void AliRun::Hits2Digits(const char *selected) //_______________________________________________________________________ - void AliRun::Tree2Tree(Option_t *option, const char *selected) { // @@ -737,124 +351,6 @@ 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) -{ - // - // Generates lego plots of: - // - radiation length map phi vs theta - // - radiation length map phi vs eta - // - interaction length map - // - g/cm2 length map - // - // ntheta bins in theta, eta - // themin minimum angle in theta (degrees) - // themax maximum angle in theta (degrees) - // nphi bins in phi - // phimin minimum angle in phi (degrees) - // phimax maximum angle in phi (degrees) - // rmin minimum radius - // rmax maximum radius - // - // - // The number of events generated = ntheta*nphi - // run input parameters in macro setup (default="Config.C") - // - // Use macro "lego.C" to visualize the 3 lego plots in spherical coordinates - //Begin_Html - /* - - */ - //End_Html - //Begin_Html - /* - - */ - //End_Html - //Begin_Html - /* - - */ - //End_Html - // - - // 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(); - // - // Configure Generator - gener->SetRadiusRange(rmin, rmax); - gener->SetZMax(zmax); - gener->SetCoor1Range(nc1, c1min, c1max); - gener->SetCoor2Range(nc2, c2min, c2max); - - - //Create Lego object - fLego = new AliLego("lego",gener); - - if (!fInitDone) InitMC(setup); - //Save current generator - - AliGenerator *gen=fMCApp->Generator(); - fMCApp->ResetGenerator(gener); - //Prepare MC for Lego Run - gMC->InitLego(); - - //Run Lego Object - - if (fRunLoader) fRunLoader->SetNumberOfEventsPerFile(nc1 * nc2); - //gMC->ProcessRun(nc1*nc2+1); - gMC->ProcessRun(nc1*nc2); - - // End of this run, close files - FinishRun(); - // Restore current generator - fMCApp->ResetGenerator(gen); - // Delete Lego Object - delete fLego; fLego=0; -} - -//_______________________________________________________________________ -void AliRun::SetConfigFunction(const char * config) -{ - // - // Set the signature of the function contained in Config.C to configure - // the run - // - fConfigFunction=config; -} - -// -// MC Application -// - -//_______________________________________________________________________ -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]; - } - else { - AliError("No mag field defined!"); - b[0]=b[1]=b[2]=0.; - } -} - -// -// End of MC Application -// //_______________________________________________________________________ void AliRun::Streamer(TBuffer &R__b) @@ -865,20 +361,20 @@ void AliRun::Streamer(TBuffer &R__b) if (!gAlice) gAlice = this; AliRun::Class()->ReadBuffer(R__b, this); gROOT->GetListOfBrowsables()->Add(this,"Run"); - - gRandom = fRandom; + gRandom = new TRandom3(); } else { AliRun::Class()->WriteBuffer(R__b, this); } } -//_______________________________________________________________________ +//_______________________________________________________________________ void AliRun::SetGenEventHeader(AliGenEventHeader* header) { - fRunLoader->GetHeader()->SetGenEventHeader(header); + AliRunLoader::Instance()->GetHeader()->SetGenEventHeader(header); } -//_______________________________________________________________________ + +//_______________________________________________________________________ Int_t AliRun::GetEvNumber() const { //Returns number of current event @@ -890,8 +386,8 @@ Int_t AliRun::GetEvNumber() const return fRunLoader->GetEventNumber(); } -//_______________________________________________________________________ +//_______________________________________________________________________ void AliRun::SetRunLoader(AliRunLoader* rloader) { // @@ -903,7 +399,7 @@ void AliRun::SetRunLoader(AliRunLoader* rloader) TString evfoldname; TFolder* evfold = fRunLoader->GetEventFolder(); if (evfold) evfoldname = evfold->GetName(); - else AliWarning("Did not get Event Folder from Run Loader"); + else AliFatal("Did not get Event Folder from Run Loader"); if ( fRunLoader->GetAliRun() ) {//if alrun already exists in folder @@ -941,6 +437,7 @@ void AliRun::SetRunLoader(AliRunLoader* rloader) } } +//_______________________________________________________________________ void AliRun::AddModule(AliModule* mod) { // @@ -959,14 +456,3 @@ 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);} - -//______________________________________________________ -/*inline*/ Bool_t AliRun::IsFileAccessible(Char_t* name,EAccessMode mode) -{ - TString str = name; gSystem->ExpandPathName(str); - return !gSystem->AccessPathName(str.Data(),mode); -}