1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /* $Id: AliTRDgtuParam.cxx 28397 2008-09-02 09:33:00Z cblume $ */
18 ////////////////////////////////////////////////////////////////////////////
20 // Parameters for GTU simulation //
22 // Author: J. Klein (Jochen.Klein@cern.ch) //
24 ////////////////////////////////////////////////////////////////////////////
29 #include "TDecompLU.h"
30 #include "TGraphAsymmErrors.h"
34 #include "AliTRDgtuParam.h"
35 #include "AliTRDgeometry.h"
36 #include "AliTRDpadPlane.h"
38 ClassImp(AliTRDgtuParam)
40 AliTRDgtuParam *AliTRDgtuParam::fgInstance = 0;
41 Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE;
43 // ----- matching windows -----
44 Int_t AliTRDgtuParam::fgDeltaY = 19;
45 Int_t AliTRDgtuParam::fgDeltaAlpha = 21;
47 // ----- Bin widths (granularity) -----
48 const Float_t AliTRDgtuParam::fgkBinWidthY = 160e-4;
49 const Float_t AliTRDgtuParam::fgkBinWidthdY = 140e-4;
51 // ----- Bit widths (used for internal representation) -----
52 const Int_t AliTRDgtuParam::fgkBitWidthY = 13;
53 const Int_t AliTRDgtuParam::fgkBitWidthdY = 7;
54 const Int_t AliTRDgtuParam::fgkBitWidthYProj = 10;
55 const Int_t AliTRDgtuParam::fgkBitExcessY = 4;
56 const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10;
57 const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2;
59 // ----- z-channel tables -----
60 const Bool_t AliTRDgtuParam::fgZChannelMap[5][16][6][16] = {
62 { /* --- Stack 0 --- */
64 /* . x x . . . . . . . . . . . . . */
65 /* x . . . . . . . . . . . . . . . */
66 /* X . . . . . . . . . . . . . . . */
67 /* x x . . . . . . . . . . . . . . */
68 /* x x . . . . . . . . . . . . . . */
69 /* x . . . . . . . . . . . . . . . */
71 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
72 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
73 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
74 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
75 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
76 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
78 /* . . x x . . . . . . . . . . . . */
79 /* x x . . . . . . . . . . . . . . */
80 /* . X . . . . . . . . . . . . . . */
81 /* . x x . . . . . . . . . . . . . */
82 /* . x x . . . . . . . . . . . . . */
83 /* x x . . . . . . . . . . . . . . */
85 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
86 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
87 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
88 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
89 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
90 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
92 /* . . . x x . . . . . . . . . . . */
93 /* . x x . . . . . . . . . . . . . */
94 /* . . X . . . . . . . . . . . . . */
95 /* . . x x . . . . . . . . . . . . */
96 /* . . x x . . . . . . . . . . . . */
97 /* . x x . . . . . . . . . . . . . */
99 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
100 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
101 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
102 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
103 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
104 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
106 /* . . . . x x . . . . . . . . . . */
107 /* . . x x . . . . . . . . . . . . */
108 /* . . . X . . . . . . . . . . . . */
109 /* . . . x x . . . . . . . . . . . */
110 /* . . . x x . . . . . . . . . . . */
111 /* . . x x . . . . . . . . . . . . */
113 {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
114 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
115 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
116 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
117 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
118 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
120 /* . . . . . x x . . . . . . . . . */
121 /* . . . x x . . . . . . . . . . . */
122 /* . . . . X . . . . . . . . . . . */
123 /* . . . . x x . . . . . . . . . . */
124 /* . . . . x x . . . . . . . . . . */
125 /* . . . x x . . . . . . . . . . . */
127 {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
128 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
129 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
130 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
131 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
132 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
134 /* . . . . . . x x . . . . . . . . */
135 /* . . . . x x . . . . . . . . . . */
136 /* . . . . . X . . . . . . . . . . */
137 /* . . . . . x x . . . . . . . . . */
138 /* . . . . . x x . . . . . . . . . */
139 /* . . . . x x . . . . . . . . . . */
141 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
142 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
143 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
144 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
145 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
146 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
148 /* . . . . . . . x x . . . . . . . */
149 /* . . . . . x x . . . . . . . . . */
150 /* . . . . . . X . . . . . . . . . */
151 /* . . . . . . x x . . . . . . . . */
152 /* . . . . . . x x . . . . . . . . */
153 /* . . . . . x x . . . . . . . . . */
155 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
156 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
157 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
158 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
159 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
160 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
162 /* . . . . . . . . x x . . . . . . */
163 /* . . . . . . x x x . . . . . . . */
164 /* . . . . . . . X . . . . . . . . */
165 /* . . . . . . . x x . . . . . . . */
166 /* . . . . . . . x x . . . . . . . */
167 /* . . . . . . x x . . . . . . . . */
169 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
170 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
171 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
172 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
173 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
174 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
176 /* . . . . . . . . x x x . . . . . */
177 /* . . . . . . . x x x . . . . . . */
178 /* . . . . . . . . X . . . . . . . */
179 /* . . . . . . . x x x . . . . . . */
180 /* . . . . . . . x x x . . . . . . */
181 /* . . . . . . . x x . . . . . . . */
183 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
184 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
185 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
186 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
187 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
188 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
190 /* . . . . . . . . . x x x . . . . */
191 /* . . . . . . . . x x x . . . . . */
192 /* . . . . . . . . . X . . . . . . */
193 /* . . . . . . . . x x x . . . . . */
194 /* . . . . . . . . x x x . . . . . */
195 /* . . . . . . . . x x . . . . . . */
197 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
198 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
199 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
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, 0, 1, 1, 1, 0, 0, 0, 0, 0},
202 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
204 /* . . . . . . . . . . x x x . . . */
205 /* . . . . . . . . . x x x . . . . */
206 /* . . . . . . . . . . X . . . . . */
207 /* . . . . . . . . . x x x . . . . */
208 /* . . . . . . . . . x x x . . . . */
209 /* . . . . . . . . . x x . . . . . */
211 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
212 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
213 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
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, 0, 1, 1, 1, 0, 0, 0, 0},
216 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
218 /* . . . . . . . . . . . x x x . . */
219 /* . . . . . . . . . . x x x . . . */
220 /* . . . . . . . . . . . X . . . . */
221 /* . . . . . . . . . . x x x . . . */
222 /* . . . . . . . . . . x x x . . . */
223 /* . . . . . . . . . . x x . . . . */
225 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
226 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
227 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
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, 0, 1, 1, 1, 0, 0, 0},
230 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
232 /* . . . . . . . . . . . . x x x . */
233 /* . . . . . . . . . . . x x x . . */
234 /* . . . . . . . . . . . . X . . . */
235 /* . . . . . . . . . . . x x x . . */
236 /* . . . . . . . . . . . x x x . . */
237 /* . . . . . . . . . . . x x . . . */
239 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
240 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
241 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
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, 0, 1, 1, 1, 0, 0},
244 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
246 /* . . . . . . . . . . . . . x x x */
247 /* . . . . . . . . . . . . x x x . */
248 /* . . . . . . . . . . . . . X . . */
249 /* . . . . . . . . . . . . x x x . */
250 /* . . . . . . . . . . . . x x x . */
251 /* . . . . . . . . . . . . x x . . */
253 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
254 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
255 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
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, 0, 1, 1, 1, 0},
258 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
260 /* . . . . . . . . . . . . . . x x */
261 /* . . . . . . . . . . . . . x x x */
262 /* . . . . . . . . . . . . . . X . */
263 /* . . . . . . . . . . . . . x x x */
264 /* . . . . . . . . . . . . . x x x */
265 /* . . . . . . . . . . . . . x x . */
267 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
268 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
269 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
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, 0, 1, 1, 1},
272 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
274 /* . . . . . . . . . . . . . . . x */
275 /* . . . . . . . . . . . . . . x x */
276 /* . . . . . . . . . . . . . . . X */
277 /* . . . . . . . . . . . . . . x x */
278 /* . . . . . . . . . . . . . . x x */
279 /* . . . . . . . . . . . . . . x x */
281 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
282 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
283 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
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, 0, 1, 1},
286 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
288 { /* --- Stack 1 --- */
290 /* x x x . . . . . . . . . . . . . */
291 /* x x . . . . . . . . . . . . . . */
292 /* X . . . . . . . . . . . . . . . */
293 /* x x . . . . . . . . . . . . . . */
294 /* x x . . . . . . . . . . . . . . */
295 /* x . . . . . . . . . . . . . . . */
297 {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
298 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
299 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
300 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
301 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
302 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
304 /* . x x x . . . . . . . . . . . . */
305 /* x x x . . . . . . . . . . . . . */
306 /* . X . . . . . . . . . . . . . . */
307 /* x x x . . . . . . . . . . . . . */
308 /* x x x . . . . . . . . . . . . . */
309 /* x x . . . . . . . . . . . . . . */
311 {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
312 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
313 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
314 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
315 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
316 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
318 /* . . x x x . . . . . . . . . . . */
319 /* . x x x . . . . . . . . . . . . */
320 /* . . X . . . . . . . . . . . . . */
321 /* . x x x . . . . . . . . . . . . */
322 /* . x x x . . . . . . . . . . . . */
323 /* . x x . . . . . . . . . . . . . */
325 {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
326 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
327 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
328 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
329 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
330 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
332 /* . . . x x x . . . . . . . . . . */
333 /* . . x x x . . . . . . . . . . . */
334 /* . . . X . . . . . . . . . . . . */
335 /* . . x x x . . . . . . . . . . . */
336 /* . . x x x . . . . . . . . . . . */
337 /* . . x x . . . . . . . . . . . . */
339 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
340 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
341 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
342 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
343 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
344 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
346 /* . . . . x x x . . . . . . . . . */
347 /* . . . x x x . . . . . . . . . . */
348 /* . . . . X . . . . . . . . . . . */
349 /* . . . x x x . . . . . . . . . . */
350 /* . . . x x x . . . . . . . . . . */
351 /* . . . x x . . . . . . . . . . . */
353 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
354 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
355 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
356 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
357 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
358 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
360 /* . . . . . x x x . . . . . . . . */
361 /* . . . . x x x . . . . . . . . . */
362 /* . . . . . X . . . . . . . . . . */
363 /* . . . . x x . . . . . . . . . . */
364 /* . . . . x x . . . . . . . . . . */
365 /* . . . . x x . . . . . . . . . . */
367 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
368 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
369 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
370 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
371 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
372 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
374 /* . . . . . . x x x . . . . . . . */
375 /* . . . . . . x x . . . . . . . . */
376 /* . . . . . . X . . . . . . . . . */
377 /* . . . . . x x . . . . . . . . . */
378 /* . . . . . x x . . . . . . . . . */
379 /* . . . . . x x . . . . . . . . . */
381 {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
382 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
383 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
384 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
385 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
386 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
388 /* . . . . . . . x x . . . . . . . */
389 /* . . . . . . . x x . . . . . . . */
390 /* . . . . . . . X . . . . . . . . */
391 /* . . . . . . x x . . . . . . . . */
392 /* . . . . . . x x . . . . . . . . */
393 /* . . . . . . x x . . . . . . . . */
395 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
396 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
397 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
398 {0, 0, 0, 0, 0, 0, 1, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
402 /* . . . . . . . . x x . . . . . . */
403 /* . . . . . . . . x x . . . . . . */
404 /* . . . . . . . . X . . . . . . . */
405 /* . . . . . . . x x . . . . . . . */
406 /* . . . . . . . x x . . . . . . . */
407 /* . . . . . . . x x . . . . . . . */
409 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
410 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
411 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
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, 1, 0, 0, 0, 0, 0, 0, 0}},
416 /* . . . . . . . . . x x . . . . . */
417 /* . . . . . . . . . x x . . . . . */
418 /* . . . . . . . . . X . . . . . . */
419 /* . . . . . . . . x x . . . . . . */
420 /* . . . . . . . . x x . . . . . . */
421 /* . . . . . . . . x x . . . . . . */
423 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
424 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
425 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
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, 1, 0, 0, 0, 0, 0, 0}},
430 /* . . . . . . . . . . x x . . . . */
431 /* . . . . . . . . . . x x . . . . */
432 /* . . . . . . . . . . X . . . . . */
433 /* . . . . . . . . . x x . . . . . */
434 /* . . . . . . . . . x x . . . . . */
435 /* . . . . . . . . . x x . . . . . */
437 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
438 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
439 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
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, 1, 0, 0, 0, 0, 0}},
444 /* . . . . . . . . . . . x x . . . */
445 /* . . . . . . . . . . . x x . . . */
446 /* . . . . . . . . . . . X . . . . */
447 /* . . . . . . . . . . x x . . . . */
448 /* . . . . . . . . . . x x . . . . */
449 /* . . . . . . . . . . x x . . . . */
451 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
452 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
453 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
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, 1, 0, 0, 0, 0}},
458 /* . . . . . . . . . . . . x x . . */
459 /* . . . . . . . . . . . . x x . . */
460 /* . . . . . . . . . . . . X . . . */
461 /* . . . . . . . . . . . x x . . . */
462 /* . . . . . . . . . . . x x . . . */
463 /* . . . . . . . . . . . x x . . . */
465 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
466 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
467 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
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, 1, 0, 0, 0}},
472 /* . . . . . . . . . . . . . x x . */
473 /* . . . . . . . . . . . . . x x . */
474 /* . . . . . . . . . . . . . X . . */
475 /* . . . . . . . . . . . . x x . . */
476 /* . . . . . . . . . . . . x x . . */
477 /* . . . . . . . . . . . . x x . . */
479 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
480 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
481 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
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, 1, 0, 0}},
486 /* . . . . . . . . . . . . . . x x */
487 /* . . . . . . . . . . . . . . x x */
488 /* . . . . . . . . . . . . . . X . */
489 /* . . . . . . . . . . . . . x x . */
490 /* . . . . . . . . . . . . . x x . */
491 /* . . . . . . . . . . . . . x x . */
493 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
494 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
495 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
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, 1, 0}},
500 /* . . . . . . . . . . . . . . . x */
501 /* . . . . . . . . . . . . . . . x */
502 /* . . . . . . . . . . . . . . . X */
503 /* . . . . . . . . . . . . . . x x */
504 /* . . . . . . . . . . . . . . x x */
505 /* . . . . . . . . . . . . . . x x */
507 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
508 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
509 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
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, 1}}},
514 { /* --- Stack 2 --- */
516 /* x x . . . . . . . . . . */
517 /* x x . . . . . . . . . . */
518 /* X . . . . . . . . . . . */
519 /* x . . . . . . . . . . . */
520 /* x . . . . . . . . . . . */
521 /* x . . . . . . . . . . . */
523 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
524 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
525 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
526 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
527 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
528 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
530 /* . x x . . . . . . . . . */
531 /* . x x . . . . . . . . . */
532 /* . X . . . . . . . . . . */
533 /* x x . . . . . . . . . . */
534 /* x x . . . . . . . . . . */
535 /* x x . . . . . . . . . . */
537 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
538 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
539 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
544 /* . . x x . . . . . . . . */
545 /* . . x x . . . . . . . . */
546 /* . . X . . . . . . . . . */
547 /* . x x . . . . . . . . . */
548 /* . x x . . . . . . . . . */
549 /* . x x . . . . . . . . . */
551 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
552 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
553 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
558 /* . . . x x . . . . . . . */
559 /* . . . x x . . . . . . . */
560 /* . . . X . . . . . . . . */
561 /* . . x x x . . . . . . . */
562 /* . . x x x . . . . . . . */
563 /* . . x x x . . . . . . . */
565 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
566 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
567 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
568 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
569 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
570 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
572 /* . . . x x x . . . . . . */
573 /* . . . x x x . . . . . . */
574 /* . . . . X . . . . . . . */
575 /* . . . x x x . . . . . . */
576 /* . . . x x x . . . . . . */
577 /* . . . x x x . . . . . . */
579 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
580 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
581 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
582 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
583 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
584 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
586 /* . . . . x x x . . . . . */
587 /* . . . . x x x . . . . . */
588 /* . . . . . X . . . . . . */
589 /* . . . . x x x . . . . . */
590 /* . . . . x x x . . . . . */
591 /* . . . . x x x . . . . . */
593 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
594 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
595 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
596 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
597 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
598 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
600 /* . . . . . x x x . . . . */
601 /* . . . . . x x x . . . . */
602 /* . . . . . . X . . . . . */
603 /* . . . . . x x x . . . . */
604 /* . . . . . x x x . . . . */
605 /* . . . . . x x x . . . . */
607 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
608 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
609 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
610 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
611 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
612 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
614 /* . . . . . . x x x . . . */
615 /* . . . . . . x x x . . . */
616 /* . . . . . . . X . . . . */
617 /* . . . . . . x x x . . . */
618 /* . . . . . . x x x . . . */
619 /* . . . . . . x x x . . . */
621 {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
622 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
623 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
624 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
625 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
626 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
628 /* . . . . . . . x x . . . */
629 /* . . . . . . . x x . . . */
630 /* . . . . . . . . X . . . */
631 /* . . . . . . . x x x . . */
632 /* . . . . . . . x x x . . */
633 /* . . . . . . . x x x . . */
635 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
636 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
637 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
638 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
639 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
640 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}},
642 /* . . . . . . . . x x . . */
643 /* . . . . . . . . x x . . */
644 /* . . . . . . . . . X . . */
645 /* . . . . . . . . . x x . */
646 /* . . . . . . . . . x x . */
647 /* . . . . . . . . . x x . */
649 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
650 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
651 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
652 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
653 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
654 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
656 /* . . . . . . . . . x x . */
657 /* . . . . . . . . . x x . */
658 /* . . . . . . . . . . X . */
659 /* . . . . . . . . . . x x */
660 /* . . . . . . . . . . x x */
661 /* . . . . . . . . . . x x */
663 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
664 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
665 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
666 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
667 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
668 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
670 /* . . . . . . . . . . x x */
671 /* . . . . . . . . . . x x */
672 /* . . . . . . . . . . . X */
673 /* . . . . . . . . . . . x */
674 /* . . . . . . . . . . . x */
675 /* . . . . . . . . . . . x */
677 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
678 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
679 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
680 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
681 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
682 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
684 /* . . . . . . . . . . . . */
685 /* . . . . . . . . . . . . */
686 /* . . . . . . . . . . . . */
687 /* . . . . . . . . . . . . */
688 /* . . . . . . . . . . . . */
689 /* . . . . . . . . . . . . */
691 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
692 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
693 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
694 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
695 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
696 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
698 /* . . . . . . . . . . . . */
699 /* . . . . . . . . . . . . */
700 /* . . . . . . . . . . . . */
701 /* . . . . . . . . . . . . */
702 /* . . . . . . . . . . . . */
703 /* . . . . . . . . . . . . */
705 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
706 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
707 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
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}},
712 /* . . . . . . . . . . . . */
713 /* . . . . . . . . . . . . */
714 /* . . . . . . . . . . . . */
715 /* . . . . . . . . . . . . */
716 /* . . . . . . . . . . . . */
717 /* . . . . . . . . . . . . */
719 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
720 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
721 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
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}},
726 /* . . . . . . . . . . . . */
727 /* . . . . . . . . . . . . */
728 /* . . . . . . . . . . . . */
729 /* . . . . . . . . . . . . */
730 /* . . . . . . . . . . . . */
731 /* . . . . . . . . . . . . */
733 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
734 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
735 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
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}}},
740 { /* --- Stack 3 --- */
742 /* x . . . . . . . . . . . . . . . */
743 /* x . . . . . . . . . . . . . . . */
744 /* X . . . . . . . . . . . . . . . */
745 /* x x . . . . . . . . . . . . . . */
746 /* x x . . . . . . . . . . . . . . */
747 /* x x . . . . . . . . . . . . . . */
749 {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
750 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
751 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
752 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
753 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
754 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
756 /* x x . . . . . . . . . . . . . . */
757 /* x x . . . . . . . . . . . . . . */
758 /* . X . . . . . . . . . . . . . . */
759 /* . x x . . . . . . . . . . . . . */
760 /* . x x . . . . . . . . . . . . . */
761 /* . x x . . . . . . . . . . . . . */
763 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
764 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
765 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
766 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
767 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
768 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
770 /* . x x . . . . . . . . . . . . . */
771 /* . x x . . . . . . . . . . . . . */
772 /* . . X . . . . . . . . . . . . . */
773 /* . . x x . . . . . . . . . . . . */
774 /* . . x x . . . . . . . . . . . . */
775 /* . . x x . . . . . . . . . . . . */
777 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
778 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
779 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
780 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
781 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
782 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
784 /* . . x x . . . . . . . . . . . . */
785 /* . . x x . . . . . . . . . . . . */
786 /* . . . X . . . . . . . . . . . . */
787 /* . . . x x . . . . . . . . . . . */
788 /* . . . x x . . . . . . . . . . . */
789 /* . . . x x . . . . . . . . . . . */
791 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
792 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
793 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
794 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
795 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
796 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
798 /* . . . x x . . . . . . . . . . . */
799 /* . . . x x . . . . . . . . . . . */
800 /* . . . . X . . . . . . . . . . . */
801 /* . . . . x x . . . . . . . . . . */
802 /* . . . . x x . . . . . . . . . . */
803 /* . . . . x x . . . . . . . . . . */
805 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
806 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
807 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
808 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
809 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
810 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
812 /* . . . . x x . . . . . . . . . . */
813 /* . . . . x x . . . . . . . . . . */
814 /* . . . . . X . . . . . . . . . . */
815 /* . . . . . x x . . . . . . . . . */
816 /* . . . . . x x . . . . . . . . . */
817 /* . . . . . x x . . . . . . . . . */
819 {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
820 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
821 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
822 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
823 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
824 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
826 /* . . . . . x x . . . . . . . . . */
827 /* . . . . . x x . . . . . . . . . */
828 /* . . . . . . X . . . . . . . . . */
829 /* . . . . . . x x . . . . . . . . */
830 /* . . . . . . x x . . . . . . . . */
831 /* . . . . . . x x . . . . . . . . */
833 {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
834 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
835 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
836 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
837 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
838 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
840 /* . . . . . . x x . . . . . . . . */
841 /* . . . . . . x x . . . . . . . . */
842 /* . . . . . . . X . . . . . . . . */
843 /* . . . . . . . x x . . . . . . . */
844 /* . . . . . . . x x . . . . . . . */
845 /* . . . . . . . x x . . . . . . . */
847 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
848 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
849 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
850 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
851 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
852 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
854 /* . . . . . . . x x . . . . . . . */
855 /* . . . . . . . x x . . . . . . . */
856 /* . . . . . . . . X . . . . . . . */
857 /* . . . . . . . . x x . . . . . . */
858 /* . . . . . . . . x x . . . . . . */
859 /* . . . . . . . . x x . . . . . . */
861 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
862 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
863 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
864 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
865 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
866 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
868 /* . . . . . . . x x x . . . . . . */
869 /* . . . . . . . . x x . . . . . . */
870 /* . . . . . . . . . X . . . . . . */
871 /* . . . . . . . . . x x . . . . . */
872 /* . . . . . . . . . x x . . . . . */
873 /* . . . . . . . . . x x . . . . . */
875 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
876 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
877 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
878 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
879 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
880 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
882 /* . . . . . . . . x x x . . . . . */
883 /* . . . . . . . . . x x x . . . . */
884 /* . . . . . . . . . . X . . . . . */
885 /* . . . . . . . . . . x x . . . . */
886 /* . . . . . . . . . . x x . . . . */
887 /* . . . . . . . . . . x x . . . . */
889 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
890 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
891 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
892 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
893 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
894 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
896 /* . . . . . . . . . x x x . . . . */
897 /* . . . . . . . . . . x x x . . . */
898 /* . . . . . . . . . . . X . . . . */
899 /* . . . . . . . . . . x x x . . . */
900 /* . . . . . . . . . . x x x . . . */
901 /* . . . . . . . . . . . x x . . . */
903 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
904 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
905 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
906 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
907 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
908 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
910 /* . . . . . . . . . . x x x . . . */
911 /* . . . . . . . . . . . x x x . . */
912 /* . . . . . . . . . . . . X . . . */
913 /* . . . . . . . . . . . x x x . . */
914 /* . . . . . . . . . . . x x x . . */
915 /* . . . . . . . . . . . . x x . . */
917 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
918 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
919 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
920 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
921 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
922 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
924 /* . . . . . . . . . . . x x x . . */
925 /* . . . . . . . . . . . . x x x . */
926 /* . . . . . . . . . . . . . X . . */
927 /* . . . . . . . . . . . . x x x . */
928 /* . . . . . . . . . . . . x x x . */
929 /* . . . . . . . . . . . . . x x . */
931 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
932 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
933 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
934 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
935 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
936 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
938 /* . . . . . . . . . . . . x x x . */
939 /* . . . . . . . . . . . . . x x x */
940 /* . . . . . . . . . . . . . . X . */
941 /* . . . . . . . . . . . . . x x x */
942 /* . . . . . . . . . . . . . x x x */
943 /* . . . . . . . . . . . . . . x x */
945 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
946 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
947 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
948 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
949 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
950 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
952 /* . . . . . . . . . . . . . x x x */
953 /* . . . . . . . . . . . . . . x x */
954 /* . . . . . . . . . . . . . . . X */
955 /* . . . . . . . . . . . . . . x x */
956 /* . . . . . . . . . . . . . . x x */
957 /* . . . . . . . . . . . . . . . x */
959 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
960 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
961 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
962 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
963 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
964 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}},
966 { /* --- Stack 4 --- */
968 /* x . . . . . . . . . . . . . . . */
969 /* x x . . . . . . . . . . . . . . */
970 /* X . . . . . . . . . . . . . . . */
971 /* x x . . . . . . . . . . . . . . */
972 /* x x . . . . . . . . . . . . . . */
973 /* x x . . . . . . . . . . . . . . */
975 {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
976 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
977 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
978 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
979 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
980 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
982 /* x x . . . . . . . . . . . . . . */
983 /* x x x . . . . . . . . . . . . . */
984 /* . X . . . . . . . . . . . . . . */
985 /* x x x . . . . . . . . . . . . . */
986 /* x x x . . . . . . . . . . . . . */
987 /* . x x . . . . . . . . . . . . . */
989 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
990 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
991 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
992 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
993 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
994 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
996 /* x x x . . . . . . . . . . . . . */
997 /* . x x x . . . . . . . . . . . . */
998 /* . . X . . . . . . . . . . . . . */
999 /* . x x x . . . . . . . . . . . . */
1000 /* . x x x . . . . . . . . . . . . */
1001 /* . . x x . . . . . . . . . . . . */
1003 {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1004 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1005 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1006 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1007 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1008 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1010 /* . x x x . . . . . . . . . . . . */
1011 /* . . x x x . . . . . . . . . . . */
1012 /* . . . X . . . . . . . . . . . . */
1013 /* . . x x x . . . . . . . . . . . */
1014 /* . . x x x . . . . . . . . . . . */
1015 /* . . . x x . . . . . . . . . . . */
1017 {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1018 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1019 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1020 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1021 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1022 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1024 /* . . x x x . . . . . . . . . . . */
1025 /* . . . x x x . . . . . . . . . . */
1026 /* . . . . X . . . . . . . . . . . */
1027 /* . . . x x x . . . . . . . . . . */
1028 /* . . . x x x . . . . . . . . . . */
1029 /* . . . . x x . . . . . . . . . . */
1031 {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1032 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1033 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1034 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1035 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1036 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1038 /* . . . x x x . . . . . . . . . . */
1039 /* . . . . x x x . . . . . . . . . */
1040 /* . . . . . X . . . . . . . . . . */
1041 /* . . . . x x x . . . . . . . . . */
1042 /* . . . . x x x . . . . . . . . . */
1043 /* . . . . . x x . . . . . . . . . */
1045 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1046 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1047 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1048 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1049 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1050 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1052 /* . . . . x x x . . . . . . . . . */
1053 /* . . . . . x x x . . . . . . . . */
1054 /* . . . . . . X . . . . . . . . . */
1055 /* . . . . . x x x . . . . . . . . */
1056 /* . . . . . x x x . . . . . . . . */
1057 /* . . . . . . x x . . . . . . . . */
1059 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1060 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1061 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1062 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1063 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1064 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
1066 /* . . . . . x x x . . . . . . . . */
1067 /* . . . . . . x x x . . . . . . . */
1068 /* . . . . . . . X . . . . . . . . */
1069 /* . . . . . . x x x . . . . . . . */
1070 /* . . . . . . x x x . . . . . . . */
1071 /* . . . . . . . x x . . . . . . . */
1073 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1074 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1075 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1076 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1077 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1078 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
1080 /* . . . . . . x x . . . . . . . . */
1081 /* . . . . . . . x x x . . . . . . */
1082 /* . . . . . . . . X . . . . . . . */
1083 /* . . . . . . . x x . . . . . . . */
1084 /* . . . . . . . x x . . . . . . . */
1085 /* . . . . . . . . x x . . . . . . */
1087 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1088 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
1089 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
1090 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1091 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1092 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
1094 /* . . . . . . . x x . . . . . . . */
1095 /* . . . . . . . . . x x . . . . . */
1096 /* . . . . . . . . . X . . . . . . */
1097 /* . . . . . . . . x x . . . . . . */
1098 /* . . . . . . . . x x . . . . . . */
1099 /* . . . . . . . . . x x . . . . . */
1101 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1102 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1103 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
1104 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1105 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1106 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
1108 /* . . . . . . . . x x . . . . . . */
1109 /* . . . . . . . . . . x x . . . . */
1110 /* . . . . . . . . . . X . . . . . */
1111 /* . . . . . . . . . x x . . . . . */
1112 /* . . . . . . . . . x x . . . . . */
1113 /* . . . . . . . . . . x x . . . . */
1115 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1116 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1117 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
1118 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 1, 0, 0, 0, 0}},
1122 /* . . . . . . . . . x x . . . . . */
1123 /* . . . . . . . . . . . x x . . . */
1124 /* . . . . . . . . . . . X . . . . */
1125 /* . . . . . . . . . . x x . . . . */
1126 /* . . . . . . . . . . x x . . . . */
1127 /* . . . . . . . . . . . x x . . . */
1129 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1130 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1131 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
1132 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 1, 0, 0, 0}},
1136 /* . . . . . . . . . . x x . . . . */
1137 /* . . . . . . . . . . . . x x . . */
1138 /* . . . . . . . . . . . . X . . . */
1139 /* . . . . . . . . . . . x x . . . */
1140 /* . . . . . . . . . . . x x . . . */
1141 /* . . . . . . . . . . . . x x . . */
1143 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1144 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1145 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
1146 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 1, 0, 0}},
1150 /* . . . . . . . . . . . x x . . . */
1151 /* . . . . . . . . . . . . . x x . */
1152 /* . . . . . . . . . . . . . X . . */
1153 /* . . . . . . . . . . . . x x . . */
1154 /* . . . . . . . . . . . . x x . . */
1155 /* . . . . . . . . . . . . . x x . */
1157 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1158 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1159 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
1160 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 1, 0}},
1164 /* . . . . . . . . . . . . x x . . */
1165 /* . . . . . . . . . . . . . . x x */
1166 /* . . . . . . . . . . . . . . X . */
1167 /* . . . . . . . . . . . . . x x . */
1168 /* . . . . . . . . . . . . . x x . */
1169 /* . . . . . . . . . . . . . . x x */
1171 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1172 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1173 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
1174 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 1}},
1178 /* . . . . . . . . . . . . . x x . */
1179 /* . . . . . . . . . . . . . . . x */
1180 /* . . . . . . . . . . . . . . . X */
1181 /* . . . . . . . . . . . . . . x x */
1182 /* . . . . . . . . . . . . . . x x */
1183 /* . . . . . . . . . . . . . . . x */
1185 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1186 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1187 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1188 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
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, 0, 1}}}
1194 AliTRDgtuParam::AliTRDgtuParam() :
1196 fCurrTrackletMask(0),
1202 fGeo = new AliTRDgeometry();
1203 fRefLayers = new Int_t[fgkNRefLayers];
1207 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
1213 GenerateZChannelMap();
1216 AliTRDgtuParam::~AliTRDgtuParam()
1221 delete [] fRefLayers;
1224 AliTRDgtuParam* AliTRDgtuParam::Instance()
1226 // get (or create) the single instance
1228 if (fgInstance == 0)
1229 fgInstance = new AliTRDgtuParam();
1234 void AliTRDgtuParam::Terminate()
1236 // destruct the instance
1238 if (fgInstance != 0) {
1244 Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1246 return (fZSubChannel[stack][zchannel][layer][zpos] != 0);
1249 Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1251 return fZSubChannel[stack][zchannel][layer][zpos];
1254 Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx) const
1256 // returns the reference layer indexed by refLayerIdx
1258 if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers)
1259 return fRefLayers[refLayerIdx];
1264 Int_t AliTRDgtuParam::GenerateZChannelMap()
1266 // generate the z-channel map
1267 // assuming that the tracks come from the vertex
1268 // +/- fVertexSize in z-direction
1270 if (fgUseGTUconst) {
1271 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1272 for (Int_t iChannel = 0; iChannel < fGeo->GetRowMax(fgkFixLayer, iStack, 0); iChannel++) {
1273 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1274 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1275 if (fgZChannelMap[iStack][iChannel][iLayer][iRow] != 0) {
1276 fZChannelMap[iStack][iChannel][iLayer][iRow] = 1;
1277 fZSubChannel[iStack][iChannel % fgkNZChannels][iLayer][iRow] = iChannel / fgkNZChannels + 1;
1287 Int_t iSec = 0; // sector is irrelevant
1288 Bool_t collision = kFALSE;
1290 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1292 Float_t x[6] = { 0 };
1293 Float_t z[6][16] = {{ 0 }};
1294 Float_t dZ[6][16] = {{ 0 }};
1296 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1297 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1298 x[iLayer] = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ???
1299 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1300 z[iLayer][iRow] = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad
1301 dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction
1302 for (Int_t i = 0; i < fgkNZChannels; i++)
1303 fZSubChannel[iStack][i][iLayer][iRow] = 0;
1307 for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
1309 Double_t fixZmin = z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow];
1310 Double_t fixZmax = z[fgkFixLayer][fixRow];
1311 Double_t fixX = x[fgkFixLayer] + 1.5; // ??? 1.5 from where?
1313 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1314 Double_t leftZ, rightZ;
1316 if (iLayer <= fgkFixLayer) {
1317 leftZ = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1318 rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1321 leftZ = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1322 rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1325 Double_t epsilon = 0.001;
1326 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1327 if ( (z[iLayer][iRow] ) > (leftZ + epsilon) &&
1328 (z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) {
1329 fZChannelMap[iStack][fixRow][iLayer][iRow] = 1;
1330 if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) {
1331 AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!");
1335 fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1;
1347 Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const
1349 // display the z-channel map
1351 if (zchannel >= fgkNZChannels) {
1352 AliError("Invalid Z channel!");
1356 Int_t zchmin = zchannel >= 0 ? zchannel : 0;
1357 Int_t zchmax = zchannel >= 0 ? zchannel + 1 : fgkNZChannels;
1360 TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping");
1362 TGraph **graphz = new TGraph*[fgkNZChannels];
1363 for (Int_t zch = zchmin; zch < zchmax; zch++)
1364 graphz[zch] = new TGraph;
1365 TGraphAsymmErrors *graph = new TGraphAsymmErrors();
1366 graph->SetTitle("Z-Channel Map");
1367 graph->SetPoint(i, 0, 0); // vertex
1368 graph->SetPointError(i++, 20, 20, 0, 0);
1369 // graph->SetRange //????
1370 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1371 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1372 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1373 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1374 graph->SetPoint(i, pp->GetRowPos(iRow), fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1375 graph->SetPointError(i++, pp->GetRowSize(iRow), 0, 0, 0);
1376 for (Int_t zch = zchmin; zch < zchmax; zch++)
1377 if (fZSubChannel[iStack][zch][iLayer][iRow] != 0)
1378 if (subchannel == 0 || fZSubChannel[iStack][zch][iLayer][iRow] == subchannel)
1379 graphz[zch]->SetPoint(j++, pp->GetRowPos(iRow) - pp->GetRowSize(iRow)/2, fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1383 graph->SetMarkerStyle(kDot);
1386 for (Int_t zch = zchmin; zch < zchmax; zch++) {
1387 graphz[zch]->SetMarkerStyle(kCircle);
1388 graphz[zch]->SetMarkerColor(zch+2);
1389 graphz[zch]->SetMarkerSize(0.3 + zch*0.2);
1390 graphz[zch]->Draw("P");
1391 gROOT->Add(graphz[zch]);
1397 Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const
1399 // get the constant for the calculation of alpha
1401 Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
1405 Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const
1407 // get the constant for the calculation of y_proj
1409 Float_t xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.;
1410 Int_t ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) );
1414 Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const
1416 return (Int_t) (- ( (layer % 2 ? 1 : -1) *
1417 (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2) *
1418 TMath::Tan(- 2.0 / 180.0 * TMath::Pi()) ) / 0.016 );
1421 Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask)
1423 // calculate the coefficients for the straight line fit
1424 // depending on the mask of contributing tracklets
1426 fCurrTrackletMask = trackletMask;
1428 TMatrix a(GetNLayers(), 3);
1429 TMatrix b(3, GetNLayers());
1432 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1433 if ( (trackletMask & (1 << layer)) == 0) {
1440 a(layer, 1) = fGeo->GetTime0(layer);
1441 a(layer, 2) = (layer % 2 ? 1 : -1) * fGeo->GetTime0(layer);
1450 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1451 fAki[layer] = b.GetMatrixArray()[layer];
1452 fBki[layer] = b.GetMatrixArray()[GetNLayers() + layer];
1453 fCki[layer] = b.GetMatrixArray()[2 * GetNLayers() + layer];
1458 Float_t AliTRDgtuParam::GetAki(Int_t k, Int_t i)
1460 // get A_ki for the calculation of the tracking parameters
1461 if (fCurrTrackletMask != k)
1462 GenerateRecoCoefficients(k);
1467 Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i)
1469 // get B_ki for the calculation of the tracking parameters
1471 if (fCurrTrackletMask != k)
1472 GenerateRecoCoefficients(k);
1477 Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i)
1479 // get B_ki for the calculation of the tracking parameters
1481 if (fCurrTrackletMask != k)
1482 GenerateRecoCoefficients(k);
1488 Float_t AliTRDgtuParam::GetD(Int_t k) const
1490 // get the determinant for the calculation of the tracking parameters
1493 for (Int_t i = 0; i < GetNLayers(); i++) {
1494 if ( !((k >> i) & 0x1) )
1496 Float_t xi = fGeo->GetTime0(i);
1499 t(2,0) += TMath::Power(-1, i) * xi;
1501 t(1,1) += TMath::Power(xi, 2);
1502 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1503 t(0,2) += TMath::Power(-1, i) * xi;
1504 t(1,2) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1505 t(2,2) += TMath::Power(xi, 2);
1507 return t.Determinant();
1510 Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k)
1512 // calculate the fitting parameters
1516 for (Int_t i = 0; i < GetNLayers(); i++) {
1517 if ( !((k >> i) & 0x1) )
1519 Float_t xi = fGeo->GetTime0(i);
1522 t(2,0) += TMath::Power(-1, i) * xi;
1524 t(1,1) += TMath::Power(xi, 2);
1525 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1526 t(0,2) -= TMath::Power(-1, i) * xi;
1527 t(1,2) -= TMath::Power(-1, i) * TMath::Power(xi, 2);
1528 t(2,2) -= TMath::Power(xi, 2);
1532 return lr.Decompose();
1536 Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2)
1538 // get the x-coord. of the assumed circle/straight line intersection points
1543 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1544 if ( (k >> layer) & 0x1 ) {
1552 if ( (l1 >= 0) && (l2 >= 0) ) {
1553 x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1);
1554 x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1);
1561 Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2) const
1563 // returns 0.3 * B * 1/a (1/128 GeV/c)
1564 // a : offset, b : slope (not used)
1566 if (fgUseGTUconst) {
1567 //----- calculation as in the GTU ----
1568 const Int_t maskIdLut[64] = {
1569 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1570 -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1571 -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1572 -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1575 const Int_t c1Lut[32] = {
1576 -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
1577 -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
1578 -2670, -2557, -2763, -2557, -2644, -2523, -1, -1,
1579 -1, -1, -1, -1, -1, -1, -1, -1
1582 Int_t layerMaskId = maskIdLut[layerMask];
1583 Int_t c1 = c1Lut[layerMaskId];
1584 Int_t c1Ext = c1 << 8;
1585 Int_t ptRawStage4 = c1Ext / a;
1586 Int_t ptRawComb4 = ptRawStage4;
1587 Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
1589 return ((Int_t) ptExtComb4/2);
1592 //----- simple calculation -----
1593 Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
1596 r = (0.3 * fMagField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
1598 Int_t pt = (Int_t) (2 * r);