1 void MakePHOSFullMisAlignment()
3 // Create misalignment object for PHOS module 2
4 // from the survey measurements on P2 in May 2008.
5 // To store alignment in OCDB, define the evnironment variables:
7 // STORAGE="local://$ALICE_ROOT/OCDB"
8 // Author: Timur Pocheptsov, 19.06.2008
10 const char * macroName = "MakePHOS2Alignment";
12 const AliPHOSGeometry *phosGeom = AliPHOSGeometry::GetInstance("IHEP", "IHEP");
14 Error(macroName, "Cannot obtain AliPHOSGeometry singleton.\n");
18 //Activate CDB storage and load geometry from CDB
19 //I need valid gGeoManager to create local transformations.
21 //[Part of code, taken from ITS version of MakexxxFullMisalignment.
22 //This code was required only for local delta transformations.
23 //Now, transformations are global, so no gGeoManager and geometry are required.
25 AliCDBManager * cdb = AliCDBManager::Instance();
26 if (!cdb->IsDefaultStorageSet())
27 cdb->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
30 if (TString(gSystem->Getenv("TOCDB")) == TString("kTRUE")) {
31 const TString storageENV(gSystem->Getenv("STORAGE"));
32 if (!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) {
33 Error(macroName, "STORAGE variable set to %s is not valid.\n", storageENV.Data());
37 AliCDBStorage * storage = cdb->GetStorage(storageENV.Data());
39 Error(macroName, "Unable to open storage %s.\n", storageENV.Data());
43 AliCDBPath path("GRP","Geometry","Data");
44 AliCDBEntry * entry = storage->Get(path.GetPath(), cdb->GetRun());
46 Error(macroName,"Could not get the specified CDB entry!");
51 AliGeomManager::SetGeometry((TGeoManager*) entry->GetObject());
53 AliGeomManager::LoadGeometry("geometry.root"); //load geom from default CDB storage
56 //end of code taken from ITS version of MakexxxFullMisalignment]
58 AliPHOSEMCAGeometry * emca = phosGeom->GetEMCAGeometry();
59 TClonesArray alobj("AliAlignObjParams", 16);// + phosGeom->GetNModules() * emca->GetNStripX() *
60 // emca->GetNStripZ());
62 const Double_t dpsi = 0., dtheta = 0., dphi = 0.;
63 const Double_t displacement = 10.;
64 Int_t iIndex = 0; //let all modules have index=0 in a layer with no LUT
65 const AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
66 UShort_t volid = AliGeomManager::LayerToVolUID(iLayer, iIndex);
69 // Alignment for 5 PHOS modules
71 TString surveyFileName;
73 const Char_t * szEnv = gSystem->Getenv("ALICE_ROOT");
74 if (szEnv && szEnv[0]) {
75 surveyFileName += szEnv;
76 if (surveyFileName[surveyFileName.Length() - 1] != '/')
77 surveyFileName += '/';
79 Warning(macroName, "cannot find ALICE_ROOT environment variable\n"
80 "probably, I wan't be able to find survey file");
83 surveyFileName += "PHOS/data/phos_mod3_survey_2008.txt";
85 new(alobj[i++]) AliAlignObjParams("PHOS/Module1", volid, 0., 0., 0., 0., 0., 0., kTRUE);
86 new(alobj[i++]) AliAlignObjParams("PHOS/Module2", volid, 2., 0., 0., 0., 0., 0., kTRUE);
89 survey.FillFromLocalFile(surveyFileName.Data());
90 TGeoHMatrix module3Delta;
91 AliPHOSModuleMisalignment delta(*phosGeom);
92 delta.DeltaTransformation(2, survey.GetData(), "T2_10000", "T2_10027", "T2_24000",
94 new(alobj[i++]) AliAlignObjParams("PHOS/Module3", volid, module3Delta, kTRUE);
96 new(alobj[i++]) AliAlignObjParams("PHOS/Module4", volid, 0., 0., 0., 0., 0., 0., kTRUE);
97 new(alobj[i++]) AliAlignObjParams("PHOS/Module5", volid, 0., 0., 0., 0., 0., 0., kTRUE);
99 const Double_t dx = 0., dy = 0., dz = 0. ;
100 // Alignment of CPV modules
101 new(alobj[i++]) AliAlignObjParams("PHOS/Module1/CPV",
102 volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
103 new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV",
104 volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
105 new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV",
106 volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
107 new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV",
108 volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
109 new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV",
110 volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
112 // Alignment for PHOS cradle
113 new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0",
114 volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
115 new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1",
116 volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
118 // Alignment for cradle wheels
119 new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0",
120 volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
121 new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1",
122 volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
123 new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2",
124 volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
125 new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3",
126 volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
128 // ************************* 2nd step ***************
129 if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) {
131 const char * fileName = "PHOSfullMisalignment.root";
132 TFile f(fileName,"RECREATE");
134 Error(macroName, "cannot open file for output\n");
138 Info(macroName,"Saving alignment objects to the file %s", fileName);
140 f.WriteObject(&alobj,"PHOSAlignObjs","kSingleKey");
143 // save in CDB storage
144 TString storageENV = gSystem->Getenv("STORAGE");
145 if(!storageENV.BeginsWith("local://") && !storageENV.BeginsWith("alien://")) {
146 Error(macroName,"STORAGE variable set to %s is not valid. Exiting\n", storageENV.Data());
150 Info(macroName,"Saving alignment objects in CDB storage %s", storageENV.Data());
151 AliCDBManager * cdb = AliCDBManager::Instance();
152 AliCDBStorage * storage = cdb->GetStorage(storageENV.Data());
154 Error(macroName, "Unable to open storage %s\n", storageENV.Data());
159 md.SetResponsible("Timur Pocheptsov");
160 md.SetComment("Alignment objects for PHOS module 2; survey in May 2008");
161 md.SetAliRootVersion(gSystem->Getenv("ARVERSION"));
162 AliCDBId id("PHOS/Align/Data",0,AliCDBRunRange::Infinity());
163 storage->Put(&alobj, id, &md);