#include "AliPDG.h"
#include "AliRun.h"
#include "AliStack.h"
+#include "AliCDBManager.h"
#include "AliAlignObj.h"
AliRun *gAlice;
fInitDone(kFALSE),
fLego(0),
fPDGDB(0), //Particle factory object
- fConfigFunction("\0"),
+ fConfigFunction(""),
fRandom(0),
+ fBaseFileName(""),
fIsRootGeometry(kFALSE),
+ fGeometryFromCDB(kFALSE),
+ fGeometryFileName(""),
+ fTriggerDescriptor(""),
fRunLoader(0x0)
{
//
fPDGDB(0), //Particle factory object
fConfigFunction("\0"),
fRandom(0),
+ fBaseFileName(""),
fIsRootGeometry(kFALSE),
+ fGeometryFromCDB(kFALSE),
+ fGeometryFileName(""),
+ fTriggerDescriptor(""),
fRunLoader(0x0)
{
//
fPDGDB(TDatabasePDG::Instance()), //Particle factory object!
fConfigFunction("Config();"),
fRandom(new TRandom3()),
+ fBaseFileName(""),
fIsRootGeometry(kFALSE),
+ fGeometryFromCDB(kFALSE),
+ fGeometryFileName(""),
+ fTriggerDescriptor(""),
fRunLoader(0x0)
{
//
// Add to list of browsable
gROOT->GetListOfBrowsables()->Add(this,name);
- // Create the TNode geometry for the event display
- BuildSimpleGeometry();
// Create default mag field
SetField();
{
// 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()){
+ 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)
//
// Called at the end of the run.
//
-
+
if(fLego)
{
AliDebug(1, "Finish Lego");
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();
}
// Set Trees branch addresses
TIter next(fModules);
- AliModule *detector;
- while((detector = dynamic_cast<AliModule*>(next())))
+ AliDetector *detector;
+ while((detector = dynamic_cast<AliDetector*>(next())))
{
detector->SetTreeAddress();
}
//_______________________________________________________________________
TGeometry *AliRun::GetGeometry()
{
- //
- // Import Alice geometry from current file
- // Return pointer to geometry object
- //
- if (!fGeometry) fGeometry = dynamic_cast<TGeometry*>(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<AliModule*>(next()))) {
- TList *dnodes=detector->Nodes();
- Int_t j;
- TNode *node, *node1;
- for ( j=0; j<dnodes->GetSize(); j++) {
- node = dynamic_cast<TNode*>(dnodes->At(j));
- node1 = fGeometry->GetNode(node->GetName());
- dnodes->Remove(node);
- dnodes->AddAt(node1,j);
+ TIter next(fModules);
+ AliModule *detector;
+ while((detector = dynamic_cast<AliModule*>(next()))) {
+ detector->BuildGeometry();
+ TList *dnodes=detector->Nodes();
+ Int_t j;
+ TNode *node, *node1;
+ for ( j=0; j<dnodes->GetSize(); j++) {
+ node = dynamic_cast<TNode*>(dnodes->At(j));
+ node1 = fGeometry->GetNode(node->GetName());
+ dnodes->Remove(node);
+ dnodes->AddAt(node1,j);
+ }
}
}
return fGeometry;
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<fNdets; ++i)
{
//_______________________________________________________________________
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:
*/
//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();
//
// Configure Generator
+
gener->SetRadiusRange(rmin, rmax);
gener->SetZMax(zmax);
gener->SetCoor1Range(nc1, c1min, c1max);
//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();
//
// 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];
AliError("No mag field defined!");
b[0]=b[1]=b[2]=0.;
}
+
+
}
//
TString str = name; gSystem->ExpandPathName(str);
return !gSystem->AccessPathName(str.Data(),mode);
}
-
-//_____________________________________________________________________________
-Bool_t AliRun::ApplyAlignObjsToGeom(TClonesArray* 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; j<nvols; j++)
- {
- AliAlignObj* alobj = (AliAlignObj*) AlObjArray->UncheckedAt(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;
-
-}
-