Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 : * *
4 : * Author: The ALICE Off-line Project. *
5 : * Contributors are mentioned in the code where appropriate. *
6 : * *
7 : * Permission to use, copy, modify and distribute this software and its *
8 : * documentation strictly for non-commercial purposes is hereby granted *
9 : * without fee, provided that the above copyright notice appears in all *
10 : * copies and that both the copyright notice and this permission notice *
11 : * appear in the supporting documentation. The authors make no claims *
12 : * about the suitability of this software for any purpose. It is *
13 : * provided "as is" without express or implied warranty. *
14 : **************************************************************************/
15 :
16 : /* $Id: AliTRDgtuParam.cxx 28397 2008-09-02 09:33:00Z cblume $ */
17 :
18 : ////////////////////////////////////////////////////////////////////////////
19 : // //
20 : // Parameters for GTU simulation //
21 : // //
22 : // Author: J. Klein (Jochen.Klein@cern.ch) //
23 : // //
24 : ////////////////////////////////////////////////////////////////////////////
25 :
26 : #include <limits>
27 :
28 : #include "TROOT.h"
29 : #include "TMath.h"
30 : #include "TMatrix.h"
31 : #include "TDecompLU.h"
32 : #include "TGraphAsymmErrors.h"
33 : #include "TCanvas.h"
34 :
35 : #include "AliLog.h"
36 : #include "AliTRDgtuParam.h"
37 : #include "AliTRDgeometry.h"
38 : #include "AliTRDpadPlane.h"
39 :
40 48 : ClassImp(AliTRDgtuParam)
41 :
42 : Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE;
43 : Bool_t AliTRDgtuParam::fgUseGTUmerge = kTRUE;
44 : Bool_t AliTRDgtuParam::fgLimitNoTracklets = kTRUE;
45 : Int_t AliTRDgtuParam::fgMaxNoTracklets = 62;
46 :
47 : // ----- matching windows -----
48 : Int_t AliTRDgtuParam::fgDeltaY = 19;
49 : Int_t AliTRDgtuParam::fgDeltaAlpha = 21;
50 : // ----- reference layers -----
51 : Int_t AliTRDgtuParam::fgRefLayers[] = { 3, 2, 1 };
52 :
53 : // ----- Bin widths (granularity) -----
54 : const Float_t AliTRDgtuParam::fgkBinWidthY = 160e-4;
55 : const Float_t AliTRDgtuParam::fgkBinWidthdY = 140e-4;
56 :
57 : // ----- Bit widths (used for internal representation) -----
58 : const Int_t AliTRDgtuParam::fgkBitWidthY = 13;
59 : const Int_t AliTRDgtuParam::fgkBitWidthdY = 7;
60 : const Int_t AliTRDgtuParam::fgkBitWidthYProj = 10;
61 : const Int_t AliTRDgtuParam::fgkBitExcessY = 4;
62 : const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10;
63 : const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2;
64 :
65 : // pt higher than the one for smallest possible a != 0
66 : const Int_t AliTRDgtuParam::fgkPtInfinity = std::numeric_limits<Int_t>::max();
67 :
68 : // ---- conversion rejection via sagitta method -----
69 : Float_t AliTRDgtuParam::fgInvPtDevCut = .262144;
70 : Float_t AliTRDgtuParam::fgLayerInvXpos[6] = {0.0033335557, 0.00319918101, 0.003075219878, 0.002960506839, 0.002854044181, 0.002754972726};
71 : Float_t AliTRDgtuParam::fgLayerXpos[6] = {299.98 , 312.58 , 325.18 , 337.78 , 350.38 , 362.98};
72 : Int_t AliTRDgtuParam::fgShiftLengthNorm = 1e6;
73 : Int_t AliTRDgtuParam::fgCorrectionMode = 0;
74 : Bool_t AliTRDgtuParam::fgWriteSagittaOutputToTrackWordBC = kFALSE;
75 :
76 : // ----- geometry constants used in GTU -----
77 : const Bool_t AliTRDgtuParam::fgZChannelMap[5][16][6][16] = {
78 :
79 : { /* --- Stack 0 --- */
80 :
81 : /* . x x . . . . . . . . . . . . . */
82 : /* x . . . . . . . . . . . . . . . */
83 : /* X . . . . . . . . . . . . . . . */
84 : /* x x . . . . . . . . . . . . . . */
85 : /* x x . . . . . . . . . . . . . . */
86 : /* x . . . . . . . . . . . . . . . */
87 :
88 : {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
89 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
90 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
91 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
92 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
93 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
94 :
95 : /* . . x x . . . . . . . . . . . . */
96 : /* x x . . . . . . . . . . . . . . */
97 : /* . X . . . . . . . . . . . . . . */
98 : /* . x x . . . . . . . . . . . . . */
99 : /* . x x . . . . . . . . . . . . . */
100 : /* x x . . . . . . . . . . . . . . */
101 :
102 : {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
103 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
104 : {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
105 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
106 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
107 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
108 :
109 : /* . . . x x . . . . . . . . . . . */
110 : /* . x x . . . . . . . . . . . . . */
111 : /* . . X . . . . . . . . . . . . . */
112 : /* . . x x . . . . . . . . . . . . */
113 : /* . . x x . . . . . . . . . . . . */
114 : /* . x x . . . . . . . . . . . . . */
115 :
116 : {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
117 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
118 : {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
119 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
120 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
121 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
122 :
123 : /* . . . . x x . . . . . . . . . . */
124 : /* . . x x . . . . . . . . . . . . */
125 : /* . . . X . . . . . . . . . . . . */
126 : /* . . . x x . . . . . . . . . . . */
127 : /* . . . x x . . . . . . . . . . . */
128 : /* . . x x . . . . . . . . . . . . */
129 :
130 : {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
131 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
132 : {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
133 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
134 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
135 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
136 :
137 : /* . . . . . x x . . . . . . . . . */
138 : /* . . . x x . . . . . . . . . . . */
139 : /* . . . . X . . . . . . . . . . . */
140 : /* . . . . x x . . . . . . . . . . */
141 : /* . . . . x x . . . . . . . . . . */
142 : /* . . . x x . . . . . . . . . . . */
143 :
144 : {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
145 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
146 : {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
147 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
148 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
149 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
150 :
151 : /* . . . . . . x x . . . . . . . . */
152 : /* . . . . x x . . . . . . . . . . */
153 : /* . . . . . X . . . . . . . . . . */
154 : /* . . . . . x x . . . . . . . . . */
155 : /* . . . . . x x . . . . . . . . . */
156 : /* . . . . x x . . . . . . . . . . */
157 :
158 : {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
159 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
160 : {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
161 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
162 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
163 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
164 :
165 : /* . . . . . . . x x . . . . . . . */
166 : /* . . . . . x x . . . . . . . . . */
167 : /* . . . . . . X . . . . . . . . . */
168 : /* . . . . . . x x . . . . . . . . */
169 : /* . . . . . . x x . . . . . . . . */
170 : /* . . . . . x x . . . . . . . . . */
171 :
172 : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
173 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
174 : {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
175 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
176 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
177 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
178 :
179 : /* . . . . . . . . x x . . . . . . */
180 : /* . . . . . . x x x . . . . . . . */
181 : /* . . . . . . . X . . . . . . . . */
182 : /* . . . . . . . x x . . . . . . . */
183 : /* . . . . . . . x x . . . . . . . */
184 : /* . . . . . . x x . . . . . . . . */
185 :
186 : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
187 : {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
188 : {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
189 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
190 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
191 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
192 :
193 : /* . . . . . . . . x x x . . . . . */
194 : /* . . . . . . . x x x . . . . . . */
195 : /* . . . . . . . . X . . . . . . . */
196 : /* . . . . . . . x x x . . . . . . */
197 : /* . . . . . . . x x x . . . . . . */
198 : /* . . . . . . . x x . . . . . . . */
199 :
200 : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
201 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
202 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
203 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
204 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
205 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
206 :
207 : /* . . . . . . . . . x x x . . . . */
208 : /* . . . . . . . . x x x . . . . . */
209 : /* . . . . . . . . . X . . . . . . */
210 : /* . . . . . . . . x x x . . . . . */
211 : /* . . . . . . . . x x x . . . . . */
212 : /* . . . . . . . . x x . . . . . . */
213 :
214 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
215 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
216 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
217 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
218 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
219 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
220 :
221 : /* . . . . . . . . . . x x x . . . */
222 : /* . . . . . . . . . x x x . . . . */
223 : /* . . . . . . . . . . X . . . . . */
224 : /* . . . . . . . . . x x x . . . . */
225 : /* . . . . . . . . . x x x . . . . */
226 : /* . . . . . . . . . x x . . . . . */
227 :
228 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
229 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
230 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
231 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
232 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
233 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
234 :
235 : /* . . . . . . . . . . . x x x . . */
236 : /* . . . . . . . . . . x x x . . . */
237 : /* . . . . . . . . . . . X . . . . */
238 : /* . . . . . . . . . . x x x . . . */
239 : /* . . . . . . . . . . x x x . . . */
240 : /* . . . . . . . . . . x x . . . . */
241 :
242 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
243 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
244 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
245 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
246 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
247 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
248 :
249 : /* . . . . . . . . . . . . x x x . */
250 : /* . . . . . . . . . . . x x x . . */
251 : /* . . . . . . . . . . . . X . . . */
252 : /* . . . . . . . . . . . x x x . . */
253 : /* . . . . . . . . . . . x x x . . */
254 : /* . . . . . . . . . . . x x . . . */
255 :
256 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
257 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
258 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
259 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
260 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
261 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
262 :
263 : /* . . . . . . . . . . . . . x x x */
264 : /* . . . . . . . . . . . . x x x . */
265 : /* . . . . . . . . . . . . . X . . */
266 : /* . . . . . . . . . . . . x x x . */
267 : /* . . . . . . . . . . . . x x x . */
268 : /* . . . . . . . . . . . . x x . . */
269 :
270 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
271 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
272 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
273 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
274 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
275 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
276 :
277 : /* . . . . . . . . . . . . . . x x */
278 : /* . . . . . . . . . . . . . x x x */
279 : /* . . . . . . . . . . . . . . X . */
280 : /* . . . . . . . . . . . . . x x x */
281 : /* . . . . . . . . . . . . . x x x */
282 : /* . . . . . . . . . . . . . x x . */
283 :
284 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
285 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
286 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
287 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
288 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
289 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
290 :
291 : /* . . . . . . . . . . . . . . . x */
292 : /* . . . . . . . . . . . . . . x x */
293 : /* . . . . . . . . . . . . . . . X */
294 : /* . . . . . . . . . . . . . . x x */
295 : /* . . . . . . . . . . . . . . x x */
296 : /* . . . . . . . . . . . . . . x x */
297 :
298 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
299 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
300 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
301 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
302 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
303 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
304 :
305 : { /* --- Stack 1 --- */
306 :
307 : /* x x x . . . . . . . . . . . . . */
308 : /* x x . . . . . . . . . . . . . . */
309 : /* X . . . . . . . . . . . . . . . */
310 : /* x x . . . . . . . . . . . . . . */
311 : /* x x . . . . . . . . . . . . . . */
312 : /* x . . . . . . . . . . . . . . . */
313 :
314 : {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
315 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
316 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
317 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
318 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
319 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
320 :
321 : /* . x x x . . . . . . . . . . . . */
322 : /* x x x . . . . . . . . . . . . . */
323 : /* . X . . . . . . . . . . . . . . */
324 : /* x x x . . . . . . . . . . . . . */
325 : /* x x x . . . . . . . . . . . . . */
326 : /* x x . . . . . . . . . . . . . . */
327 :
328 : {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
329 : {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
330 : {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
331 : {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
332 : {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
333 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
334 :
335 : /* . . x x x . . . . . . . . . . . */
336 : /* . x x x . . . . . . . . . . . . */
337 : /* . . X . . . . . . . . . . . . . */
338 : /* . x x x . . . . . . . . . . . . */
339 : /* . x x x . . . . . . . . . . . . */
340 : /* . x x . . . . . . . . . . . . . */
341 :
342 : {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
343 : {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
344 : {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
345 : {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
346 : {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
347 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
348 :
349 : /* . . . x x x . . . . . . . . . . */
350 : /* . . x x x . . . . . . . . . . . */
351 : /* . . . X . . . . . . . . . . . . */
352 : /* . . x x x . . . . . . . . . . . */
353 : /* . . x x x . . . . . . . . . . . */
354 : /* . . x x . . . . . . . . . . . . */
355 :
356 : {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
357 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
358 : {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
359 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
360 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
361 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
362 :
363 : /* . . . . x x x . . . . . . . . . */
364 : /* . . . x x x . . . . . . . . . . */
365 : /* . . . . X . . . . . . . . . . . */
366 : /* . . . x x x . . . . . . . . . . */
367 : /* . . . x x x . . . . . . . . . . */
368 : /* . . . x x . . . . . . . . . . . */
369 :
370 : {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
371 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
372 : {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
373 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
374 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
375 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
376 :
377 : /* . . . . . x x x . . . . . . . . */
378 : /* . . . . x x x . . . . . . . . . */
379 : /* . . . . . X . . . . . . . . . . */
380 : /* . . . . x x . . . . . . . . . . */
381 : /* . . . . x x . . . . . . . . . . */
382 : /* . . . . x x . . . . . . . . . . */
383 :
384 : {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
385 : {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
386 : {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
387 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
388 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
389 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
390 :
391 : /* . . . . . . x x x . . . . . . . */
392 : /* . . . . . . x x . . . . . . . . */
393 : /* . . . . . . X . . . . . . . . . */
394 : /* . . . . . x x . . . . . . . . . */
395 : /* . . . . . x x . . . . . . . . . */
396 : /* . . . . . x x . . . . . . . . . */
397 :
398 : {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
399 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
400 : {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
401 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
402 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
403 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
404 :
405 : /* . . . . . . . x x . . . . . . . */
406 : /* . . . . . . . x x . . . . . . . */
407 : /* . . . . . . . X . . . . . . . . */
408 : /* . . . . . . x x . . . . . . . . */
409 : /* . . . . . . x x . . . . . . . . */
410 : /* . . . . . . x x . . . . . . . . */
411 :
412 : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
413 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
414 : {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
415 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
416 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
417 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
418 :
419 : /* . . . . . . . . x x . . . . . . */
420 : /* . . . . . . . . x x . . . . . . */
421 : /* . . . . . . . . X . . . . . . . */
422 : /* . . . . . . . x x . . . . . . . */
423 : /* . . . . . . . x x . . . . . . . */
424 : /* . . . . . . . x x . . . . . . . */
425 :
426 : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
427 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
428 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
429 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
430 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
431 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
432 :
433 : /* . . . . . . . . . x x . . . . . */
434 : /* . . . . . . . . . x x . . . . . */
435 : /* . . . . . . . . . X . . . . . . */
436 : /* . . . . . . . . x x . . . . . . */
437 : /* . . . . . . . . x x . . . . . . */
438 : /* . . . . . . . . x x . . . . . . */
439 :
440 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
441 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
442 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
443 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
444 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
445 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
446 :
447 : /* . . . . . . . . . . x x . . . . */
448 : /* . . . . . . . . . . x x . . . . */
449 : /* . . . . . . . . . . X . . . . . */
450 : /* . . . . . . . . . x x . . . . . */
451 : /* . . . . . . . . . x x . . . . . */
452 : /* . . . . . . . . . x x . . . . . */
453 :
454 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
455 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
456 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
457 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
458 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
459 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
460 :
461 : /* . . . . . . . . . . . x x . . . */
462 : /* . . . . . . . . . . . x x . . . */
463 : /* . . . . . . . . . . . X . . . . */
464 : /* . . . . . . . . . . x x . . . . */
465 : /* . . . . . . . . . . x x . . . . */
466 : /* . . . . . . . . . . x x . . . . */
467 :
468 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
469 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
470 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
471 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
472 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
473 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
474 :
475 : /* . . . . . . . . . . . . x x . . */
476 : /* . . . . . . . . . . . . x x . . */
477 : /* . . . . . . . . . . . . X . . . */
478 : /* . . . . . . . . . . . x x . . . */
479 : /* . . . . . . . . . . . x x . . . */
480 : /* . . . . . . . . . . . x x . . . */
481 :
482 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
483 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
484 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
485 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
486 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
487 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
488 :
489 : /* . . . . . . . . . . . . . x x . */
490 : /* . . . . . . . . . . . . . x x . */
491 : /* . . . . . . . . . . . . . X . . */
492 : /* . . . . . . . . . . . . x x . . */
493 : /* . . . . . . . . . . . . x x . . */
494 : /* . . . . . . . . . . . . x x . . */
495 :
496 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
497 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
498 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
499 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
500 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
501 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
502 :
503 : /* . . . . . . . . . . . . . . x x */
504 : /* . . . . . . . . . . . . . . x x */
505 : /* . . . . . . . . . . . . . . X . */
506 : /* . . . . . . . . . . . . . x x . */
507 : /* . . . . . . . . . . . . . x x . */
508 : /* . . . . . . . . . . . . . x x . */
509 :
510 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
511 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
512 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
513 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
514 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
515 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
516 :
517 : /* . . . . . . . . . . . . . . . x */
518 : /* . . . . . . . . . . . . . . . x */
519 : /* . . . . . . . . . . . . . . . X */
520 : /* . . . . . . . . . . . . . . x x */
521 : /* . . . . . . . . . . . . . . x x */
522 : /* . . . . . . . . . . . . . . x x */
523 :
524 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
525 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
526 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
527 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
528 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
529 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
530 :
531 : { /* --- Stack 2 --- */
532 :
533 : /* x x . . . . . . . . . . */
534 : /* x x . . . . . . . . . . */
535 : /* X . . . . . . . . . . . */
536 : /* x . . . . . . . . . . . */
537 : /* x . . . . . . . . . . . */
538 : /* x . . . . . . . . . . . */
539 :
540 : {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
541 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
542 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
543 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
544 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
545 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
546 :
547 : /* . x x . . . . . . . . . */
548 : /* . x x . . . . . . . . . */
549 : /* . X . . . . . . . . . . */
550 : /* x x . . . . . . . . . . */
551 : /* x x . . . . . . . . . . */
552 : /* x x . . . . . . . . . . */
553 :
554 : {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
555 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
556 : {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
557 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
558 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
559 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
560 :
561 : /* . . x x . . . . . . . . */
562 : /* . . x x . . . . . . . . */
563 : /* . . X . . . . . . . . . */
564 : /* . x x . . . . . . . . . */
565 : /* . x x . . . . . . . . . */
566 : /* . x x . . . . . . . . . */
567 :
568 : {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
569 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
570 : {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
571 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
572 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
573 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
574 :
575 : /* . . . x x . . . . . . . */
576 : /* . . . x x . . . . . . . */
577 : /* . . . X . . . . . . . . */
578 : /* . . x x x . . . . . . . */
579 : /* . . x x x . . . . . . . */
580 : /* . . x x x . . . . . . . */
581 :
582 : {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
583 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
584 : {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
585 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
586 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
587 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
588 :
589 : /* . . . x x x . . . . . . */
590 : /* . . . x x x . . . . . . */
591 : /* . . . . X . . . . . . . */
592 : /* . . . x x x . . . . . . */
593 : /* . . . x x x . . . . . . */
594 : /* . . . x x x . . . . . . */
595 :
596 : {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
597 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
598 : {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
599 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
600 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
601 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
602 :
603 : /* . . . . x x x . . . . . */
604 : /* . . . . x x x . . . . . */
605 : /* . . . . . X . . . . . . */
606 : /* . . . . x x x . . . . . */
607 : /* . . . . x x x . . . . . */
608 : /* . . . . x x x . . . . . */
609 :
610 : {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
611 : {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
612 : {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
613 : {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
614 : {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
615 : {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
616 :
617 : /* . . . . . x x x . . . . */
618 : /* . . . . . x x x . . . . */
619 : /* . . . . . . X . . . . . */
620 : /* . . . . . x x x . . . . */
621 : /* . . . . . x x x . . . . */
622 : /* . . . . . x x x . . . . */
623 :
624 : {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
625 : {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
626 : {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
627 : {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
628 : {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
629 : {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
630 :
631 : /* . . . . . . x x x . . . */
632 : /* . . . . . . x x x . . . */
633 : /* . . . . . . . X . . . . */
634 : /* . . . . . . x x x . . . */
635 : /* . . . . . . x x x . . . */
636 : /* . . . . . . x x x . . . */
637 :
638 : {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
639 : {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
640 : {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
641 : {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
642 : {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
643 : {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
644 :
645 : /* . . . . . . . x x . . . */
646 : /* . . . . . . . x x . . . */
647 : /* . . . . . . . . X . . . */
648 : /* . . . . . . . x x x . . */
649 : /* . . . . . . . x x x . . */
650 : /* . . . . . . . x x x . . */
651 :
652 : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
653 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
654 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
655 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
656 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
657 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}},
658 :
659 : /* . . . . . . . . x x . . */
660 : /* . . . . . . . . x x . . */
661 : /* . . . . . . . . . X . . */
662 : /* . . . . . . . . . x x . */
663 : /* . . . . . . . . . x x . */
664 : /* . . . . . . . . . x x . */
665 :
666 : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
667 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
668 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
669 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
670 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
671 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
672 :
673 : /* . . . . . . . . . x x . */
674 : /* . . . . . . . . . x x . */
675 : /* . . . . . . . . . . X . */
676 : /* . . . . . . . . . . x x */
677 : /* . . . . . . . . . . x x */
678 : /* . . . . . . . . . . x x */
679 :
680 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
681 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
682 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
683 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
684 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
685 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
686 :
687 : /* . . . . . . . . . . x x */
688 : /* . . . . . . . . . . x x */
689 : /* . . . . . . . . . . . X */
690 : /* . . . . . . . . . . . x */
691 : /* . . . . . . . . . . . x */
692 : /* . . . . . . . . . . . x */
693 :
694 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
695 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
696 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
697 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
698 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
699 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
700 :
701 : /* . . . . . . . . . . . . */
702 : /* . . . . . . . . . . . . */
703 : /* . . . . . . . . . . . . */
704 : /* . . . . . . . . . . . . */
705 : /* . . . . . . . . . . . . */
706 : /* . . . . . . . . . . . . */
707 :
708 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
709 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
710 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
711 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
712 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
713 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
714 :
715 : /* . . . . . . . . . . . . */
716 : /* . . . . . . . . . . . . */
717 : /* . . . . . . . . . . . . */
718 : /* . . . . . . . . . . . . */
719 : /* . . . . . . . . . . . . */
720 : /* . . . . . . . . . . . . */
721 :
722 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
723 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
724 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
725 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
726 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
727 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
728 :
729 : /* . . . . . . . . . . . . */
730 : /* . . . . . . . . . . . . */
731 : /* . . . . . . . . . . . . */
732 : /* . . . . . . . . . . . . */
733 : /* . . . . . . . . . . . . */
734 : /* . . . . . . . . . . . . */
735 :
736 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
737 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
738 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
739 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
740 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
741 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
742 :
743 : /* . . . . . . . . . . . . */
744 : /* . . . . . . . . . . . . */
745 : /* . . . . . . . . . . . . */
746 : /* . . . . . . . . . . . . */
747 : /* . . . . . . . . . . . . */
748 : /* . . . . . . . . . . . . */
749 :
750 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
751 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
752 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
753 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
754 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
755 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}},
756 :
757 : { /* --- Stack 3 --- */
758 :
759 : /* x . . . . . . . . . . . . . . . */
760 : /* x . . . . . . . . . . . . . . . */
761 : /* X . . . . . . . . . . . . . . . */
762 : /* x x . . . . . . . . . . . . . . */
763 : /* x x . . . . . . . . . . . . . . */
764 : /* x x . . . . . . . . . . . . . . */
765 :
766 : {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
767 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
768 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
769 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
770 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
771 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
772 :
773 : /* x x . . . . . . . . . . . . . . */
774 : /* x x . . . . . . . . . . . . . . */
775 : /* . X . . . . . . . . . . . . . . */
776 : /* . x x . . . . . . . . . . . . . */
777 : /* . x x . . . . . . . . . . . . . */
778 : /* . x x . . . . . . . . . . . . . */
779 :
780 : {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
781 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
782 : {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
783 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
784 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
785 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
786 :
787 : /* . x x . . . . . . . . . . . . . */
788 : /* . x x . . . . . . . . . . . . . */
789 : /* . . X . . . . . . . . . . . . . */
790 : /* . . x x . . . . . . . . . . . . */
791 : /* . . x x . . . . . . . . . . . . */
792 : /* . . x x . . . . . . . . . . . . */
793 :
794 : {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
795 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
796 : {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
797 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
798 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
799 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
800 :
801 : /* . . x x . . . . . . . . . . . . */
802 : /* . . x x . . . . . . . . . . . . */
803 : /* . . . X . . . . . . . . . . . . */
804 : /* . . . x x . . . . . . . . . . . */
805 : /* . . . x x . . . . . . . . . . . */
806 : /* . . . x x . . . . . . . . . . . */
807 :
808 : {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
809 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
810 : {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
811 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
812 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
813 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
814 :
815 : /* . . . x x . . . . . . . . . . . */
816 : /* . . . x x . . . . . . . . . . . */
817 : /* . . . . X . . . . . . . . . . . */
818 : /* . . . . x x . . . . . . . . . . */
819 : /* . . . . x x . . . . . . . . . . */
820 : /* . . . . x x . . . . . . . . . . */
821 :
822 : {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
823 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
824 : {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
825 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
826 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
827 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
828 :
829 : /* . . . . x x . . . . . . . . . . */
830 : /* . . . . x x . . . . . . . . . . */
831 : /* . . . . . X . . . . . . . . . . */
832 : /* . . . . . x x . . . . . . . . . */
833 : /* . . . . . x x . . . . . . . . . */
834 : /* . . . . . x x . . . . . . . . . */
835 :
836 : {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
837 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
838 : {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
839 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
840 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
841 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
842 :
843 : /* . . . . . x x . . . . . . . . . */
844 : /* . . . . . x x . . . . . . . . . */
845 : /* . . . . . . X . . . . . . . . . */
846 : /* . . . . . . x x . . . . . . . . */
847 : /* . . . . . . x x . . . . . . . . */
848 : /* . . . . . . x x . . . . . . . . */
849 :
850 : {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
851 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
852 : {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
853 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
854 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
855 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
856 :
857 : /* . . . . . . x x . . . . . . . . */
858 : /* . . . . . . x x . . . . . . . . */
859 : /* . . . . . . . X . . . . . . . . */
860 : /* . . . . . . . x x . . . . . . . */
861 : /* . . . . . . . x x . . . . . . . */
862 : /* . . . . . . . x x . . . . . . . */
863 :
864 : {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
865 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
866 : {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
867 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
868 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
869 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
870 :
871 : /* . . . . . . . x x . . . . . . . */
872 : /* . . . . . . . x x . . . . . . . */
873 : /* . . . . . . . . X . . . . . . . */
874 : /* . . . . . . . . x x . . . . . . */
875 : /* . . . . . . . . x x . . . . . . */
876 : /* . . . . . . . . x x . . . . . . */
877 :
878 : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
879 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
880 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
881 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
882 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
883 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
884 :
885 : /* . . . . . . . x x x . . . . . . */
886 : /* . . . . . . . . x x . . . . . . */
887 : /* . . . . . . . . . X . . . . . . */
888 : /* . . . . . . . . . x x . . . . . */
889 : /* . . . . . . . . . x x . . . . . */
890 : /* . . . . . . . . . x x . . . . . */
891 :
892 : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
893 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
894 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
895 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
896 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
897 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
898 :
899 : /* . . . . . . . . x x x . . . . . */
900 : /* . . . . . . . . . x x x . . . . */
901 : /* . . . . . . . . . . X . . . . . */
902 : /* . . . . . . . . . . x x . . . . */
903 : /* . . . . . . . . . . x x . . . . */
904 : /* . . . . . . . . . . x x . . . . */
905 :
906 : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
907 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
908 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
909 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
910 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
911 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
912 :
913 : /* . . . . . . . . . x x x . . . . */
914 : /* . . . . . . . . . . x x x . . . */
915 : /* . . . . . . . . . . . X . . . . */
916 : /* . . . . . . . . . . x x x . . . */
917 : /* . . . . . . . . . . x x x . . . */
918 : /* . . . . . . . . . . . x x . . . */
919 :
920 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
921 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
922 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
923 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
924 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
925 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
926 :
927 : /* . . . . . . . . . . x x x . . . */
928 : /* . . . . . . . . . . . x x x . . */
929 : /* . . . . . . . . . . . . X . . . */
930 : /* . . . . . . . . . . . x x x . . */
931 : /* . . . . . . . . . . . x x x . . */
932 : /* . . . . . . . . . . . . x x . . */
933 :
934 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
935 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
936 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
937 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
938 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
939 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
940 :
941 : /* . . . . . . . . . . . x x x . . */
942 : /* . . . . . . . . . . . . x x x . */
943 : /* . . . . . . . . . . . . . X . . */
944 : /* . . . . . . . . . . . . x x x . */
945 : /* . . . . . . . . . . . . x x x . */
946 : /* . . . . . . . . . . . . . x x . */
947 :
948 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
949 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
950 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
951 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
952 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
953 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
954 :
955 : /* . . . . . . . . . . . . x x x . */
956 : /* . . . . . . . . . . . . . x x x */
957 : /* . . . . . . . . . . . . . . X . */
958 : /* . . . . . . . . . . . . . x x x */
959 : /* . . . . . . . . . . . . . x x x */
960 : /* . . . . . . . . . . . . . . x x */
961 :
962 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
963 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
964 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
965 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
966 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
967 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
968 :
969 : /* . . . . . . . . . . . . . x x x */
970 : /* . . . . . . . . . . . . . . x x */
971 : /* . . . . . . . . . . . . . . . X */
972 : /* . . . . . . . . . . . . . . x x */
973 : /* . . . . . . . . . . . . . . x x */
974 : /* . . . . . . . . . . . . . . . x */
975 :
976 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
977 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
978 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
979 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
980 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
981 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}},
982 :
983 : { /* --- Stack 4 --- */
984 :
985 : /* x . . . . . . . . . . . . . . . */
986 : /* x x . . . . . . . . . . . . . . */
987 : /* X . . . . . . . . . . . . . . . */
988 : /* x x . . . . . . . . . . . . . . */
989 : /* x x . . . . . . . . . . . . . . */
990 : /* x x . . . . . . . . . . . . . . */
991 :
992 : {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
993 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
994 : {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
995 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
996 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
997 : {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
998 :
999 : /* x x . . . . . . . . . . . . . . */
1000 : /* x x x . . . . . . . . . . . . . */
1001 : /* . X . . . . . . . . . . . . . . */
1002 : /* x x x . . . . . . . . . . . . . */
1003 : /* x x x . . . . . . . . . . . . . */
1004 : /* . x x . . . . . . . . . . . . . */
1005 :
1006 : {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1007 : {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1008 : {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1009 : {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1010 : {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1011 : {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1012 :
1013 : /* x x x . . . . . . . . . . . . . */
1014 : /* . x x x . . . . . . . . . . . . */
1015 : /* . . X . . . . . . . . . . . . . */
1016 : /* . x x x . . . . . . . . . . . . */
1017 : /* . x x x . . . . . . . . . . . . */
1018 : /* . . x x . . . . . . . . . . . . */
1019 :
1020 : {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1021 : {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1022 : {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1023 : {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1024 : {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1025 : {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1026 :
1027 : /* . x x x . . . . . . . . . . . . */
1028 : /* . . x x x . . . . . . . . . . . */
1029 : /* . . . X . . . . . . . . . . . . */
1030 : /* . . x x x . . . . . . . . . . . */
1031 : /* . . x x x . . . . . . . . . . . */
1032 : /* . . . x x . . . . . . . . . . . */
1033 :
1034 : {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1035 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1036 : {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1037 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1038 : {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1039 : {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1040 :
1041 : /* . . x x x . . . . . . . . . . . */
1042 : /* . . . x x x . . . . . . . . . . */
1043 : /* . . . . X . . . . . . . . . . . */
1044 : /* . . . x x x . . . . . . . . . . */
1045 : /* . . . x x x . . . . . . . . . . */
1046 : /* . . . . x x . . . . . . . . . . */
1047 :
1048 : {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1049 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1050 : {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1051 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1052 : {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1053 : {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1054 :
1055 : /* . . . x x x . . . . . . . . . . */
1056 : /* . . . . x x x . . . . . . . . . */
1057 : /* . . . . . X . . . . . . . . . . */
1058 : /* . . . . x x x . . . . . . . . . */
1059 : /* . . . . x x x . . . . . . . . . */
1060 : /* . . . . . x x . . . . . . . . . */
1061 :
1062 : {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1063 : {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1064 : {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1065 : {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1066 : {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1067 : {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1068 :
1069 : /* . . . . x x x . . . . . . . . . */
1070 : /* . . . . . x x x . . . . . . . . */
1071 : /* . . . . . . X . . . . . . . . . */
1072 : /* . . . . . x x x . . . . . . . . */
1073 : /* . . . . . x x x . . . . . . . . */
1074 : /* . . . . . . x x . . . . . . . . */
1075 :
1076 : {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1077 : {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1078 : {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1079 : {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1080 : {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1081 : {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
1082 :
1083 : /* . . . . . x x x . . . . . . . . */
1084 : /* . . . . . . x x x . . . . . . . */
1085 : /* . . . . . . . X . . . . . . . . */
1086 : /* . . . . . . x x x . . . . . . . */
1087 : /* . . . . . . x x x . . . . . . . */
1088 : /* . . . . . . . x x . . . . . . . */
1089 :
1090 : {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1091 : {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1092 : {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1093 : {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1094 : {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1095 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
1096 :
1097 : /* . . . . . . x x . . . . . . . . */
1098 : /* . . . . . . . x x x . . . . . . */
1099 : /* . . . . . . . . X . . . . . . . */
1100 : /* . . . . . . . x x . . . . . . . */
1101 : /* . . . . . . . x x . . . . . . . */
1102 : /* . . . . . . . . x x . . . . . . */
1103 :
1104 : {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1105 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
1106 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
1107 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1108 : {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1109 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
1110 :
1111 : /* . . . . . . . x x . . . . . . . */
1112 : /* . . . . . . . . . x x . . . . . */
1113 : /* . . . . . . . . . X . . . . . . */
1114 : /* . . . . . . . . x x . . . . . . */
1115 : /* . . . . . . . . x x . . . . . . */
1116 : /* . . . . . . . . . x x . . . . . */
1117 :
1118 : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1119 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1120 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
1121 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1122 : {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1123 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
1124 :
1125 : /* . . . . . . . . x x . . . . . . */
1126 : /* . . . . . . . . . . x x . . . . */
1127 : /* . . . . . . . . . . X . . . . . */
1128 : /* . . . . . . . . . x x . . . . . */
1129 : /* . . . . . . . . . x x . . . . . */
1130 : /* . . . . . . . . . . x x . . . . */
1131 :
1132 : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1133 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1134 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
1135 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1136 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1137 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
1138 :
1139 : /* . . . . . . . . . x x . . . . . */
1140 : /* . . . . . . . . . . . x x . . . */
1141 : /* . . . . . . . . . . . X . . . . */
1142 : /* . . . . . . . . . . x x . . . . */
1143 : /* . . . . . . . . . . x x . . . . */
1144 : /* . . . . . . . . . . . x x . . . */
1145 :
1146 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1147 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1148 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
1149 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1150 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1151 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
1152 :
1153 : /* . . . . . . . . . . x x . . . . */
1154 : /* . . . . . . . . . . . . x x . . */
1155 : /* . . . . . . . . . . . . X . . . */
1156 : /* . . . . . . . . . . . x x . . . */
1157 : /* . . . . . . . . . . . x x . . . */
1158 : /* . . . . . . . . . . . . x x . . */
1159 :
1160 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1161 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1162 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
1163 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1164 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1165 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
1166 :
1167 : /* . . . . . . . . . . . x x . . . */
1168 : /* . . . . . . . . . . . . . x x . */
1169 : /* . . . . . . . . . . . . . X . . */
1170 : /* . . . . . . . . . . . . x x . . */
1171 : /* . . . . . . . . . . . . x x . . */
1172 : /* . . . . . . . . . . . . . x x . */
1173 :
1174 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1175 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1176 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
1177 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1178 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1179 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
1180 :
1181 : /* . . . . . . . . . . . . x x . . */
1182 : /* . . . . . . . . . . . . . . x x */
1183 : /* . . . . . . . . . . . . . . X . */
1184 : /* . . . . . . . . . . . . . x x . */
1185 : /* . . . . . . . . . . . . . x x . */
1186 : /* . . . . . . . . . . . . . . x x */
1187 :
1188 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1189 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1190 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
1191 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1192 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1193 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
1194 :
1195 : /* . . . . . . . . . . . . . x x . */
1196 : /* . . . . . . . . . . . . . . . x */
1197 : /* . . . . . . . . . . . . . . . X */
1198 : /* . . . . . . . . . . . . . . x x */
1199 : /* . . . . . . . . . . . . . . x x */
1200 : /* . . . . . . . . . . . . . . . x */
1201 :
1202 : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1203 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1204 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1205 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1206 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1207 : {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}}
1208 :
1209 : };
1210 : const Float_t AliTRDgtuParam::fgkRadius[6] = { 300.65, 313.25, 325.85, 338.45, 351.05, 363.65 };
1211 : const Float_t AliTRDgtuParam::fgkThickness = 3.;
1212 : const Float_t AliTRDgtuParam::fgkRow0Pos[6][5] = {
1213 : {301, 177, 53, -57, -181},
1214 : {301, 177, 53, -57, -181},
1215 : {315, 184, 53, -57, -188},
1216 : {329, 191, 53, -57, -195},
1217 : {343, 198, 53, -57, -202},
1218 : {347, 200, 53, -57, -204}
1219 : };
1220 : const Float_t AliTRDgtuParam::fgkInnerPadLength[] = {7.5, 7.5, 8.0, 8.5, 9.0, 9.0};
1221 : const Float_t AliTRDgtuParam::fgkOuterPadLength[] = {7.5, 7.5, 7.5, 7.5, 7.5, 8.5};
1222 : const Float_t AliTRDgtuParam::fgkAcoeff[32][6] = {
1223 : {-3440, -3303, 3174, 3057, 0, 0},
1224 : {-3481, 0, -171, 0, 3140, 0},
1225 : {-2850, -1380, 0, 1277, 2441, 0},
1226 : {-3481, 0, -171, 0, 3140, 0},
1227 : { 0, -3568, -3431, 3303, 3185, 0},
1228 : {-2783, -1378, -136, 1275, 2510, 0},
1229 : {-1500, -2857, 1384, 0, 0, 2461},
1230 : { 0, -3609, 0, -171, 0, 3268},
1231 : {-3685, 0, 3400, -3276, 0, 3049},
1232 : { 0, -3609, 0, -171, 0, 3268},
1233 : {-1498, -2792, 1382, -132, 0, 2528},
1234 : {-1850, -1777, 0, 0, 1585, 1531},
1235 : {-3481, 0, -171, 0, 3140, 0},
1236 : { 0, -2953, -1431, 0, 1328, 2544},
1237 : {-1808, -1776, -89, 0, 1631, 1530},
1238 : {-2932, 0, 0, -1314, 2511, 1223},
1239 : { 0, -3609, 0, -171, 0, 3268},
1240 : {-1849, -1738, 0, -82, 1583, 1574},
1241 : { 0, 0, -3696, -3559, 3431, 3313},
1242 : {-2863, 0, -140, -1312, 2582, 1221},
1243 : { 0, -2886, -1429, -136, 1327, 2613},
1244 : {-1806, -1736, -89, -82, 1629, 1572},
1245 : { -1, -1, -1, -1, -1, -1},
1246 : { -1, -1, -1, -1, -1, -1},
1247 : { -1, -1, -1, -1, -1, -1},
1248 : { -1, -1, -1, -1, -1, -1},
1249 : { -1, -1, -1, -1, -1, -1},
1250 : { -1, -1, -1, -1, -1, -1},
1251 : { -1, -1, -1, -1, -1, -1},
1252 : { -1, -1, -1, -1, -1, -1},
1253 : { -1, -1, -1, -1, -1, -1},
1254 : { -1, -1, -1, -1, -1, -1}
1255 : };
1256 : const Float_t AliTRDgtuParam::fgkZposLookupTable[5][6][16] = {
1257 : {{297.25 ,289.75 ,282.25 ,274.75 ,267.25 ,259.75 ,252.25 ,244.75 ,237.25 ,229.75 ,222.25 ,214.75 ,207.25 ,199.75 ,192.25 ,184.75},
1258 : {297.25 ,289.75 ,282.25 ,274.75 ,267.25 ,259.75 ,252.25 ,244.75 ,237.25 ,229.75 ,222.25 ,214.75 ,207.25 ,199.75 ,192.25 ,184.75},
1259 : {311.25 ,303.5 ,295.5 ,287.5 ,279.5 ,271.5 ,263.5 ,255.5 ,247.5 ,239.5 ,231.5 ,223.5 ,215.5 ,207.5 ,199.5 ,191.75},
1260 : {325.25 ,317.25 ,308.75 ,300.25 ,291.75 ,283.25 ,274.75 ,266.25 ,257.75 ,249.25 ,240.75 ,232.25 ,223.75 ,215.25 ,206.75 ,198.75},
1261 : {339.25 ,331 ,322 ,313 ,304 ,295 ,286 ,277 ,268 ,259 ,250 ,241 ,232 ,223 ,214 ,205.75},
1262 : {342.75 ,334 ,325 ,316 ,307 ,298 ,289 ,280 ,271 ,262 ,253 ,244 ,235 ,226 ,217 ,208.25}},
1263 :
1264 : {{173.25 ,165.75 ,158.25 ,150.75 ,143.25 ,135.75 ,128.25 ,120.75 ,113.25 ,105.75 ,98.25 ,90.75 ,83.25 ,75.75 ,68.25 ,60.75},
1265 : {173.25 ,165.75 ,158.25 ,150.75 ,143.25 ,135.75 ,128.25 ,120.75 ,113.25 ,105.75 ,98.25 ,90.75 ,83.25 ,75.75 ,68.25 ,60.75},
1266 : {180.25 ,172.5 ,164.5 ,156.5 ,148.5 ,140.5 ,132.5 ,124.5 ,116.5 ,108.5 ,100.5 ,92.5 ,84.5 ,76.5 ,68.5 ,60.75},
1267 : {187.25 ,179.25 ,170.75 ,162.25 ,153.75 ,145.25 ,136.75 ,128.25 ,119.75 ,111.25 ,102.75 ,94.25 ,85.75 ,77.25 ,68.75 ,60.75},
1268 : {194.25 ,186 ,177 ,168 ,159 ,150 ,141 ,132 ,123 ,114 ,105 ,96 ,87 ,78 ,69 ,60.75},
1269 : {195.75 ,187 ,178 ,169 ,160 ,151 ,142 ,133 ,124 ,115 ,106 ,97 ,88 ,79 ,70 ,61.25}},
1270 :
1271 : {{49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
1272 : {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
1273 : {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
1274 : {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
1275 : {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
1276 : {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999}},
1277 :
1278 : {{-60.75 ,-68.25 ,-75.75 ,-83.25 ,-90.75 ,-98.25 ,-105.75 ,-113.25 ,-120.75 ,-128.25 ,-135.75 ,-143.25 ,-150.75 ,-158.25 ,-165.75 ,-173.25},
1279 : {-60.75 ,-68.25 ,-75.75 ,-83.25 ,-90.75 ,-98.25 ,-105.75 ,-113.25 ,-120.75 ,-128.25 ,-135.75 ,-143.25 ,-150.75 ,-158.25 ,-165.75 ,-173.25},
1280 : {-60.75 ,-68.5 ,-76.5 ,-84.5 ,-92.5 ,-100.5 ,-108.5 ,-116.5 ,-124.5 ,-132.5 ,-140.5 ,-148.5 ,-156.5 ,-164.5 ,-172.5 ,-180.25},
1281 : {-60.75 ,-68.75 ,-77.25 ,-85.75 ,-94.25 ,-102.75 ,-111.25 ,-119.75 ,-128.25 ,-136.75 ,-145.25 ,-153.75 ,-162.25 ,-170.75 ,-179.25 ,-187.25},
1282 : {-60.75 ,-69 ,-78 ,-87 ,-96 ,-105 ,-114 ,-123 ,-132 ,-141 ,-150 ,-159 ,-168 ,-177 ,-186 ,-194.25},
1283 : {-61.25 ,-70 ,-79 ,-88 ,-97 ,-106 ,-115 ,-124 ,-133 ,-142 ,-151 ,-160 ,-169 ,-178 ,-187 ,-195.75}},
1284 :
1285 : {{-184.75 ,-192.25 ,-199.75 ,-207.25 ,-214.75 ,-222.25 ,-229.75 ,-237.25 ,-244.75 ,-252.25 ,-259.75 ,-267.25 ,-274.75 ,-282.25 ,-289.75 ,-297.25},
1286 : {-184.75 ,-192.25 ,-199.75 ,-207.25 ,-214.75 ,-222.25 ,-229.75 ,-237.25 ,-244.75 ,-252.25 ,-259.75 ,-267.25 ,-274.75 ,-282.25 ,-289.75 ,-297.25},
1287 : {-191.75 ,-199.5 ,-207.5 ,-215.5 ,-223.5 ,-231.5 ,-239.5 ,-247.5 ,-255.5 ,-263.5 ,-271.5 ,-279.5 ,-287.5 ,-295.5 ,-303.5 ,-311.25},
1288 : {-198.75 ,-206.75 ,-215.25 ,-223.75 ,-232.25 ,-240.75 ,-249.25 ,-257.75 ,-266.25 ,-274.75 ,-283.25 ,-291.75 ,-300.25 ,-308.75 ,-317.25 ,-325.25},
1289 : {-205.75 ,-214 ,-223 ,-232 ,-241 ,-250 ,-259 ,-268 ,-277 ,-286 ,-295 ,-304 ,-313 ,-322 ,-331 ,-339.25},
1290 : {-208.25 ,-217 ,-226 ,-235 ,-244 ,-253 ,-262 ,-271 ,-280 ,-289 ,-298 ,-307 ,-316 ,-325 ,-334 ,-342.75}
1291 : }};
1292 : const Int_t AliTRDgtuParam::fgkMaskID[] = {
1293 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1294 : -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1295 : -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1296 : -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1297 : };
1298 :
1299 2 : AliTRDgtuParam::AliTRDgtuParam() :
1300 2 : fVertexSize(20.0),
1301 2 : fCurrTrackletMask(0),
1302 2 : fMagField(0.5),
1303 2 : fGeo(0x0)
1304 10 : {
1305 : // default ctor
1306 6 : fGeo = new AliTRDgeometry();
1307 28 : for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
1308 12 : fAki[iLayer] = 0.;
1309 12 : fBki[iLayer] = 0.;
1310 12 : fCki[iLayer] = 0.;
1311 12 : fPki[iLayer] = 0;
1312 : }
1313 2 : fLengthNorm = 0;
1314 2 : fc1Inv = 0;
1315 2 : GenerateZChannelMap();
1316 4 : }
1317 :
1318 : AliTRDgtuParam::~AliTRDgtuParam()
1319 8 : {
1320 : // dtor
1321 :
1322 4 : delete fGeo;
1323 4 : }
1324 :
1325 : AliTRDgtuParam* AliTRDgtuParam::Instance()
1326 : {
1327 : // get (or create) the single instance
1328 :
1329 2462 : static AliTRDgtuParam instance;
1330 1228 : return &instance;
1331 0 : }
1332 :
1333 : Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1334 : {
1335 2160 : return (fZSubChannel[stack][zchannel][layer][zpos] != 0);
1336 : }
1337 :
1338 : Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1339 : {
1340 1542 : return fZSubChannel[stack][zchannel][layer][zpos];
1341 : }
1342 :
1343 : Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx)
1344 : {
1345 : // returns the reference layer indexed by refLayerIdx
1346 :
1347 968 : if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers)
1348 484 : return fgRefLayers[refLayerIdx];
1349 : else
1350 0 : return -1;
1351 484 : }
1352 :
1353 : Int_t AliTRDgtuParam::GenerateZChannelMap()
1354 : {
1355 : // generate the z-channel map
1356 : // assuming that the tracks come from the vertex
1357 : // +/- fVertexSize in z-direction
1358 :
1359 4 : if (fgUseGTUconst) {
1360 24 : for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1361 324 : for (Int_t iChannel = 0; iChannel < fGeo->GetRowMax(fgkFixLayer, iStack, 0); iChannel++) {
1362 2128 : for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1363 29856 : for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1364 14016 : if (fgZChannelMap[iStack][iChannel][iLayer][iRow] != 0) {
1365 1880 : fZChannelMap[iStack][iChannel][iLayer][iRow] = 1;
1366 1880 : fZSubChannel[iStack][iChannel % fgkNZChannels][iLayer][iRow] = iChannel / fgkNZChannels + 1;
1367 1880 : }
1368 : }
1369 : }
1370 : }
1371 : }
1372 :
1373 2 : return kTRUE;
1374 : }
1375 : else {
1376 : Int_t iSec = 0; // sector is irrelevant
1377 : Bool_t collision = kFALSE;
1378 :
1379 0 : for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1380 :
1381 0 : Float_t x[6] = { 0 };
1382 0 : Float_t z[6][16] = {{ 0 }};
1383 0 : Float_t dZ[6][16] = {{ 0 }};
1384 :
1385 0 : for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1386 0 : AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1387 0 : x[iLayer] = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ???
1388 0 : for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1389 0 : z[iLayer][iRow] = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad
1390 0 : dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction
1391 0 : for (Int_t i = 0; i < fgkNZChannels; i++)
1392 0 : fZSubChannel[iStack][i][iLayer][iRow] = 0;
1393 : }
1394 : }
1395 :
1396 0 : for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
1397 :
1398 0 : Double_t fixZmin = z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow];
1399 0 : Double_t fixZmax = z[fgkFixLayer][fixRow];
1400 0 : Double_t fixX = x[fgkFixLayer] + 1.5; // ??? 1.5 from where?
1401 :
1402 0 : for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1403 : Double_t leftZ, rightZ;
1404 :
1405 0 : if (iLayer <= fgkFixLayer) {
1406 0 : leftZ = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1407 0 : rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1408 0 : }
1409 : else {
1410 0 : leftZ = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1411 0 : rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1412 : }
1413 :
1414 : Double_t epsilon = 0.001;
1415 0 : for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1416 0 : if ( (z[iLayer][iRow] ) > (leftZ + epsilon) &&
1417 0 : (z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) {
1418 0 : fZChannelMap[iStack][fixRow][iLayer][iRow] = 1;
1419 0 : if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) {
1420 0 : AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!");
1421 : collision = kTRUE;
1422 0 : }
1423 : else
1424 0 : fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1;
1425 : }
1426 :
1427 : }
1428 : }
1429 : }
1430 0 : }
1431 :
1432 0 : return ~collision;
1433 : }
1434 2 : }
1435 :
1436 : Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const
1437 : {
1438 : // display the z-channel map
1439 :
1440 0 : if (zchannel >= fgkNZChannels) {
1441 0 : AliError("Invalid Z channel!");
1442 0 : return kFALSE;
1443 : }
1444 :
1445 0 : Int_t zchmin = zchannel >= 0 ? zchannel : 0;
1446 0 : Int_t zchmax = zchannel >= 0 ? zchannel + 1 : fgkNZChannels;
1447 : Int_t i = 0;
1448 : Int_t j = 0;
1449 0 : TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping");
1450 0 : c->cd();
1451 0 : TGraph **graphz = new TGraph*[fgkNZChannels];
1452 0 : for (Int_t zch = zchmin; zch < zchmax; zch++)
1453 0 : graphz[zch] = new TGraph;
1454 0 : TGraphAsymmErrors *graph = new TGraphAsymmErrors();
1455 0 : graph->SetTitle("Z-Channel Map");
1456 0 : graph->SetPoint(i, 0, 0); // vertex
1457 0 : graph->SetPointError(i++, 20, 20, 0, 0);
1458 : // graph->SetRange //????
1459 0 : for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1460 0 : for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1461 0 : AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1462 0 : for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1463 0 : graph->SetPoint(i, pp->GetRowPos(iRow), fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1464 0 : graph->SetPointError(i++, pp->GetRowSize(iRow), 0, 0, 0);
1465 0 : for (Int_t zch = zchmin; zch < zchmax; zch++)
1466 0 : if (fZSubChannel[iStack][zch][iLayer][iRow] != 0)
1467 0 : if (subchannel == 0 || fZSubChannel[iStack][zch][iLayer][iRow] == subchannel)
1468 0 : graphz[zch]->SetPoint(j++, pp->GetRowPos(iRow) - pp->GetRowSize(iRow)/2, fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1469 : }
1470 : }
1471 : }
1472 0 : graph->SetMarkerStyle(kDot);
1473 0 : graph->Draw("AP");
1474 0 : gROOT->Add(graph);
1475 0 : for (Int_t zch = zchmin; zch < zchmax; zch++) {
1476 0 : graphz[zch]->SetMarkerStyle(kCircle);
1477 0 : graphz[zch]->SetMarkerColor(zch+2);
1478 0 : graphz[zch]->SetMarkerSize(0.3 + zch*0.2);
1479 0 : graphz[zch]->Draw("P");
1480 0 : gROOT->Add(graphz[zch]);
1481 : }
1482 0 : delete [] graphz;
1483 : return kTRUE;
1484 0 : }
1485 :
1486 : Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const
1487 : {
1488 : // get the constant for the calculation of alpha
1489 :
1490 720 : Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
1491 360 : return ci;
1492 : }
1493 :
1494 : Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const
1495 : {
1496 : // get the constant for the calculation of y_proj
1497 :
1498 : Int_t ci = 0;
1499 :
1500 720 : if (fgUseGTUconst) {
1501 360 : Float_t xmid = (fgkRadius[0] + fgkRadius[5]) / 2.;
1502 360 : ci = TMath::Nint(- (fgkRadius[layer] - xmid) * fgkBinWidthdY / (fgkBinWidthY * fgkThickness) * (1 << GetBitExcessYProj()));
1503 360 : } else {
1504 0 : Float_t xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.;
1505 0 : ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) );
1506 : }
1507 :
1508 360 : return ci;
1509 : }
1510 :
1511 : Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const
1512 : {
1513 : // return yt for the calculation of y'
1514 :
1515 : Int_t yt = 0;
1516 :
1517 1080 : if (fgUseGTUconst) {
1518 1080 : yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
1519 720 : GetZrow(stack, layer, zrow) * TMath::Tan(- 2./180. * TMath::Pi()) / fgkBinWidthY ));
1520 360 : } else {
1521 0 : yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
1522 0 : (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2.) *
1523 0 : TMath::Tan(- 2./180. * TMath::Pi()) ) / fgkBinWidthY );
1524 : }
1525 :
1526 360 : return yt;
1527 : }
1528 :
1529 : Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask)
1530 : {
1531 : // calculate the coefficients for the straight line fit
1532 : // depending on the mask of contributing tracklets
1533 :
1534 28 : fCurrTrackletMask = trackletMask;
1535 :
1536 14 : TMatrix a(GetNLayers(), 3);
1537 14 : TMatrix b(3, GetNLayers());
1538 14 : TMatrix c(3, 3);
1539 :
1540 : const Int_t maskIdLut[64] = {
1541 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1542 : -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1543 : -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1544 : -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1545 : };
1546 :
1547 : const Int_t c1Lut[32] = {
1548 : -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
1549 : -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
1550 : -2670, -2557, -2763, -2557, -2644, -2523, -1, -1,
1551 : -1, -1, -1, -1, -1, -1, -1, -1
1552 : };
1553 : /* correction factor for sagitta (not used at the moment)
1554 : const Float_t epsCorrLut[32] = {
1555 : 1.12499, 1.18589, 1.18516, 1.18447, 1.12499, 1.06665, 1.30387, 1.15774,
1556 : 1.15741, 1.18596, 1.09696, 1.30201, 1.15703, 1.18516, 1.09662, 1.130026,
1557 : 1.18443, 1.09630, 1.12499, 1.09600, 1.06665, 1.04164, -1, -1,
1558 : -1, -1, -1, -1, -1, -1, -1, -1
1559 : };*/
1560 :
1561 14 : Int_t layerMaskId = maskIdLut[trackletMask];
1562 14 : Int_t c1 = c1Lut[layerMaskId];
1563 : //Float_t epsCorr = epsCorrLut[layerMaskId];
1564 :
1565 14 : fc1Inv = -GetShiftLengthNorm()/c1;
1566 :
1567 : Int_t firstHitLayer = 0 ,lastHitLayer = 5;
1568 34 : while ((trackletMask & (1 << firstHitLayer)) == 0) {
1569 6 : firstHitLayer++;
1570 6 : if (firstHitLayer >= 3) {
1571 0 : AliError(Form("Invalid tracklet mask: %i", trackletMask));
1572 : break;
1573 : }
1574 : }
1575 19 : while ((trackletMask & (1 << lastHitLayer)) == 0) {
1576 5 : lastHitLayer--;
1577 5 : if (lastHitLayer < 3) {
1578 0 : AliError(Form("Invalid tracklet mask: %i", trackletMask));
1579 : break;
1580 : }
1581 : }
1582 14 : Float_t dX = fGeo->Cheight() + fGeo->Cspace(); // distance between two consecutive layers
1583 14 : fLengthNorm = (Int_t) (-4e3 * dX/ TMath::Power(((lastHitLayer - firstHitLayer) * dX), 3) * GetShiftLengthNorm() * GetBinWidthY());
1584 : //fLengthNorm *= epsCorr;
1585 :
1586 14 : CalculatePrefactors(trackletMask);
1587 :
1588 196 : for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1589 84 : if ( (trackletMask & (1 << layer)) == 0) {
1590 32 : a(layer, 0) = 0;
1591 32 : a(layer, 1) = 0;
1592 32 : a(layer, 2) = 0;
1593 16 : }
1594 : else {
1595 136 : a(layer, 0) = 1;
1596 136 : a(layer, 1) = fGeo->GetTime0(layer);
1597 136 : a(layer, 2) = (layer % 2 ? 1 : -1) * fGeo->GetTime0(layer);
1598 : }
1599 : }
1600 :
1601 14 : b.Transpose(a);
1602 42 : c = b * a;
1603 14 : c.InvertFast();
1604 42 : b = c * b;
1605 :
1606 196 : for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1607 84 : fAki[layer] = b.GetMatrixArray()[layer];
1608 84 : fBki[layer] = b.GetMatrixArray()[GetNLayers() + layer];
1609 84 : fCki[layer] = b.GetMatrixArray()[2 * GetNLayers() + layer];
1610 : }
1611 : return kTRUE;
1612 14 : }
1613 :
1614 : Bool_t AliTRDgtuParam::CalculatePrefactors(Int_t trackletMask)
1615 : {
1616 28 : fPki[0] = -4;
1617 14 : fPki[1] = 2;
1618 14 : fPki[2] = 2;
1619 14 : fPki[3] = 2;
1620 14 : fPki[4] = 2;
1621 14 : fPki[5] = -4;
1622 : Int_t firstHitLayer = 0;
1623 14 : Int_t lastHitLayer = GetNLayers()-1;
1624 196 : for (Int_t layer = 0; layer <= lastHitLayer; ++layer) {
1625 84 : if ( (trackletMask & (1 << layer)) == 0) {
1626 16 : fPki[layer] = 0;
1627 16 : if (layer == firstHitLayer){
1628 6 : fPki[lastHitLayer]++;
1629 6 : fPki[layer+1] = fPki[lastHitLayer];
1630 6 : firstHitLayer++;
1631 6 : }
1632 10 : else if (layer == lastHitLayer){
1633 5 : fPki[firstHitLayer]++;
1634 5 : if (fPki[layer-1] != 0) {
1635 5 : fPki[layer-1] = fPki[firstHitLayer];
1636 5 : if (fPki[firstHitLayer+1] == 0) {
1637 0 : --fPki[layer-1];
1638 0 : }
1639 : }
1640 5 : if (fPki[layer-1] == 0){
1641 0 : fPki[firstHitLayer]++;
1642 0 : fPki[layer-2] = fPki[firstHitLayer];
1643 0 : }
1644 5 : if (fPki[layer-2] == 0) {
1645 1 : fPki[layer-1]++;
1646 1 : }
1647 : }
1648 5 : else if (fPki[layer-1] == 0){
1649 0 : fPki[layer-2]++;
1650 0 : fPki[layer+1] += 2;
1651 0 : }
1652 : else {
1653 5 : fPki[layer-1]++;
1654 5 : fPki[layer+1]++;
1655 : }
1656 : }
1657 : }
1658 14 : return kTRUE;
1659 : }
1660 :
1661 : Int_t AliTRDgtuParam::GetAki(Int_t k, Int_t i)
1662 : {
1663 : // get A_ki for the calculation of the tracking parameters
1664 146 : if (fgUseGTUconst) {
1665 73 : Int_t maskId = fgkMaskID[k];
1666 73 : return fgkAcoeff[maskId][i];
1667 : } else {
1668 0 : if (fCurrTrackletMask != k)
1669 0 : GenerateRecoCoefficients(k);
1670 0 : return -(((Int_t) fAki[i]) << 9);
1671 : }
1672 73 : }
1673 :
1674 : Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i)
1675 : {
1676 : // get B_ki for the calculation of the tracking parameters
1677 :
1678 146 : if (fCurrTrackletMask != k)
1679 14 : GenerateRecoCoefficients(k);
1680 :
1681 73 : return fBki[i];
1682 : }
1683 :
1684 : Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i)
1685 : {
1686 : // get B_ki for the calculation of the tracking parameters
1687 :
1688 146 : if (fCurrTrackletMask != k)
1689 0 : GenerateRecoCoefficients(k);
1690 :
1691 73 : return fCki[i];
1692 : }
1693 :
1694 : Int_t AliTRDgtuParam::GetPki(Int_t k, Int_t i)
1695 : {
1696 : // get P_ki for the calculation of the sagitta
1697 292 : if (fCurrTrackletMask != k)
1698 0 : GenerateRecoCoefficients(k);
1699 146 : return fPki[i];
1700 : }
1701 :
1702 : Int_t AliTRDgtuParam::GetLengthNorm(Int_t k)
1703 : {
1704 : // get length normalization to obtain 1/pt from sagitta
1705 60 : if (fCurrTrackletMask != k)
1706 0 : GenerateRecoCoefficients(k);
1707 30 : return fLengthNorm;
1708 : }
1709 :
1710 : Int_t AliTRDgtuParam::Getc1Inv(Int_t k)
1711 : {
1712 : // get invers c1 for mask independent cut on pt deviation
1713 30 : if (fCurrTrackletMask != k)
1714 0 : GenerateRecoCoefficients(k);
1715 15 : return fc1Inv;
1716 : }
1717 :
1718 : /*
1719 : Float_t AliTRDgtuParam::GetD(Int_t k) const
1720 : {
1721 : // get the determinant for the calculation of the tracking parameters
1722 :
1723 : TMatrix t(3, 3);
1724 : for (Int_t i = 0; i < GetNLayers(); i++) {
1725 : if ( !((k >> i) & 0x1) )
1726 : continue;
1727 : Float_t xi = fGeo->GetTime0(i);
1728 : t(0,0) += 1;
1729 : t(1,0) += xi;
1730 : t(2,0) += TMath::Power(-1, i) * xi;
1731 : t(0,1) += xi;
1732 : t(1,1) += TMath::Power(xi, 2);
1733 : t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1734 : t(0,2) += TMath::Power(-1, i) * xi;
1735 : t(1,2) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1736 : t(2,2) += TMath::Power(xi, 2);
1737 : }
1738 : return t.Determinant();
1739 : }
1740 :
1741 : Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k)
1742 : {
1743 : // calculate the fitting parameters
1744 : // will be changed!
1745 :
1746 : TMatrix t(3,3);
1747 : for (Int_t i = 0; i < GetNLayers(); i++) {
1748 : if ( !((k >> i) & 0x1) )
1749 : continue;
1750 : Float_t xi = fGeo->GetTime0(i);
1751 : t(0,0) += 1;
1752 : t(1,0) += xi;
1753 : t(2,0) += TMath::Power(-1, i) * xi;
1754 : t(0,1) += xi;
1755 : t(1,1) += TMath::Power(xi, 2);
1756 : t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1757 : t(0,2) -= TMath::Power(-1, i) * xi;
1758 : t(1,2) -= TMath::Power(-1, i) * TMath::Power(xi, 2);
1759 : t(2,2) -= TMath::Power(xi, 2);
1760 : }
1761 : TDecompLU lr(t);
1762 : lr.Solve(rhs);
1763 : return lr.Decompose();
1764 : }
1765 : */
1766 :
1767 : Int_t AliTRDgtuParam::GetZpos(Int_t stack, Int_t layer, Int_t binZ)
1768 : {
1769 :
1770 292 : if ( (layer<0) || (layer>5) )
1771 : {
1772 0 : AliError(Form("Wrong layer index %i\n", layer));
1773 0 : return 9999;
1774 : }
1775 146 : if ( (stack<0) || (stack>4) )
1776 : {
1777 0 : AliError(Form("Wrong stack index %i\n", stack));
1778 0 : return 9999;
1779 : }
1780 146 : if ( (binZ<0) || (binZ>15) )
1781 : {
1782 0 : AliError(Form("Wrong binZ index %i\n", binZ));
1783 0 : return 9999;
1784 : }
1785 146 : if ( (stack==2) && (binZ>11) )
1786 : {
1787 0 : AliError(Form("Wrong binZ index %i\n for stack 2", binZ));
1788 0 : return 9999;
1789 : }
1790 :
1791 146 : return fgkZposLookupTable[stack][layer][binZ]*10;
1792 146 : }
1793 :
1794 : Int_t AliTRDgtuParam::GetTanOfTiltingAngle(Int_t layer)
1795 : {
1796 : //Float_t erg = TMath::Tan(2*TMath::DegToRad());
1797 : Float_t erg = 0.034920769;
1798 : erg *= 1e4;
1799 146 : return (layer%2==0)? erg:-1.*erg;
1800 : }
1801 :
1802 : Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2)
1803 : {
1804 : // get the x-coord. of the assumed circle/straight line intersection points
1805 :
1806 : Int_t l1 = -1;
1807 : Int_t l2 = -1;
1808 : Int_t nHits = 0;
1809 225 : for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1810 90 : if ( (k >> layer) & 0x1 ) {
1811 73 : if (l1 < 0)
1812 15 : l1 = layer;
1813 : l2 = layer;
1814 73 : nHits++;
1815 73 : }
1816 : }
1817 :
1818 15 : if ( (l1 >= 0) && (l2 >= 0) ) {
1819 15 : x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1);
1820 15 : x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1);
1821 15 : return kTRUE;
1822 : }
1823 : else
1824 0 : return kFALSE;
1825 15 : }
1826 :
1827 : Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2, Float_t magField)
1828 : {
1829 : // returns 0.3 * B * 1/a (1/128 GeV/c)
1830 : // a : offset, b : slope (not used)
1831 :
1832 : // protect against division by zero, covers both cases
1833 60 : if ((a >> 2) == 0)
1834 0 : return fgkPtInfinity;
1835 :
1836 30 : if (fgUseGTUconst) {
1837 : //----- calculation as in the GTU ----
1838 : const Int_t maskIdLut[64] = {
1839 : -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1840 : -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1841 : -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1842 : -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1843 : };
1844 :
1845 : const Int_t c1Lut[32] = {
1846 : -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
1847 : -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
1848 : -2670, -2557, -2763, -2557, -2644, -2523, -1, -1,
1849 : -1, -1, -1, -1, -1, -1, -1, -1
1850 : };
1851 :
1852 30 : Int_t layerMaskId = maskIdLut[layerMask];
1853 30 : Int_t c1 = c1Lut[layerMaskId];
1854 30 : Int_t c1Ext = c1 << 8;
1855 30 : Int_t ptRawStage4 = c1Ext / (a >> 2);
1856 : Int_t ptRawComb4 = ptRawStage4;
1857 30 : Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
1858 :
1859 30 : return ((Int_t) ptExtComb4/2);
1860 : }
1861 : else {
1862 : //----- simple calculation -----
1863 0 : Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
1864 : Float_t r = 0;
1865 0 : if ( (a >> 1) != 0)
1866 0 : r = (0.3 * magField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
1867 :
1868 0 : Int_t pt = (Int_t) (2 * r);
1869 0 : if (pt >= 0)
1870 0 : pt += 32;
1871 : else
1872 0 : pt -= 29;
1873 0 : pt /= 2;
1874 : return pt;
1875 : }
1876 30 : }
1877 :
1878 : Double_t AliTRDgtuParam::CorrectYforAlignmentOCDB(Int_t det, Double_t trklZpos)
1879 : {
1880 146 : Double_t shiftCorrFactor=0;
1881 73 : Double_t rotationCorrFactor=0;
1882 :
1883 73 : GetYAlignmentDataOCDB(det, &shiftCorrFactor, &rotationCorrFactor);
1884 146 : return (trklZpos*TMath::Tan(rotationCorrFactor)) - shiftCorrFactor;
1885 73 : }
1886 :
1887 : void AliTRDgtuParam::GetYAlignmentDataOCDB(Int_t chamber, Double_t *shiftCorrFactor, Double_t *rotationCorrFactor)
1888 : {
1889 : const Double_t sm0AlignYShiftCorr[30]={0.950896, 0.879845, 1.09222, 0.973455, 1.07732, 1.09708, 0.800331, 0.810261, 0.957055, 1.01692, 0.995464, 0.911438, 0.749624, 0.862145, 0.929711, 1.00373, 0.970462, 1.07445, 0.869766, 0.99827, 1.03514, 1.16184, 1.10103, 1.13804, 0.850769, 0.970176, 0.957055, 1.00373, 1.05887, 1.11904};
1890 : const Double_t sm0AlignRotationCorr[30]={0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472};
1891 : const Double_t sm1AlignYShiftCorr[30]={1.06036, 1.00293, 1.00074, 1.16708, 1.2733, 1.12067, 0.953733, 0.913071, 0.955806, 0.988405, 1.06255, 0.991189, 0.849538, 0.951239, 0.963683, 0.981054, 1.03524, 0.789439, 0.861432, 0.999114, 0.967925, 1.04253, 1.16334, 1.14535, 0.793966, 0.905693, 0.786929, 0.942292, 1.01108, 1.08596};
1892 : const Double_t sm1AlignRotationCorr[30]={-0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439};
1893 : const Double_t sm2AlignYShiftCorr[30]={1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412, 1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412, 1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412, 1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412, 1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412};
1894 : const Double_t sm2AlignRotationCorr[30]={6.08449e-17, 6.0845e-17, 6.0959e-17, 6.10827e-17, 6.15405e-17, 6.09767e-17, 6.08287e-17, 6.08287e-17, 6.0964e-17, 6.09122e-17, 6.08748e-17, 6.10829e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.07456e-17, 6.07456e-17, 6.07133e-17, 6.07628e-17, 6.10402e-17, 6.13227e-17, 6.08112e-17, 6.08112e-17, 6.17087e-17, 6.17742e-17, 6.15405e-17, 6.11445e-17};
1895 : const Double_t sm3AlignYShiftCorr[30]={1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768, 1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768, 1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768, 1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768, 1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768};
1896 : const Double_t sm3AlignRotationCorr[30]={6.13935e-17, 6.13935e-17, 6.17901e-17, 6.1582e-17, 6.15405e-17, 6.13146e-17, 6.17313e-17, 6.17313e-17, 6.17758e-17, 6.18921e-17, 6.20216e-17, 6.14961e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.08427e-17, 6.08431e-17, 6.09689e-17, 6.09122e-17, 6.0969e-17, 6.04721e-17, 6.08659e-17, 6.08659e-17, 6.10143e-17, 6.12837e-17, 6.10952e-17, 6.10829e-17};
1897 : const Double_t sm4AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1898 : const Double_t sm4AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1899 : const Double_t sm5AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1900 : const Double_t sm5AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1901 : const Double_t sm6AlignYShiftCorr[30]={0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601, 0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601, 0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601, 0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601, 0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601};
1902 : const Double_t sm6AlignRotationCorr[30]={6.12302e-17, 6.12334e-17, 6.12366e-17, 6.12076e-17, 6.12421e-17, 6.12893e-17, 6.12346e-17, 6.12342e-17, 6.12414e-17, 6.12159e-17, 6.12642e-17, 6.12702e-17, 6.12287e-17, 6.12287e-17, 6.12464e-17, 6.12464e-17, 6.12142e-17, 6.12142e-17, 6.12341e-17, 6.12341e-17, 6.12248e-17, 6.12159e-17, 6.1188e-17, 6.13011e-17, 6.12335e-17, 6.12338e-17, 6.12228e-17, 6.12636e-17, 6.12173e-17, 6.13038e-17};
1903 : const Double_t sm7AlignYShiftCorr[30]={-0.866054, -0.946888, -0.936051, -1.04962, -0.99742, -1.11695, -0.871263, -0.866588, -0.872928, -0.994759, -0.960582, -1.02686, -0.840704, -0.920968, -0.983293, -0.985986, -1.03693, -0.990354, -0.841495, -0.898174, -0.977235, -0.864823, -0.960582, -1.04184, -0.774481, -0.740641, -0.901039, -0.813138, -0.958083, -0.844561};
1904 : const Double_t sm7AlignRotationCorr[30]={0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095};
1905 : const Double_t sm8AlignYShiftCorr[30]={-1.08741, -1.04946, -1.13455, -1.25708, -1.14229, -1.12472, -1.04684, -1.06298, -1.04691, -1.01174, -1.02042, -1.068, -1.12634, -1.13846, -1.14718, -1.23131, -1.1225, -1.13288, -1.03394, -0.997171, -1.09563, -1.06354, -0.954007, -0.918441, -1.00773, -1.04946, -1.03248, -0.914811, -0.912203, -0.827483};
1906 : const Double_t sm8AlignRotationCorr[30]={0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878};
1907 : const Double_t sm9AlignYShiftCorr[30]={-0.997909, -1.14595, -1.10428, -1.04842, -1.03343, -1.18205, -1.0511, -1.12617, -1.08041, -1.09323, -1.11159, -1.19614, -1.09481, -1.10916, -1.1128, -1.14028, -1.16596, -1.07021, -1.04761, -1.00465, -1.14669, -1.05859, -1.05879, -1.11359, -0.89919, -0.935687, -1.12952, -0.99086, -1.01247, -0.994654};
1908 : const Double_t sm9AlignRotationCorr[30]={0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181};
1909 : const Double_t sm10AlignYShiftCorr[30]={-1.36423, -1.46127, -1.42239, -1.4497, -1.25872, -1.23821, -1.38106, -1.42123, -1.39686, -1.3602, -1.24536, -1.26131, -1.50418, -1.38895, -1.33199, -1.34877, -1.28903, -1.259, -1.41907, -1.30094, -1.3579, -1.21426, -1.21636, -1.06847, -1.44013, -1.21849, -1.32739, -1.20238, -1.21579, -1.06474};
1910 : const Double_t sm10AlignRotationCorr[30]={0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463};
1911 : const Double_t sm11AlignYShiftCorr[30]={-1.31965, -1.54112, -1.47852, -1.64944, -4.4449, -1.80533, -1.35592, -1.4903, -1.54163, -1.5559, -1.58468, -1.74079, -1.51473, -1.53837, -1.6997, -1.7125, -1.81951, -1.92436, -1.45354, -1.39703, -1.63136, -1.53742, -1.61779, -1.71032, -1.338, -1.21635, -1.42423, -1.40279, -1.43874, -1.42863};
1912 : const Double_t sm11AlignRotationCorr[30]={0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076};
1913 : const Double_t sm12AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1914 : const Double_t sm12AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1915 : const Double_t sm13AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1916 : const Double_t sm13AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1917 : const Double_t sm14AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1918 : const Double_t sm14AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1919 : const Double_t sm15AlignYShiftCorr[30]={0.0615559, 0.0761089, 0.244263, 0.193727, 0.278576, 0.199347, 0.0354735, -0.007305, 0.087983, 0.0648831, 0.136816, 0.0515244, 0, 0, 0, 0, 0, 0, 0.0602967, 0.0983063, 0.183299, 0.269317, 0.239239, 0.311994, 0.0413288, 0.0937568, 0.164063, 0.263629, 0.220605, 0.314462};
1920 : const Double_t sm15AlignRotationCorr[30]={-0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, 0, 0, 0, 0, 0, 0, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365};
1921 : const Double_t sm16AlignYShiftCorr[30]={0.410348, 0.404458, 0.570151, 0.56562, 0.669698, 0.595227, 0.366881, 0.251549, 0.433893, 0.505892, 0.582798, 0.546805, 0.288368, 0.291832, 0.37178, 0.511245, 0.535215, 0.519403, 0.30927, 0.379342, 0.492418, 0.604519, 0.567487, 0.689209, 0.164414, 0.290361, 0.323621, 0.458511, 0.495891, 0.56392};
1922 : const Double_t sm16AlignRotationCorr[30]={-0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037};
1923 : const Double_t sm17AlignYShiftCorr[30]={0.924637, 0.830734, 0.851936, 0.925559, 1.05194, 0.644287, 0.861304, 0.773108, 0.837512, 0.851351, 0.898791, 0.833368, 0.797453, 0.769815, 0.851936, 0.917353, 0.898791, 0.853596, 0.771743, 0.805229, 0.855267, 0.989788, 0.898791, 0.922218, 0.634823, 0.792299, 0.806066, 1.01563, 0.970954, 0.922218};
1924 : const Double_t sm17AlignRotationCorr[30]={8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05};
1925 :
1926 146 : const Double_t *alignYShiftCorr[18];
1927 73 : const Double_t *alignRotationCorr[18];
1928 73 : alignYShiftCorr[0] = sm0AlignYShiftCorr;
1929 73 : alignRotationCorr[0] = sm0AlignRotationCorr;
1930 73 : alignYShiftCorr[1] = sm1AlignYShiftCorr;
1931 73 : alignRotationCorr[1] = sm1AlignRotationCorr;
1932 73 : alignYShiftCorr[2] = sm2AlignYShiftCorr;
1933 73 : alignRotationCorr[2] = sm2AlignRotationCorr;
1934 73 : alignYShiftCorr[3] = sm3AlignYShiftCorr;
1935 73 : alignRotationCorr[3] = sm3AlignRotationCorr;
1936 73 : alignYShiftCorr[4] = sm4AlignYShiftCorr;
1937 73 : alignRotationCorr[4] = sm4AlignRotationCorr;
1938 73 : alignYShiftCorr[5] = sm5AlignYShiftCorr;
1939 73 : alignRotationCorr[5] = sm5AlignRotationCorr;
1940 73 : alignYShiftCorr[6] = sm6AlignYShiftCorr;
1941 73 : alignRotationCorr[6] = sm6AlignRotationCorr;
1942 73 : alignYShiftCorr[7] = sm7AlignYShiftCorr;
1943 73 : alignRotationCorr[7] = sm7AlignRotationCorr;
1944 73 : alignYShiftCorr[8] = sm8AlignYShiftCorr;
1945 73 : alignRotationCorr[8] = sm8AlignRotationCorr;
1946 73 : alignYShiftCorr[9] = sm9AlignYShiftCorr;
1947 73 : alignRotationCorr[9] = sm9AlignRotationCorr;
1948 73 : alignYShiftCorr[10] = sm10AlignYShiftCorr;
1949 73 : alignRotationCorr[10] = sm10AlignRotationCorr;
1950 73 : alignYShiftCorr[11] = sm11AlignYShiftCorr;
1951 73 : alignRotationCorr[11] = sm11AlignRotationCorr;
1952 73 : alignYShiftCorr[12] = sm12AlignYShiftCorr;
1953 73 : alignRotationCorr[12] = sm12AlignRotationCorr;
1954 73 : alignYShiftCorr[13] = sm13AlignYShiftCorr;
1955 73 : alignRotationCorr[13] = sm13AlignRotationCorr;
1956 73 : alignYShiftCorr[14] = sm14AlignYShiftCorr;
1957 73 : alignRotationCorr[14] = sm14AlignRotationCorr;
1958 73 : alignYShiftCorr[15] = sm15AlignYShiftCorr;
1959 73 : alignRotationCorr[15] = sm15AlignRotationCorr;
1960 73 : alignYShiftCorr[16] = sm16AlignYShiftCorr;
1961 73 : alignRotationCorr[16] = sm16AlignRotationCorr;
1962 73 : alignYShiftCorr[17] = sm17AlignYShiftCorr;
1963 73 : alignRotationCorr[17] = sm17AlignRotationCorr;
1964 :
1965 73 : Int_t sm=chamber/30;
1966 73 : Int_t det=chamber%30;
1967 73 : *shiftCorrFactor=alignYShiftCorr[sm][det];
1968 73 : *rotationCorrFactor=alignRotationCorr[sm][det];
1969 73 : }
1970 :
1971 :
|