Several modifications to the alignment object classes
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 1 Mar 2006 13:55:59 +0000 (13:55 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 1 Mar 2006 13:55:59 +0000 (13:55 +0000)
STEER/AliAlignObj.cxx
STEER/AliAlignObj.h
STEER/AliAlignObjAngles.cxx
STEER/AliAlignObjAngles.h
STEER/AliAlignObjMatrix.cxx
STEER/AliAlignObjMatrix.h

index 12e6c58..c27e61d 100644 (file)
@@ -35,6 +35,7 @@
 #include "AliAlignObj.h"
 #include "AliTrackPointArray.h"
 #include "AliLog.h"
+#include "AliAlignObjAngles.h"
  
 ClassImp(AliAlignObj)
 
@@ -76,6 +77,19 @@ TString* AliAlignObj::fgVolPath[kLastLayer - kFirstLayer] = {
   0x0
 };
 
+AliAlignObj** AliAlignObj::fgAlignObjs[kLastLayer - kFirstLayer] = {
+  0x0,0x0,
+  0x0,0x0,
+  0x0,0x0,
+  0x0,0x0,
+  0x0,0x0,0x0,
+  0x0,0x0,0x0,
+  0x0,
+  0x0,0x0,
+  0x0,
+  0x0
+};
+
 //_____________________________________________________________________________
 AliAlignObj::AliAlignObj():
   fVolUID(0)
@@ -420,6 +434,37 @@ Bool_t AliAlignObj::GetFromGeometry(const char *path, AliAlignObj &alobj)
   return kTRUE;
 }
 
+void  AliAlignObj::InitAlignObjFromGeometry()
+{
+  // Loop over all alignable volumes and extract
+  // the corresponding alignment objects from
+  // the TGeo geometry
+  
+  InitVolPaths();
+
+  for (Int_t iLayer = 0; iLayer < (AliAlignObj::kLastLayer - AliAlignObj::kFirstLayer); iLayer++) {
+    fgAlignObjs[iLayer] = new AliAlignObj*[AliAlignObj::LayerSize(iLayer)];
+    for (Int_t iModule = 0; iModule < AliAlignObj::LayerSize(iLayer); iModule++) {
+      UShort_t volid = AliAlignObj::LayerToVolUID(iLayer+ AliAlignObj::kFirstLayer,iModule);
+      fgAlignObjs[iLayer][iModule] = new AliAlignObjAngles("",volid,0,0,0,0,0,0);
+      const char *path = GetVolPath(volid);
+      if (!GetFromGeometry(path, *fgAlignObjs[iLayer][iModule]))
+       AliErrorClass(Form("Failed to extract the alignment object for the volume (ID=%d and path=%s) !",volid,path));
+    }
+  }
+  
+}
+
+//_____________________________________________________________________________
+AliAlignObj* AliAlignObj::GetAlignObj(ELayerID layerId, Int_t modId)
+{
+  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;
+  }
+  return fgAlignObjs[layerId-kFirstLayer][modId];
+}
+
 //_____________________________________________________________________________
 const char* AliAlignObj::GetVolPath(ELayerID layerId, Int_t modId)
 {
index e37c5c1..c0ffdbf 100644 (file)
@@ -84,12 +84,20 @@ class AliAlignObj : public TObject {
   Bool_t ApplyToGeometry();
   static Bool_t   GetFromGeometry(const char *path, AliAlignObj &alobj);
 
+  static void         InitAlignObjFromGeometry();
+  static AliAlignObj* GetAlignObj(UShort_t voluid) {
+    Int_t modId;
+    ELayerID layerId = VolUIDToLayer(voluid,modId);
+    return GetAlignObj(layerId,modId);
+  }
+  static AliAlignObj* GetAlignObj(ELayerID layerId, Int_t modId);
+
  protected:
 
   void AnglesToMatrix(const Double_t *angles, Double_t *rot) const;
   Bool_t MatrixToAngles(const Double_t *rot, Double_t *angles) const;
 
-  void InitVolPaths();
+  static void InitVolPaths();
 
   //Volume identifiers
   TString  fVolPath; // Volume path inside TGeo geometry
@@ -100,6 +108,8 @@ class AliAlignObj : public TObject {
 
   static TString*    fgVolPath[kLastLayer - kFirstLayer];
 
+  static AliAlignObj** fgAlignObjs[kLastLayer - kFirstLayer];
+
   ClassDef(AliAlignObj, 2)
 };
 
index 0624a42..ece8da0 100644 (file)
@@ -68,7 +68,7 @@ AliAlignObjAngles::AliAlignObjAngles(const char* volpath, UShort_t voluid, TGeoM
 }
 
 //_____________________________________________________________________________
-AliAlignObjAngles::AliAlignObjAngles(const AliAlignObjAngles& theAlignObj) :
+AliAlignObjAngles::AliAlignObjAngles(const AliAlignObj& theAlignObj) :
   AliAlignObj(theAlignObj)
 {
   // copy constructor
@@ -82,7 +82,7 @@ AliAlignObjAngles::AliAlignObjAngles(const AliAlignObjAngles& theAlignObj) :
 }
 
 //_____________________________________________________________________________
-AliAlignObjAngles &AliAlignObjAngles::operator =(const AliAlignObjAngles& theAlignObj)
+AliAlignObjAngles &AliAlignObjAngles::operator =(const AliAlignObj& theAlignObj)
 {
   // assignment operator
   //
index 9dfb97f..45b21b3 100644 (file)
@@ -22,8 +22,8 @@ class AliAlignObjAngles : public AliAlignObj{
   AliAlignObjAngles(const char* volpath, UShort_t voluid, Double_t x, Double_t y, Double_t z, Double_t psi, Double_t theta, Double_t phi);
   AliAlignObjAngles(const char* volpath, ELayerID detId, Int_t volId, Double_t x, Double_t y, Double_t z, Double_t psi, Double_t theta, Double_t phi);
   AliAlignObjAngles(const char* volpath, UShort_t voluid, TGeoMatrix& m);
-  AliAlignObjAngles(const AliAlignObjAngles& theAlignObj);
-  AliAlignObjAngles& operator= (const AliAlignObjAngles& theAlignObj);
+  AliAlignObjAngles(const AliAlignObj& theAlignObj);
+  AliAlignObjAngles& operator= (const AliAlignObj& theAlignObj);
   virtual ~AliAlignObjAngles();
   
   //Setters
index 9b8a553..3fc32c8 100644 (file)
@@ -66,7 +66,7 @@ AliAlignObjMatrix::AliAlignObjMatrix(const char* volpath, UShort_t voluid, TGeoM
 }
 
 //_____________________________________________________________________________
-AliAlignObjMatrix::AliAlignObjMatrix(const AliAlignObjMatrix& theAlignObj) :
+AliAlignObjMatrix::AliAlignObjMatrix(const AliAlignObj& theAlignObj) :
   AliAlignObj(theAlignObj)
 {
   //copy constructor
@@ -80,7 +80,7 @@ AliAlignObjMatrix::AliAlignObjMatrix(const AliAlignObjMatrix& theAlignObj) :
 }
 
 //_____________________________________________________________________________
-AliAlignObjMatrix &AliAlignObjMatrix::operator =(const AliAlignObjMatrix& theAlignObj)
+AliAlignObjMatrix &AliAlignObjMatrix::operator =(const AliAlignObj& theAlignObj)
 {  
   // assignment operator
   //
index d3c78c8..8e6acd3 100644 (file)
@@ -18,8 +18,8 @@ class AliAlignObjMatrix : public AliAlignObj {
   AliAlignObjMatrix(const char* volpath, UShort_t voluid, Double_t x, Double_t y, Double_t z, Double_t psi, Double_t theta, Double_t phi);
   AliAlignObjMatrix(const char* volpath, ELayerID detId, Int_t volId, Double_t x, Double_t y, Double_t z, Double_t psi, Double_t theta, Double_t phi);
   AliAlignObjMatrix(const char* volpath, UShort_t voluid, TGeoMatrix& m);
-  AliAlignObjMatrix(const AliAlignObjMatrix& theAlignObj);
-  AliAlignObjMatrix& operator= (const AliAlignObjMatrix& theAlignObj);
+  AliAlignObjMatrix(const AliAlignObj& theAlignObj);
+  AliAlignObjMatrix& operator= (const AliAlignObj& theAlignObj);
   virtual ~AliAlignObjMatrix();
   
   //Setters