]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliGeomManager.cxx
modification(by Levente) to solve the problem in the QA mentioned in the bug report...
[u/mrichter/AliRoot.git] / STEER / AliGeomManager.cxx
index 21c4095729c80114627bc24697ba333c041cc062..f0bad5de470c8f048d1fcd6d572e79e0354aad40 100644 (file)
@@ -111,6 +111,12 @@ void AliGeomManager::LoadGeometry(const char *geomFileName)
   // 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);
@@ -471,7 +477,7 @@ Bool_t AliGeomManager::CheckSymNamesLUT(const char* /*detsToBeChecked*/)
 {
   // 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.
@@ -554,7 +560,29 @@ Bool_t AliGeomManager::CheckSymNamesLUT(const char* /*detsToBeChecked*/)
   }
   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;
@@ -1076,6 +1104,7 @@ Bool_t AliGeomManager::CheckSymNamesLUT(const char* /*detsToBeChecked*/)
     modnum=0;
 
     for (Int_t iModule=1; iModule <= 12; iModule++) {
+      if(!emcalSMs[iModule-1]) continue;
       symname = str;
       symname += iModule;
       if(iModule >10) {
@@ -1574,7 +1603,7 @@ Bool_t AliGeomManager::ApplyAlignObjsFromCDB(const char* AlignDetsList)
   
   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 += " ";
@@ -1588,7 +1617,8 @@ Bool_t AliGeomManager::ApplyAlignObjsFromCDB(const char* AlignDetsList)
 
   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);
@@ -1639,40 +1669,40 @@ Bool_t AliGeomManager::LoadAlignObjsFromCDBSingleDet(const char* detName, TObjAr
 //_____________________________________________________________________________
 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;
 
 }