// Load geometry either from a file
// or from the corresponding CDB entry
+ if(fgGeometry->IsLocked()){
+ AliErrorClass("Cannot load a new geometry, the current one being locked. Setting internal geometry to null!!");
+ fgGeometry = NULL;
+ return;
+ }
+
fgGeometry = NULL;
if (geomFileName && (!gSystem->AccessPathName(geomFileName))) {
fgGeometry = TGeoManager::Import(geomFileName);
{
// Check the look-up table which associates the unique numerical identity of
// each alignable volume to the corresponding symbolic volume name.
- // The LUT is now hold inside the geometry and handled by TGeo.
+ // The LUT is now held inside the geometry and handled by TGeo.
// The method is meant to be launched when loading a geometry to verify that
// no changes in the symbolic names have been introduced, which would prevent
// backward compatibility with alignment objects.
}
if(phosActive) detsString+="PHOS ";
- if(fgGeometry->CheckPath("ALIC_1/XEN1_1")) detsString+="EMCAL";
+ // Check over the ten EMCAL full supermodules and the two EMCAL half supermodules
+ TString emcalSM;
+ TString baseEmcalSM("ALIC_1/XEN1_1/SM");
+ Bool_t emcalActive=kFALSE;
+ Bool_t emcalSMs[12] = {kFALSE};
+ for(Int_t sm=0; sm<12; sm++)
+ {
+ emcalSM=baseEmcalSM;
+ if(sm<10){
+ emcalSM += "OD_";
+ emcalSM += (sm+1);
+ }else{
+ emcalSM += "10_";
+ emcalSM += (sm-9);
+ }
+ if(fgGeometry->CheckPath(emcalSM.Data()))
+ {
+ emcalActive=kTRUE;
+ emcalSMs[sm]=kTRUE;
+ }
+ }
+ if(emcalActive) detsString+="EMCAL ";
+
TString symname;
const char* sname;
modnum=0;
for (Int_t iModule=1; iModule <= 12; iModule++) {
+ if(!emcalSMs[iModule-1]) continue;
symname = str;
symname += iModule;
if(iModule >10) {
while((str = (TObjString*) iter.Next())){
TString det(str->String());
- AliInfoClass(Form("Loading alignment objs for %s",det.Data()));
+ AliDebugClass(5,Form("Loading alignment objs for %s",det.Data()));
if(!LoadAlignObjsFromCDBSingleDet(det.Data(),alignObjArray)){
alObjsNotLoaded += det.Data();
alObjsNotLoaded += " ";
if(!alObjsLoaded.IsNull()) AliInfoClass(Form("Alignment objects loaded for: %s",
alObjsLoaded.Data()));
- if(!alObjsNotLoaded.IsNull()) AliInfoClass(Form("Didn't/couldn't load alignment objects for: %s",
+ if(!alObjsNotLoaded.IsNull())
+ AliFatalClass(Form("Could not load alignment objects from OCDB for: %s",
alObjsNotLoaded.Data()));
return ApplyAlignObjsToGeom(alignObjArray);
//_____________________________________________________________________________
Bool_t AliGeomManager::ApplyAlignObjsToGeom(TObjArray& alignObjArray, Bool_t ovlpcheck)
{
- // Read collection of alignment objects (AliAlignObj derived) saved
- // in the TClonesArray alObjArray and apply them to gGeoManager
- //
- alignObjArray.Sort();
- Int_t nvols = alignObjArray.GetEntriesFast();
+ // Read collection of alignment objects (AliAlignObj derived) saved
+ // in the TClonesArray alObjArray and apply them to gGeoManager
+ //
+ alignObjArray.Sort();
+ Int_t nvols = alignObjArray.GetEntriesFast();
- Bool_t flag = kTRUE;
+ Bool_t flag = kTRUE;
- for(Int_t j=0; j<nvols; j++)
- {
- AliAlignObj* alobj = (AliAlignObj*) alignObjArray.UncheckedAt(j);
- flag = alobj->ApplyToGeometry(ovlpcheck);
- if(!flag)
+ for(Int_t j=0; j<nvols; j++)
{
- AliDebugClass(5,Form("Error applying alignment object for volume %s !",alobj->GetSymName()));
- }else{
- AliDebugClass(5,Form("Alignment object for volume %s applied successfully",alobj->GetSymName()));
- }
+ AliAlignObj* alobj = (AliAlignObj*) alignObjArray.UncheckedAt(j);
+ if(!alobj->ApplyToGeometry(ovlpcheck))
+ {
+ flag = kFALSE;
+ AliDebugClass(5,Form("Error applying alignment object for volume %s !",alobj->GetSymName()));
+ }else{
+ AliDebugClass(5,Form("Alignment object for volume %s applied successfully",alobj->GetSymName()));
+ }
- }
+ }
- if (AliDebugLevelClass() > 5) {
- fgGeometry->CheckOverlaps(0.001);
- TObjArray* ovexlist = fgGeometry->GetListOfOverlaps();
- if(ovexlist->GetEntriesFast()){
- AliErrorClass("The application of alignment objects to the geometry caused huge overlaps/extrusions!");
- fgGeometry->PrintOverlaps();
- }
- }
+ if (AliDebugLevelClass() > 5) {
+ fgGeometry->CheckOverlaps(0.001);
+ TObjArray* ovexlist = fgGeometry->GetListOfOverlaps();
+ if(ovexlist->GetEntriesFast()){
+ AliErrorClass("The application of alignment objects to the geometry caused huge overlaps/extrusions!");
+ fgGeometry->PrintOverlaps();
+ }
+ }
- // Update the TGeoPhysicalNodes
- fgGeometry->RefreshPhysicalNodes();
+ // Update the TGeoPhysicalNodes
+ fgGeometry->RefreshPhysicalNodes();
- return flag;
+ return flag;
}