1 #if !defined(__CINT__) || defined(__MAKECINT__)
3 #include <TClonesArray.h>
5 #include <TGeoManager.h>
9 #include "AliAlignObj.h"
11 void DrawITSAlignObj(const char* filename="ITSfullMisalignment.root",
12 const char* filenameOut="ITSfullModuleMisalignment.root",
13 Bool_t local=kFALSE) {
15 // Draw distribution of alignment constants
16 // (original version: A.Jacholkowski; modified by: A.Dainese)
21 AliGeomManager::LoadGeometry("geometry.root");
23 TFile* f = TFile::Open(filename);
24 if(!f) {cerr<<"cannot open input file\n"; return;}
26 TCanvas *cSPDsector = new TCanvas("cSPDsector","SPD sectors alignobjs",0,0,800,600);
27 cSPDsector->Divide(3,2);
28 TH1F* hxSPDsector = new TH1F("hxSPDsector","x in SPD sectors",100,-0.1,0.1);
29 hxSPDsector->SetXTitle("[cm]");
30 TH1F* hySPDsector = new TH1F("hySPDsector","y in SPD sectors",100,-0.1,0.1);
31 hySPDsector->SetXTitle("[cm]");
32 TH1F* hzSPDsector = new TH1F("hzSPDsector","z in SPD sectors",100,-0.1,0.1);
33 hzSPDsector->SetXTitle("[cm]");
34 TH1F* hrxSPDsector = new TH1F("hrxSPDsector","rx in SPD sectors",100,-0.5,0.5);
35 hrxSPDsector->SetXTitle("[deg]");
36 TH1F* hrySPDsector = new TH1F("hrySPDsector","ry in SPD sectors",100,-0.5,0.5);
37 hrySPDsector->SetXTitle("[deg]");
38 TH1F* hrzSPDsector = new TH1F("hrzSPDsector","rz in SPD sectors",100,-0.5,0.5);
39 hrzSPDsector->SetXTitle("[deg]");
41 TCanvas *cSPDhalfstave = new TCanvas("cSPDhalfstave","SPD halfstaves alignobjs",0,0,800,600);
42 cSPDhalfstave->Divide(3,2);
43 TH1F* hxSPDhalfstave = new TH1F("hxSPDhalfstave","x in SPD halfstaves",100,-0.01,0.01);
44 hxSPDhalfstave->SetXTitle("[cm]");
45 TH1F* hySPDhalfstave = new TH1F("hySPDhalfstave","y in SPD halfstaves",100,-0.01,0.01);
46 hySPDhalfstave->SetXTitle("[cm]");
47 TH1F* hzSPDhalfstave = new TH1F("hzSPDhalfstave","z in SPD halfstaves",100,-0.01,0.01);
48 hzSPDhalfstave->SetXTitle("[cm]");
49 TH1F* hrxSPDhalfstave = new TH1F("hrxSPDhalfstave","rx in SPD halfstaves",100,-0.1,0.1);
50 hrxSPDhalfstave->SetXTitle("[deg]");
51 TH1F* hrySPDhalfstave = new TH1F("hrySPDhalfstave","ry in SPD halfstaves",100,-0.1,0.1);
52 hrySPDhalfstave->SetXTitle("[deg]");
53 TH1F* hrzSPDhalfstave = new TH1F("hrzSPDhalfstave","rz in SPD halfstaves",100,-0.5,0.5);
54 hrzSPDhalfstave->SetXTitle("[deg]");
56 TCanvas *cSPDladder = new TCanvas("cSPDladder","SPD ladders alignobjs",0,0,800,600);
57 cSPDladder->Divide(3,2);
58 TH1F* hxSPDladder = new TH1F("hxSPDladder","x in SPD ladders",100,-0.01,0.01);
59 hxSPDladder->SetXTitle("[cm]");
60 TH1F* hySPDladder = new TH1F("hySPDladder","y in SPD ladders",100,-0.01,0.01);
61 hySPDladder->SetXTitle("[cm]");
62 TH1F* hzSPDladder = new TH1F("hzSPDladder","z in SPD ladders",100,-0.01,0.01);
63 hzSPDladder->SetXTitle("[cm]");
64 TH1F* hrxSPDladder = new TH1F("hrxSPDladder","rx in SPD ladders",100,-0.01,0.01);
65 hrxSPDladder->SetXTitle("[deg]");
66 TH1F* hrySPDladder = new TH1F("hrySPDladder","ry in SPD ladders",100,-0.01,0.01);
67 hrySPDladder->SetXTitle("[deg]");
68 TH1F* hrzSPDladder = new TH1F("hrzSPDladder","rz in SPD ladders",100,-0.01,0.01);
69 hrzSPDladder->SetXTitle("[deg]");
71 TCanvas *cSDDladder = new TCanvas("cSDDladder","SDD ladders alignobjs",0,0,800,600);
72 cSDDladder->Divide(3,2);
73 TH1F* hxSDDladder = new TH1F("hxSDDladder","x in SDD ladders",100,-0.01,0.01);
74 hxSDDladder->SetXTitle("[cm]");
75 TH1F* hySDDladder = new TH1F("hySDDladder","y in SDD ladders",100,-0.01,0.01);
76 hySDDladder->SetXTitle("[cm]");
77 TH1F* hzSDDladder = new TH1F("hzSDDladder","z in SDD ladders",100,-0.01,0.01);
78 hzSDDladder->SetXTitle("[cm]");
79 TH1F* hrxSDDladder = new TH1F("hrxSDDladder","rx in SDD ladders",100,-0.01,0.01);
80 hrxSDDladder->SetXTitle("[deg]");
81 TH1F* hrySDDladder = new TH1F("hrySDDladder","ry in SDD ladders",100,-0.01,0.01);
82 hrySDDladder->SetXTitle("[deg]");
83 TH1F* hrzSDDladder = new TH1F("hrzSDDladder","rz in SDD ladders",100,-0.01,0.01);
84 hrzSDDladder->SetXTitle("[deg]");
86 TCanvas *cSDDsensor = new TCanvas("cSDDsensor","SDD sensors alignobjs",0,0,800,600);
87 cSDDsensor->Divide(3,2);
88 TH1F* hxSDDsensor = new TH1F("hxSDDsensor","x in SDD sensors",100,-0.01,0.01);
89 hxSDDsensor->SetXTitle("[cm]");
90 TH1F* hySDDsensor = new TH1F("hySDDsensor","y in SDD sensors",100,-0.01,0.01);
91 hySDDsensor->SetXTitle("[cm]");
92 TH1F* hzSDDsensor = new TH1F("hzSDDsensor","z in SDD sensors",100,-0.01,0.01);
93 hzSDDsensor->SetXTitle("[cm]");
94 TH1F* hrxSDDsensor = new TH1F("hrxSDDsensor","rx in SDD sensors",100,-0.01,0.01);
95 hrxSDDsensor->SetXTitle("[deg]");
96 TH1F* hrySDDsensor = new TH1F("hrySDDsensor","ry in SDD sensors",100,-0.01,0.01);
97 hrySDDsensor->SetXTitle("[deg]");
98 TH1F* hrzSDDsensor = new TH1F("hrzSDDsensor","rz in SDD sensors",100,-0.01,0.01);
99 hrzSDDsensor->SetXTitle("[deg]");
102 TCanvas *cSSDladder = new TCanvas("cSSDladder","SSD ladders alignobjs",0,0,800,600);
103 cSSDladder->Divide(3,2);
104 TH1F* hxSSDladder = new TH1F("hxSSDladder","x in SSD ladders",100,-0.01,0.01);
105 hxSSDladder->SetXTitle("[cm]");
106 TH1F* hySSDladder = new TH1F("hySSDladder","y in SSD ladders",100,-0.01,0.01);
107 hySSDladder->SetXTitle("[cm]");
108 TH1F* hzSSDladder = new TH1F("hzSSDladder","z in SSD ladders",100,-0.01,0.01);
109 hzSSDladder->SetXTitle("[cm]");
110 TH1F* hrxSSDladder = new TH1F("hrxSSDladder","rx in SSD ladders",100,-0.01,0.01);
111 hrxSSDladder->SetXTitle("[deg]");
112 TH1F* hrySSDladder = new TH1F("hrySSDladder","ry in SSD ladders",100,-0.01,0.01);
113 hrySSDladder->SetXTitle("[deg]");
114 TH1F* hrzSSDladder = new TH1F("hrzSSDladder","rz in SSD ladders",100,-0.01,0.01);
115 hrzSSDladder->SetXTitle("[deg]");
117 TCanvas *cSSDsensor = new TCanvas("cSSDsensor","SSD sensors alignobjs",0,0,800,600);
118 cSSDsensor->Divide(3,2);
119 TH1F* hxSSDsensor = new TH1F("hxSSDsensor","x in SSD sensors",100,-0.01,0.01);
120 hxSSDsensor->SetXTitle("[cm]");
121 TH1F* hySSDsensor = new TH1F("hySSDsensor","y in SSD sensors",100,-0.01,0.01);
122 hySSDsensor->SetXTitle("[cm]");
123 TH1F* hzSSDsensor = new TH1F("hzSSDsensor","z in SSD sensors",100,-0.01,0.01);
124 hzSSDsensor->SetXTitle("[cm]");
125 TH1F* hrxSSDsensor = new TH1F("hrxSSDsensor","rx in SSD sensors",100,-0.01,0.01);
126 hrxSSDsensor->SetXTitle("[deg]");
127 TH1F* hrySSDsensor = new TH1F("hrySSDsensor","ry in SSD sensors",100,-0.01,0.01);
128 hrySSDsensor->SetXTitle("[deg]");
129 TH1F* hrzSSDsensor = new TH1F("hrzSSDsensor","rz in SSD sensors",100,-0.01,0.01);
130 hrzSSDsensor->SetXTitle("[deg]");
134 TClonesArray* ar = (TClonesArray*)f->Get("ITSAlignObjs");
135 Int_t entries = ar->GetEntriesFast();
136 cout<<"number of alignment objects: "<<entries<<endl;
138 AliGeomManager::ApplyAlignObjsToGeom(*ar,overlaps);
141 Option_t *opt = NULL;
147 TClonesArray *arrayOut = new TClonesArray("AliAlignObjParams",4000);
148 TClonesArray &alobjOut = *arrayOut;
151 for(Int_t i=0; i<entries; i++){
152 a=(AliAlignObj*)ar->UncheckedAt(i);
154 a->GetLocalPars(tr,rot);
158 TString symName = a->GetSymName();
159 UShort_t volUID = a->GetVolUID();
160 printf("VolId %d %s\n",volUID,symName.Data());
162 AliGeomManager::GetDeltaForBranch(*a,delta);
165 // create AliAlignObjParam with total delta
166 if(i==0 || volUID!=0) {
167 new(alobjOut[j]) AliAlignObjParams(symName.Data(),volUID,delta,kTRUE);
174 if(!symName.Contains("SPD") && !symName.Contains("SDD") && !symName.Contains("SSD")) {
177 if(symName.Contains("SPD") && symName.Contains("Sector") && !symName.Contains("HalfStave")) {
178 hxSPDsector->Fill(tr[0]);
179 hySPDsector->Fill(tr[1]);
180 hzSPDsector->Fill(tr[2]);
181 hrxSPDsector->Fill(rot[0]);
182 hrySPDsector->Fill(rot[1]);
183 hrzSPDsector->Fill(rot[2]);
185 if(symName.Contains("SPD") && symName.Contains("Sector") && symName.Contains("HalfStave") && !symName.Contains("Ladder")) {
186 hxSPDhalfstave->Fill(tr[0]);
187 hySPDhalfstave->Fill(tr[1]);
188 hzSPDhalfstave->Fill(tr[2]);
189 hrxSPDhalfstave->Fill(rot[0]);
190 hrySPDhalfstave->Fill(rot[1]);
191 hrzSPDhalfstave->Fill(rot[2]);
193 if(symName.Contains("SPD") && symName.Contains("Sector") && symName.Contains("HalfStave") && symName.Contains("Ladder")) {
194 hxSPDladder->Fill(tr[0]);
195 hySPDladder->Fill(tr[1]);
196 hzSPDladder->Fill(tr[2]);
197 hrxSPDladder->Fill(rot[0]);
198 hrySPDladder->Fill(rot[1]);
199 hrzSPDladder->Fill(rot[2]);
201 if(symName.Contains("SDD") && symName.Contains("Ladder") && !symName.Contains("Sensor")) {
202 hxSDDladder->Fill(tr[0]);
203 hySDDladder->Fill(tr[1]);
204 hzSDDladder->Fill(tr[2]);
205 hrxSDDladder->Fill(rot[0]);
206 hrySDDladder->Fill(rot[1]);
207 hrzSDDladder->Fill(rot[2]);
209 if(symName.Contains("SDD") && symName.Contains("Ladder") && symName.Contains("Sensor")) {
210 hxSDDsensor->Fill(tr[0]);
211 hySDDsensor->Fill(tr[1]);
212 hzSDDsensor->Fill(tr[2]);
213 hrxSDDsensor->Fill(rot[0]);
214 hrySDDsensor->Fill(rot[1]);
215 hrzSDDsensor->Fill(rot[2]);
217 if(symName.Contains("SSD") && symName.Contains("Ladder") && !symName.Contains("Sensor")) {
218 hxSSDladder->Fill(tr[0]);
219 hySSDladder->Fill(tr[1]);
220 hzSSDladder->Fill(tr[2]);
221 hrxSSDladder->Fill(rot[0]);
222 hrySSDladder->Fill(rot[1]);
223 hrzSSDladder->Fill(rot[2]);
225 if(symName.Contains("SSD") && symName.Contains("Ladder") && symName.Contains("Sensor")) {
226 hxSSDsensor->Fill(tr[0]);
227 hySSDsensor->Fill(tr[1]);
228 hzSSDsensor->Fill(tr[2]);
229 hrxSSDsensor->Fill(rot[0]);
230 hrySSDsensor->Fill(rot[1]);
231 hrzSSDsensor->Fill(rot[2]);
245 hrxSPDsector->Draw();
247 hrySPDsector->Draw();
249 hrzSPDsector->Draw();
251 cSPDhalfstave->cd(1);
252 hxSPDhalfstave->Draw();
253 cSPDhalfstave->cd(2);
254 hySPDhalfstave->Draw();
255 cSPDhalfstave->cd(3);
256 hzSPDhalfstave->Draw();
257 cSPDhalfstave->cd(4);
258 hrxSPDhalfstave->Draw();
259 cSPDhalfstave->cd(5);
260 hrySPDhalfstave->Draw();
261 cSPDhalfstave->cd(6);
262 hrzSPDhalfstave->Draw();
271 hrxSPDladder->Draw();
273 hrySPDladder->Draw();
275 hrzSPDladder->Draw();
285 hrxSDDladder->Draw();
287 hrySDDladder->Draw();
289 hrzSDDladder->Draw();
298 hrxSDDsensor->Draw();
300 hrySDDsensor->Draw();
302 hrzSDDsensor->Draw();
311 hrxSSDladder->Draw();
313 hrySSDladder->Draw();
315 hrzSSDladder->Draw();
324 hrxSSDsensor->Draw();
326 hrySSDsensor->Draw();
328 hrzSSDsensor->Draw();
331 TFile fout(filenameOut,"RECREATE");
333 fout.WriteObject(arrayOut,"ITSAlignObjs","kSingleKey");