AliGeomManager::AliGeomManager():
TObject(),
- // fgGeometry(NULL),
fAlignObjArray(NULL)
{
// default constructor
return kFALSE;
}
- ReactIfChangedGeom();
-
const char *path;
TGeoPNEntry* pne = gGeoManager->GetAlignableEntry(symname);
if(pne){
if(fgAlignObjs[0]) return;
- ReactIfChangedGeom();
-
for (Int_t iLayer = kFirstLayer; iLayer < AliGeomManager::kLastLayer; iLayer++) {
fgAlignObjs[iLayer-kFirstLayer] = new AliAlignObj*[LayerSize(iLayer)];
for (Int_t iModule = 0; iModule < LayerSize(iLayer); iModule++) {
AliWarningClass(Form("Module number %d not in the valid range (0->%d) !",modId,fgLayerSize[layerId-kFirstLayer]-1));
return NULL;
}
- ReactIfChangedGeom();
+ InitSymNamesLUT();
return fgSymName[layerId-kFirstLayer][modId].Data();
}
// AliGeomManager instance and recreated if the geometry has changed
//
+ if(fgSymName[0]) return;
+
for (Int_t iLayer = 0; iLayer < (kLastLayer - kFirstLayer); iLayer++){
if(!fgSymName[iLayer]) fgSymName[iLayer]=new TString[fgLayerSize[iLayer]];
}
// AliGeomManager instance and recreated if the geometry has changed
//
+ if(!gGeoManager) AliErrorClass("Impossible to initialize PNEntries LUT without an active geometry");
+
+ InitSymNamesLUT();
+
for (Int_t iLayer = 0; iLayer < (kLastLayer - kFirstLayer); iLayer++){
if(!fgPNEntry[iLayer]) fgPNEntry[iLayer] = new TGeoPNEntry*[fgLayerSize[iLayer]];
}
for (Int_t iLayer = 0; iLayer < (kLastLayer-kFirstLayer); iLayer++){
- for(Int_t modnum=0; modnum<LayerSize(iLayer); modnum++){
- fgPNEntry[iLayer-kFirstLayer][modnum] = gGeoManager->GetAlignableEntry(fgSymName[iLayer-kFirstLayer][modnum].Data());
+ for(Int_t modnum=0; modnum<fgLayerSize[iLayer]; modnum++){
+ fgPNEntry[iLayer][modnum] = gGeoManager->GetAlignableEntry(fgSymName[iLayer][modnum].Data());
}
}
}
// Get the transformation matrix for a given PNEntry
// by quering the TGeoManager
+ if (!gGeoManager || !gGeoManager->IsClosed()) {
+ AliErrorClass("Can't get the global matrix! gGeoManager doesn't exist or it is still opened!");
+ return NULL;
+ }
+
TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
if (pnode) return pnode->GetMatrix();
// Get the global transformation matrix for a given alignable volume
// identified by its unique ID 'index' by quering the TGeoManager
- ReactIfChangedGeom();
-
TGeoPNEntry *pne = GetPNEntry(index);
if (!pne) return NULL;
// Get the global transformation matrix for a given alignable volume
// identified by its symbolic name 'symname' by quering the TGeoManager
- ReactIfChangedGeom();
+ if(!ReactIfChangedGeom()) return NULL;
TGeoPNEntry* pne = gGeoManager->GetAlignableEntry(symname);
if (!pne) return NULL;
m.Clear();
- ReactIfChangedGeom();
const char *symname = SymName(index);
if (!symname) return kFALSE;
//______________________________________________________________________
const TGeoHMatrix* AliGeomManager::GetTracking2LocalMatrix(Int_t index)
{
- // Get the matrix which transforms from the tracking to local r.s.
+ // Get the matrix which transforms from the tracking to the local RS
// The method queries directly the TGeoPNEntry
- ReactIfChangedGeom();
TGeoPNEntry *pne = GetPNEntry(index);
if (!pne) return NULL;
// Returns the TGeoPNEntry for a given layer
// and module ID
//
- ReactIfChangedGeom();
+
+ if(!fgPNEntry[0]) InitPNEntriesLUT();
+ if(!ReactIfChangedGeom()) return NULL;
+
if(modId<0 || modId>=fgLayerSize[layerId-kFirstLayer]){
AliWarningClass(Form("Module number %d not in the valid range (0->%d) !",modId,fgLayerSize[layerId-kFirstLayer]-1));
return NULL;
}
//_____________________________________________________________________________
-void AliGeomManager::ReactIfChangedGeom()
+Bool_t AliGeomManager::ReactIfChangedGeom()
{
// Check if the TGeo geometry has changed. In that case reinitialize the
- // look-up tables
+ // look-up table mapping volume indexes to TGeoPNEntries
//
+
+ if (!gGeoManager || !gGeoManager->IsClosed()) {
+ AliErrorClass("No active geometry or geometry not yet closed!");
+ return kFALSE;
+ }
+
if(HasGeomChanged())
{
fgGeometry = gGeoManager;
- InitSymNamesLUT();
InitPNEntriesLUT();
}
+
+ return kTRUE;
}
static AliAlignObj* GetAlignObj(UShort_t voluid);
static AliAlignObj* GetAlignObj(ELayerID layerId, Int_t modId);
+ //to be used making a copy of the returned pointer to TGeoHMatrix!!
static TGeoHMatrix* GetMatrix(TGeoPNEntry* pne);
static TGeoHMatrix* GetMatrix(Int_t index);
static TGeoHMatrix* GetMatrix(const char *symname);
AliGeomManager(const AliGeomManager&);
AliGeomManager& operator=(const AliGeomManager&);
- static void ReactIfChangedGeom();
+ static Bool_t ReactIfChangedGeom();
static Bool_t HasGeomChanged(){return fgGeometry!=gGeoManager;}
static TGeoManager* fgGeometry;