Macro to create alignment object for the PHOS module 2 surveyed in May 2008.
authorkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 29 Jul 2008 16:37:14 +0000 (16:37 +0000)
committerkharlov <kharlov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 29 Jul 2008 16:37:14 +0000 (16:37 +0000)
PHOS/macros/AlignmentDB/MakePHOSAlignmentModule2.C [new file with mode: 0644]

diff --git a/PHOS/macros/AlignmentDB/MakePHOSAlignmentModule2.C b/PHOS/macros/AlignmentDB/MakePHOSAlignmentModule2.C
new file mode 100644 (file)
index 0000000..3fb33a1
--- /dev/null
@@ -0,0 +1,154 @@
+void MakePHOSAlignmentModule2()\r
+{\r
+  // Create misalignment object for PHOS module 2 \r
+  // from the survey measurements on P2 in May 2008.\r
+  // To store alignment in OCDB, define the evnironment variables:\r
+  // TOCDB=kTRUE\r
+  // STORAGE="local://$ALICE_ROOT"\r
+  // Author: Timur Pocheptsov, 19.06.2008\r
+\r
+  const char * macroName = "MakePHOS2Alignment";\r
+  \r
+  const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP");\r
+  if (!phosGeom) {\r
+    Error(macroName, "Cannot obtain AliPHOSGeometry singleton.\n");\r
+    return;\r
+  }\r
+\r
+  //Activate CDB storage and load geometry from CDB\r
+  //I need valid gGeoManager to create local transformations.\r
+  \r
+  //[Part of code, taken from ITS version of MakexxxFullMisalignment\r
+  AliCDBManager * cdb = AliCDBManager::Instance();\r
+  if (!cdb->IsDefaultStorageSet())\r
+    cdb->SetDefaultStorage("local://$ALICE_ROOT");\r
+  cdb->SetRun(0);\r
+\r
+  if (TString(gSystem->Getenv("TOCDB")) == TString("kTRUE")) {\r
+    const TString storageENV(gSystem->Getenv("STORAGE"));\r
+    if (!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) {\r
+      Error(macroName, "STORAGE variable set to %s is not valid.\n", storageENV.Data());\r
+      return;\r
+    }\r
+    \r
+    AliCDBStorage * storage = cdb->GetStorage(storageENV.Data());\r
+    if (!storage) {\r
+      Error(macroName, "Unable to open storage %s.\n", storageENV.Data());\r
+      return;\r
+    }\r
+    \r
+    AliCDBPath path("GRP","Geometry","Data");\r
+    AliCDBEntry * entry = storage->Get(path.GetPath(), cdb->GetRun());\r
+    if (!entry) {\r
+      Error(macroName,"Could not get the specified CDB entry!");\r
+      return;  \r
+    }\r
+    \r
+    entry->SetOwner(0);\r
+    AliGeomManager::SetGeometry((TGeoManager*) entry->GetObject());\r
+  }else{\r
+    AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage\r
+  }    \r
+  //end of code taken from ITS version of MakexxxFullMisalignment]\r
+\r
+  AliPHOSEMCAGeometry * emca = phosGeom->GetEMCAGeometry();\r
+  TClonesArray alobj("AliAlignObjParams", 16);// + phosGeom->GetNModules() * emca->GetNStripX() * emca->GetNStripZ());\r
+   \r
+  const Double_t dpsi = 0., dtheta = 0., dphi = 0.;\r
+  const Double_t displacement = 10.;\r
+  Int_t iIndex = 0; //let all modules have index=0 in a layer with no LUT\r
+  const AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;\r
+  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer, iIndex);\r
+  Int_t i = 0;\r
+\r
+  // Alignment for 5 PHOS modules\r
+\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module1",\r
+         volid, 0., 0., 0., 0., 0., 0., kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module2",\r
+         volid, 0., 0., 0., 0., 0., 0., kTRUE);\r
+\r
+  Double_t rotMatrix[9] = {0.999992695, -0.00295322, -0.0024267, \r
+                          0.002955489, 0.999995199, 0.00093165, \r
+                          0.002423942, -0.000938811, 0.99999662};\r
+  TGeoRotation rotation;\r
+  rotation.SetMatrix(rotMatrix);\r
+  Double_t dX=1.25474126, dY=-1.4088643, dZ=-12.856;\r
+  AliAlignObjParams * mod3 = \r
+    new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, dX, dY, dZ, 0., 0., 0., kFALSE);\r
+  mod3->SetRotation(rotation);\r
+  \r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module4",\r
+         volid, 0.,  0., 0., 0., 0., 0., kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module5",\r
+         volid, 0., 0., 0., 0., 0., 0., kTRUE);\r
+\r
+  const Double_t dx = 0., dy = 0., dz = 0. ;\r
+  // Alignment of CPV modules\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module1/CPV",\r
+        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV",\r
+        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV",\r
+        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV",\r
+        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV",\r
+        volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);\r
\r
+  // Alignment for PHOS cradle\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0",\r
+         volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1",\r
+         volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);\r
+\r
+  // Alignment for cradle wheels\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0",\r
+         volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1",\r
+         volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2",\r
+         volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);\r
+  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3",\r
+         volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);\r
+\r
+  // *************************    2nd step    ***************\r
+  if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) {\r
+    // save on file\r
+    const char * fileName = "PHOSfullMisalignment.root";\r
+    TFile f(fileName,"RECREATE");\r
+    if (!f) {\r
+      Error(macroName, "cannot open file for output\n");\r
+      return;\r
+    }\r
+    \r
+    Info(macroName,"Saving alignment objects to the file %s", fileName);\r
+    f.cd();\r
+    f.WriteObject(&alobj,"PHOSAlignObjs","kSingleKey");\r
+    f.Close();\r
+  }else{\r
+    // save in CDB storage\r
+    TString storageENV = gSystem->Getenv("STORAGE");\r
+    if(!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) {\r
+      Error(macroName,"STORAGE variable set to %s is not valid. Exiting\n", storageENV.Data());\r
+      return;\r
+    }\r
+    \r
+    Info(macroName,"Saving alignment objects in CDB storage %s", storageENV.Data());\r
+    AliCDBManager * cdb = AliCDBManager::Instance();\r
+    AliCDBStorage * storage = cdb->GetStorage(storageENV.Data());\r
+    if (!storage) {\r
+      Error(macroName, "Unable to open storage %s\n", storageENV.Data());\r
+      return;\r
+    }\r
+    \r
+    AliCDBMetaData md;\r
+    md.SetResponsible("Timur Pocheptsov");\r
+    md.SetComment("Alignment objects for PHOS module 2; survey in May 2008");\r
+    md.SetAliRootVersion(gSystem->Getenv("ARVERSION"));\r
+    AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity());\r
+    storage->Put(&alobj, id, &md);\r
+  }\r
+\r
+  alobj.Delete();\r
+}\r