Creation of AliAlignObjParam with equivalent transformation for sensitive volumes
[u/mrichter/AliRoot.git] / ITS / DrawITSAlignObj.C
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TCanvas.h>
3 #include <TClonesArray.h>
4 #include <TFile.h>
5 #include <TGeoManager.h>
6 #include <TH1F.h>
7 #include <TString.h>
8 #include <Riostream.h>
9 #include "AliAlignObj.h"
10 #endif
11 void DrawITSAlignObj(const char* filename="ITSfullMisalignment.root",
12                      const char* filenameOut="ITSfullModuleMisalignment.root",
13                      Bool_t local=kFALSE) {
14   //
15   // Draw distribution of alignment constants
16   // (original version: A.Jacholkowski; modified by: A.Dainese)
17   //
18
19 /* $Id$ */
20
21   AliGeomManager::LoadGeometry("geometry.root");
22
23   TFile* f = TFile::Open(filename);
24   if(!f) {cerr<<"cannot open input file\n"; return;}
25
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]");
40
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]");
55
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]");
70
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]");
85
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]");
100
101
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]");
116
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]");
131
132
133
134   TClonesArray* ar = (TClonesArray*)f->Get("ITSAlignObjs");
135   Int_t entries = ar->GetEntriesFast();
136   cout<<"number of alignment objects: "<<entries<<endl;
137   Bool_t overlaps;
138   AliGeomManager::ApplyAlignObjsToGeom(*ar,overlaps);
139
140   AliAlignObj* a;
141   Option_t *opt = NULL;
142   Double_t tr[3];
143   Double_t rot[3];
144   TGeoHMatrix delta;
145
146
147   TClonesArray *arrayOut = new TClonesArray("AliAlignObjParams",4000);
148   TClonesArray &alobjOut = *arrayOut;
149   Int_t j=0;
150
151   for(Int_t i=0; i<entries; i++){
152     a=(AliAlignObj*)ar->UncheckedAt(i);
153     if(local) {
154       a->GetLocalPars(tr,rot);
155     } else {
156       a->GetPars(tr,rot);
157     }
158     TString symName = a->GetSymName();
159     UShort_t volUID = a->GetVolUID();
160     printf("VolId %d    %s\n",volUID,symName.Data());
161
162     AliGeomManager::GetDeltaForBranch(*a,delta);
163     //delta.Print();
164
165     // create AliAlignObjParam with total delta
166     if(i==0 || volUID!=0) {
167       new(alobjOut[j]) AliAlignObjParams(symName.Data(),volUID,delta,kTRUE);
168       j++;
169     }
170
171
172     // plots
173     //
174     if(!symName.Contains("SPD") && !symName.Contains("SDD") && !symName.Contains("SSD")) {
175       a->Print(opt);
176     }
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]);
184     }
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]);
192     }
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]);
200     }
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]);
208     }
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]);
216     }
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]);
224     }
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]);
232     }
233
234
235   }
236
237
238   cSPDsector->cd(1);
239   hxSPDsector->Draw();
240   cSPDsector->cd(2);
241   hySPDsector->Draw();
242   cSPDsector->cd(3);
243   hzSPDsector->Draw();
244   cSPDsector->cd(4);
245   hrxSPDsector->Draw();
246   cSPDsector->cd(5);
247   hrySPDsector->Draw();
248   cSPDsector->cd(6);
249   hrzSPDsector->Draw();
250
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();
263
264   cSPDladder->cd(1);
265   hxSPDladder->Draw();
266   cSPDladder->cd(2);
267   hySPDladder->Draw();
268   cSPDladder->cd(3);
269   hzSPDladder->Draw();
270   cSPDladder->cd(4);
271   hrxSPDladder->Draw();
272   cSPDladder->cd(5);
273   hrySPDladder->Draw();
274   cSPDladder->cd(6);
275   hrzSPDladder->Draw();
276
277
278   cSDDladder->cd(1);
279   hxSDDladder->Draw();
280   cSDDladder->cd(2);
281   hySDDladder->Draw();
282   cSDDladder->cd(3);
283   hzSDDladder->Draw();
284   cSDDladder->cd(4);
285   hrxSDDladder->Draw();
286   cSDDladder->cd(5);
287   hrySDDladder->Draw();
288   cSDDladder->cd(6);
289   hrzSDDladder->Draw();
290  
291   cSDDsensor->cd(1);
292   hxSDDsensor->Draw();
293   cSDDsensor->cd(2);
294   hySDDsensor->Draw();
295   cSDDsensor->cd(3);
296   hzSDDsensor->Draw();
297   cSDDsensor->cd(4);
298   hrxSDDsensor->Draw();
299   cSDDsensor->cd(5);
300   hrySDDsensor->Draw();
301   cSDDsensor->cd(6);
302   hrzSDDsensor->Draw();
303
304   cSSDladder->cd(1);
305   hxSSDladder->Draw();
306   cSSDladder->cd(2);
307   hySSDladder->Draw();
308   cSSDladder->cd(3);
309   hzSSDladder->Draw();
310   cSSDladder->cd(4);
311   hrxSSDladder->Draw();
312   cSSDladder->cd(5);
313   hrySSDladder->Draw();
314   cSSDladder->cd(6);
315   hrzSSDladder->Draw();
316  
317   cSSDsensor->cd(1);
318   hxSSDsensor->Draw();
319   cSSDsensor->cd(2);
320   hySSDsensor->Draw();
321   cSSDsensor->cd(3);
322   hzSSDsensor->Draw();
323   cSSDsensor->cd(4);
324   hrxSSDsensor->Draw();
325   cSSDsensor->cd(5);
326   hrySSDsensor->Draw();
327   cSSDsensor->cd(6);
328   hrzSSDsensor->Draw();
329
330
331   TFile fout(filenameOut,"RECREATE");
332   fout.cd();
333   fout.WriteObject(arrayOut,"ITSAlignObjs","kSingleKey");
334   fout.Close();
335   
336   return;
337 }