Charged jets (pPb): Improved trackcut analysis
[u/mrichter/AliRoot.git] / PHOS / MakePHOSFullMisAlignment.C
index 30cc94a..00f2d7e 100644 (file)
-void MakePHOSFullMisAlignment(){
-  // Create TClonesArray of full misalignment objects for PHOS
-  //
+void MakePHOSFullMisAlignment()
+{
+  // Create misalignment object for PHOS module 2,3,3
+  // from the survey measurements on P2 in August 2009.
+  // To store alignment in OCDB, define the evnironment variables:
+  // TOCDB=kTRUE
+  // STORAGE="local://$ALICE_ROOT/OCDB"
+  // Author: Timur Pocheptsov, 19.06.2008
+  // Modified: Yuri Kharlov, 11.03.2010
+
+  const char * macroName = "MakePHOS2Alignment";
+  
   const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP");
   if (!phosGeom) {
-    Error("MakePHOSFullMisAlignment", "Cannot obtain AliPHOSGeometry singleton\n");
+    Error(macroName, "Cannot obtain AliPHOSGeometry singleton.\n");
     return;
   }
 
-  AliPHOSEMCAGeometry *emca = phosGeom->GetEMCAGeometry();
-  TClonesArray *array = new TClonesArray("AliAlignObjAngles", 16 + phosGeom->GetNModules() * 
-                                         emca->GetNStripX() * emca->GetNStripZ());
-  TClonesArray &alobj = *array;
-   
-  Double_t dpsi=0., dtheta=0., dphi=0.;
-  Double_t displacement = 10;
-  Int_t iIndex=0; //let all modules have index=0 in a layer with no LUT
-  AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
-  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex);
-  Int_t i=0 ;
+  AliPHOSEMCAGeometry * emca = phosGeom->GetEMCAGeometry();
+  TClonesArray alobj("AliAlignObjParams", 16);// + phosGeom->GetNModules() * emca->GetNStripX() *
+                                              //   emca->GetNStripZ());
+  
+  const Double_t dpsi = 0., dtheta = 0., dphi = 0.;
+  const Double_t displacement = 10.;
+  Int_t iIndex = 0; //let all modules have index=0 in a layer with no LUT
+  const AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
+  UShort_t volid = AliGeomManager::LayerToVolUID(iLayer, iIndex);
+  Int_t i = 0;
 
   // Alignment for 5 PHOS modules
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module1",
-         volid, -20., -10.,   0., dpsi, dtheta, 5, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module2",
-         volid, -10.,   0., -10., dpsi, dtheta, 2, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module3",
-         volid,   5., -10.,  10., dpsi, dtheta, 0, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module4",
-         volid, +10.,  -0., -10., dpsi, dtheta, 2, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module5",
-         volid, +20., -10.,   0., dpsi, dtheta, 5, kTRUE);
 
-  Double_t dx=0., dy=0., dz=0. ;
+  TString surveyFileName;
+  
+  const Char_t * szEnv = gSystem->Getenv("ALICE_ROOT");
+  if (szEnv && szEnv[0]) {
+    surveyFileName += szEnv;
+    if (surveyFileName[surveyFileName.Length() - 1] != '/')
+      surveyFileName += '/';
+  } else {
+    Warning(macroName, "cannot find ALICE_ROOT environment variable\n"
+                      "probably, I wan't be able to find survey file");
+  }
+    
+  surveyFileName += "PHOS/data/Survey_1053236_PHOS.txt";
+
+  AliSurveyObj survey;
+  survey.FillFromLocalFile(surveyFileName.Data());
+  TGeoHMatrix module3Delta, module2Delta, module1Delta;
+  AliPHOSModuleMisalignment delta(*phosGeom);
+
+  delta.DeltaTransformation(0, survey.GetData(), "410000", "410027", "424000", 
+                           &module1Delta);
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module1", volid, module1Delta, kTRUE);
+
+  delta.DeltaTransformation(1, survey.GetData(), "310000", "310027", "324000", 
+                           &module2Delta);
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module2", volid, module2Delta, kTRUE);
+
+  delta.DeltaTransformation(2, survey.GetData(), "210000", "210027", "224000", 
+                           &module3Delta);
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, module3Delta, kTRUE);
+
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module4", volid, 0., 0., 0., 0., 0., 0., kTRUE);
+
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module5", volid, 0., 0., 0., 0., 0., 0., kTRUE);
+
+  const Double_t dx = 0., dy = 0., dz = 0. ;
   // Alignment of CPV modules
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module1/CPV",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module1/CPV",
         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module2/CPV",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV",
         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module3/CPV",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV",
         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module4/CPV",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV",
         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Module5/CPV",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV",
         volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
  
   // Alignment for PHOS cradle
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Cradle0",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0",
          volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Cradle1",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1",
          volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
 
   // Alignment for cradle wheels
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Wheel0",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0",
          volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Wheel1",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1",
          volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Wheel2",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2",
          volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
-  new(alobj[i++]) AliAlignObjAngles("PHOS/Wheel3",
+  new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3",
          volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
 
-  AliPHOSSurvey geodesicData("phos_mod3_survey.txt");
-  geodesicData.CreateAliAlignObjAngles(alobj);
-
   // *************************    2nd step    ***************
-
-  if(!gSystem->Getenv("TOCDB")){
+  if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) {
     // save on file
-    TFile f("PHOSfullMisalignment.root","RECREATE");
-    if(!f) cerr<<"cannot open file for output\n";
+    const char * fileName = "PHOSfullMisalignment.root";
+    TFile f(fileName,"RECREATE");
+    if (!f) {
+      Error(macroName, "cannot open file for output\n");
+      return;
+    }
+    
+    Info(macroName,"Saving alignment objects to the file %s", fileName);
     f.cd();
-    f.WriteObject(array,"PHOSFullObjs ","kSingleKey");
+    f.WriteObject(&alobj,"PHOSAlignObjs","kSingleKey");
     f.Close();
   }else{
     // save in CDB storage
-    const char* Storage = gSystem->Getenv("STORAGE");
-    AliCDBManager *CDB = AliCDBManager::Instance();
-    AliCDBStorage* storage = CDB->GetStorage(Storage);
-    AliCDBMetaData *md= new AliCDBMetaData();
-    md->SetResponsible("Yuri Kharlov");
-    md->SetComment("Alignment objects for fully misaligned geometry");
-    md->SetAliRootVersion(gSystem->Getenv("ARVERSION"));
-    AliCDBId id("PHOS/Align/Data",0,9999999);
-    storage->Put(array,id, md);
+    TString storageENV = gSystem->Getenv("STORAGE");
+    if(!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) {
+      Error(macroName,"STORAGE variable set to %s is not valid. Exiting\n", storageENV.Data());
+      return;
+    }
+    
+    Info(macroName,"Saving alignment objects in CDB storage %s", storageENV.Data());
+    AliCDBManager * cdb = AliCDBManager::Instance();
+    AliCDBStorage * storage = cdb->GetStorage(storageENV.Data());
+    if (!storage) {
+      Error(macroName, "Unable to open storage %s\n", storageENV.Data());
+      return;
+    }
+    
+    AliCDBMetaData md;
+    md.SetResponsible("Yuri Kharlov");
+    md.SetComment("Alignment objects for PHOS modules 2,3,4; survey in August 2009");
+    md.SetAliRootVersion(gSystem->Getenv("ARVERSION"));
+    AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity());
+    storage->Put(&alobj, id, &md);
   }
 
-  array->Delete();
-
+  alobj.Delete();
 }