Alignment object with symbolic volume names are introduced
authorkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 27 Sep 2006 19:55:57 +0000 (19:55 +0000)
committerkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 27 Sep 2006 19:55:57 +0000 (19:55 +0000)
PHOS/AliPHOSv0.cxx
PHOS/AliPHOSv0.h
PHOS/macros/AlignmentDB/AliPHOSSetAlignment.C

index 39f4889..51663c6 100644 (file)
@@ -17,6 +17,9 @@
 /* History of cvs commits:
  *
  * $Log$
+ * Revision 1.81  2006/03/04 20:25:56  kharlov
+ * Set geom parameters from CDB
+ *
  * Revision 1.80  2005/06/17 07:39:07  hristov
  * Removing GetDebug and SetDebug from AliRun and AliModule. Using AliLog for the messages
  *
@@ -44,6 +47,7 @@
 #include <TTRD1.h>
 #include <TTree.h>
 #include <TVirtualMC.h>
+#include <TGeoManager.h>
 
 // --- Standard library ---
 
@@ -866,6 +870,70 @@ void AliPHOSv0::CreateGeometryforSupport()
 
 }
 
+//_____________________________________________________________________________
+void AliPHOSv0::AddAlignableVolumes() const
+{
+  //
+  // Create entries for alignable volumes associating the symbolic volume
+  // name with the corresponding volume path. Needs to be syncronized with
+  // eventual changes in the geometry
+  // Alignable volumes are:
+  // 1) PHOS modules as a whole
+  // 2) Cradle
+  // 3) Cradle wheels
+  // 4) Strip units (group of 2x8 crystals)
+
+  TString volpath, symname;
+
+  // Alignable modules
+  // Volume path /ALIC_1/PHOS_<i> => symbolic name /PHOS/Module<i>, <i>=1,2,3,4,5
+
+  TString physModulePath="/ALIC_1/PHOS_";
+  TString symbModuleName="PHOS/Module";
+  Int_t nModules = GetGeometry()->GetNModules();
+
+  for(Int_t iModule=1; iModule<=nModules; iModule++){
+    volpath = physModulePath;
+    volpath += iModule;
+    symname = symbModuleName;
+    symname += iModule;
+    gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data());
+  }
+
+  // Alignable cradle walls
+  // Volume path /ALIC_1/PCRA_<i> => symbolic name /PHOS/Cradle<i>, <i>=0,1
+
+  TString physCradlePath="/ALIC_1/PCRA_";
+  TString symbCradleName="PHOS/Cradle";
+  Int_t nCradles = 2;
+
+  for(Int_t iCradle=0; iCradle<nCradles; iCradle++){
+    volpath = physCradlePath;
+    volpath += iCradle;
+    symname = symbCradleName;
+    symname += iCradle;
+    gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data());
+  }
+
+  // Alignable wheels
+  // Volume path /ALIC_1/PWHE_<i> => symbolic name /PHOS/Wheel<i>, i=0,1,2,3
+
+  TString physWheelPath="/ALIC_1/PWHE_";
+  TString symbWheelName="PHOS/Wheel";
+  Int_t nWheels = 4;
+
+  for(Int_t iWheel=0; iWheel<nWheels; iWheel++){
+    volpath = physWheelPath;
+    volpath += iWheel;
+    symname = symbWheelName;
+    symname += iWheel;
+    gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data());
+  }
+
+  // Alignable strip units are not implemented yet (27.09.2006)
+
+}
+
 //____________________________________________________________________________
 Float_t AliPHOSv0::ZMin(void) const
 {
index 675f101..0a8df6b 100644 (file)
@@ -8,6 +8,9 @@
 /* History of cvs commits:
  *
  * $Log$
+ * Revision 1.43  2005/05/28 14:19:05  schutz
+ * Compilation warnings fixed by T.P.
+ *
  */
 
 //_________________________________________________________________________
@@ -55,6 +58,8 @@ class AliPHOSv0 : public AliPHOS {
   //  void           CreateGeometryforPPSD(void) ;     // creates the PPSD geometry for GEANT
   void           CreateGeometryforCPV(void) ;      // creates the CPV  geometry for GEANT
   void           CreateGeometryforSupport(void) ;  // creates the Support geometry for GEANT
+  virtual void   AddAlignableVolumes() const;      // define sym.names for alignable volumes
+
   virtual Float_t ZMin() const;                    // overall dimension of the module (min)
   virtual Float_t ZMax() const;                    // overall dimension of the module (max)
 
index cc57a54..595d14e 100644 (file)
@@ -69,14 +69,14 @@ void IdealAlignment()
   AliAlignObj::ELayerID iLayer = AliAlignObj::kInvalidLayer;
   UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
 
-  TString basePath = "/ALIC_1/PHOS_"; 
+  TString basePath = "PHOS/Module"; 
   const Int_t nModules=5;
 
   for (Int_t iModule = 1; iModule<=nModules; iModule++) {
     TString newPath = basePath;
     newPath += iModule;
     new(alobj[iModule-1]) AliAlignObjAngles(newPath.Data(),
-                                           dvoluid, dx, dy, dz, dpsi, dtheta, dphi);
+                                           dvoluid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
   }
 
   // *************************    2nd step    ***************
@@ -88,7 +88,7 @@ void IdealAlignment()
   AliCDBMetaData *md= new AliCDBMetaData();
   md->SetResponsible("Yuri Kharlov");
   md->SetComment("Alignment objects for ideal geometry, i.e. applying them to TGeo has to leave geometry unchanged");
-  AliCDBId id("PHOS/Align/Data",0,0);
+  AliCDBId id("PHOS/Align/Data",0,999999);
   CDB->Put(array,id, md);
 }
 
@@ -114,32 +114,32 @@ void ResidualAlignment()
   UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
 
   // Alignment for 5 PHOS modules
-  new(alobj[0]) AliAlignObjAngles("/ALIC_1/PHOS_1",
-                                 dvoluid, -0.20, -0.1, +0.0, dpsi, dtheta, 0.2);
-  new(alobj[1]) AliAlignObjAngles("/ALIC_1/PHOS_2",
-                                 dvoluid, -0.10, +0.0, -0.2, dpsi, dtheta, 0.2);
-  new(alobj[2]) AliAlignObjAngles("/ALIC_1/PHOS_3",
-                                 dvoluid,  0.05, -0.1,  0.2, dpsi, dtheta, 0.0);
-  new(alobj[3]) AliAlignObjAngles("/ALIC_1/PHOS_4",
-                                 dvoluid, +0.10, -0.0, -0.1, dpsi, dtheta, 0.1);
-  new(alobj[4]) AliAlignObjAngles("/ALIC_1/PHOS_5",
-                                 dvoluid, +0.20, -0.1,  0.1, dpsi, dtheta, 0.2);
+  new(alobj[0]) AliAlignObjAngles("PHOS/Module1",
+                                 dvoluid, -0.20, -0.1, +0.0, dpsi, dtheta, 0.2, kTRUE);
+  new(alobj[1]) AliAlignObjAngles("PHOS/Module2",
+                                 dvoluid, -0.10, +0.0, -0.2, dpsi, dtheta, 0.2, kTRUE);
+  new(alobj[2]) AliAlignObjAngles("PHOS/Module3",
+                                 dvoluid,  0.05, -0.1,  0.2, dpsi, dtheta, 0.0, kTRUE);
+  new(alobj[3]) AliAlignObjAngles("PHOS/Module4",
+                                 dvoluid, +0.10, -0.0, -0.1, dpsi, dtheta, 0.1, kTRUE);
+  new(alobj[4]) AliAlignObjAngles("PHOS/Module5",
+                                 dvoluid, +0.20, -0.1,  0.1, dpsi, dtheta, 0.2, kTRUE);
 
   // Alignment for PHOS cradle
-  new(alobj[5]) AliAlignObjAngles("/ALIC_1/PCRA_0",
-                                 dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi);
-  new(alobj[6]) AliAlignObjAngles("/ALIC_1/PCRA_1",
-                                 dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi);
+  new(alobj[5]) AliAlignObjAngles("PHOS/Cradle0",
+                                 dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
+  new(alobj[6]) AliAlignObjAngles("PHOS/Cradle1",
+                                 dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
 
   // Alignment for cradle wheels
-  new(alobj[7])  AliAlignObjAngles("/ALIC_1/PWHE_0",
-                                  dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi);
-  new(alobj[8])  AliAlignObjAngles("/ALIC_1/PWHE_1",
-                                  dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi);
-  new(alobj[9])  AliAlignObjAngles("/ALIC_1/PWHE_2",
-                                  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi);
-  new(alobj[10]) AliAlignObjAngles("/ALIC_1/PWHE_3",
-                                  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi);
+  new(alobj[7])  AliAlignObjAngles("PHOS/Wheel0",
+                                  dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
+  new(alobj[8])  AliAlignObjAngles("PHOS/Wheel1",
+                                  dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
+  new(alobj[9])  AliAlignObjAngles("PHOS/Wheel2",
+                                  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
+  new(alobj[10]) AliAlignObjAngles("PHOS/Wheel3",
+                                  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
 
   // *************************    2nd step    ***************
   // Make CDB storage and put TClonesArray in
@@ -150,7 +150,7 @@ void ResidualAlignment()
   AliCDBMetaData *md= new AliCDBMetaData();
   md->SetResponsible("Yuri Kharlov");
   md->SetComment("Alignment objects for slightly misaligned geometry, i.e. applying them to TGeo has to distirbes geometry very little (resisual misalignment");
-  AliCDBId id("PHOS/Align/Data",200,200);
+  AliCDBId id("PHOS/Align/Data",1000000,1999999);
   CDB->Put(array,id, md);
 }
 
@@ -175,32 +175,32 @@ void FullMisalignment()
   UShort_t dvoluid = AliAlignObj::LayerToVolUID(iLayer,iIndex); //dummy volume identity 
 
   // Alignment for 5 PHOS modules
-  new(alobj[0]) AliAlignObjAngles("/ALIC_1/PHOS_1",
-                                 dvoluid, -20., -10.,   0., dpsi, dtheta, 5);
-  new(alobj[1]) AliAlignObjAngles("/ALIC_1/PHOS_2",
-                                 dvoluid, -10.,   0., -10., dpsi, dtheta, 2);
-  new(alobj[2]) AliAlignObjAngles("/ALIC_1/PHOS_3",
-                                 dvoluid,   5., -10.,  10., dpsi, dtheta, 0);
-  new(alobj[3]) AliAlignObjAngles("/ALIC_1/PHOS_4",
-                                 dvoluid, +10.,  -0., -10., dpsi, dtheta, 2);
-  new(alobj[4]) AliAlignObjAngles("/ALIC_1/PHOS_5",
-                                 dvoluid, +20., -10.,   0., dpsi, dtheta, 5);
+  new(alobj[0]) AliAlignObjAngles("PHOS/Module1",
+                                 dvoluid, -20., -10.,   0., dpsi, dtheta, 5, kTRUE);
+  new(alobj[1]) AliAlignObjAngles("PHOS/Module2",
+                                 dvoluid, -10.,   0., -10., dpsi, dtheta, 2, kTRUE);
+  new(alobj[2]) AliAlignObjAngles("PHOS/Module3",
+                                 dvoluid,   5., -10.,  10., dpsi, dtheta, 0, kTRUE);
+  new(alobj[3]) AliAlignObjAngles("PHOS/Module4",
+                                 dvoluid, +10.,  -0., -10., dpsi, dtheta, 2, kTRUE);
+  new(alobj[4]) AliAlignObjAngles("PHOS/Module5",
+                                 dvoluid, +20., -10.,   0., dpsi, dtheta, 5, kTRUE);
 
   // Alignment for PHOS cradle
-  new(alobj[5]) AliAlignObjAngles("/ALIC_1/PCRA_0",
-                                 dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi);
-  new(alobj[6]) AliAlignObjAngles("/ALIC_1/PCRA_1",
-                                 dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi);
+  new(alobj[5]) AliAlignObjAngles("PHOS/Cradle0",
+                                 dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
+  new(alobj[6]) AliAlignObjAngles("PHOS/Cradle1",
+                                 dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
 
   // Alignment for cradle wheels
-  new(alobj[7]) AliAlignObjAngles("/ALIC_1/PWHE_0",
-                                 dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi);
-  new(alobj[8]) AliAlignObjAngles("/ALIC_1/PWHE_1",
-                                 dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi);
-  new(alobj[9]) AliAlignObjAngles("/ALIC_1/PWHE_2",
-                                 dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi);
-  new(alobj[10]) AliAlignObjAngles("/ALIC_1/PWHE_3",
-                                  dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi);
+  new(alobj[7]) AliAlignObjAngles("PHOS/Wheel0",
+                                 dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
+  new(alobj[8]) AliAlignObjAngles("PHOS/Wheel1",
+                                 dvoluid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
+  new(alobj[9]) AliAlignObjAngles("PHOS/Wheel2",
+                                 dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
+  new(alobj[10]) AliAlignObjAngles("PHOS/Wheel3",
+                                 dvoluid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
 
   // *************************    2nd step    ***************
   // Make CDB storage and put TClonesArray in
@@ -211,6 +211,6 @@ void FullMisalignment()
   AliCDBMetaData *md= new AliCDBMetaData();
   md->SetResponsible("Yuri Kharlov");
   md->SetComment("Alignment objects for fully misaligned geometry, i.e. applying them to TGeo has to distirbes geometry very much");
-  AliCDBId id("PHOS/Align/Data",100,100);
+  AliCDBId id("PHOS/Align/Data",2000000,2999999);
   CDB->Put(array,id, md);
 }