forked from alisw/AliRoot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakePHOSFullMisAlignment.C
135 lines (113 loc) · 5.23 KB
/
MakePHOSFullMisAlignment.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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(macroName, "Cannot obtain AliPHOSGeometry singleton.\n");
return;
}
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
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++]) AliAlignObjParams("PHOS/Module1/CPV",
volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
new(alobj[i++]) AliAlignObjParams("PHOS/Module2/CPV",
volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
new(alobj[i++]) AliAlignObjParams("PHOS/Module3/CPV",
volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
new(alobj[i++]) AliAlignObjParams("PHOS/Module4/CPV",
volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
new(alobj[i++]) AliAlignObjParams("PHOS/Module5/CPV",
volid, dx, dy, dz, dpsi, dtheta, dphi, kTRUE);
// Alignment for PHOS cradle
new(alobj[i++]) AliAlignObjParams("PHOS/Cradle0",
volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
new(alobj[i++]) AliAlignObjParams("PHOS/Cradle1",
volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
// Alignment for cradle wheels
new(alobj[i++]) AliAlignObjParams("PHOS/Wheel0",
volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
new(alobj[i++]) AliAlignObjParams("PHOS/Wheel1",
volid, 0., 0., -displacement, dpsi, dtheta, dphi, kTRUE);
new(alobj[i++]) AliAlignObjParams("PHOS/Wheel2",
volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
new(alobj[i++]) AliAlignObjParams("PHOS/Wheel3",
volid, 0., 0., +displacement, dpsi, dtheta, dphi, kTRUE);
// ************************* 2nd step ***************
if ( TString(gSystem->Getenv("TOCDB")) != TString("kTRUE") ) {
// save on file
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(&alobj,"PHOSAlignObjs","kSingleKey");
f.Close();
}else{
// save in CDB storage
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);
}
alobj.Delete();
}