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;
46 // ----- reference layers -----
47 Int_t AliTRDgtuParam::fgRefLayers[] = { 3, 2, 1 };
49 // ----- Bin widths (granularity) -----
50 const Float_t AliTRDgtuParam::fgkBinWidthY = 160e-4;
51 const Float_t AliTRDgtuParam::fgkBinWidthdY = 140e-4;
53 // ----- Bit widths (used for internal representation) -----
54 const Int_t AliTRDgtuParam::fgkBitWidthY = 13;
55 const Int_t AliTRDgtuParam::fgkBitWidthdY = 7;
56 const Int_t AliTRDgtuParam::fgkBitWidthYProj = 10;
57 const Int_t AliTRDgtuParam::fgkBitExcessY = 4;
58 const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10;
59 const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2;
61 // ----- z-channel tables -----
62 const Bool_t AliTRDgtuParam::fgZChannelMap[5][16][6][16] = {
64 { /* --- Stack 0 --- */
66 /* . x x . . . . . . . . . . . . . */
67 /* x . . . . . . . . . . . . . . . */
68 /* X . . . . . . . . . . . . . . . */
69 /* x x . . . . . . . . . . . . . . */
70 /* x x . . . . . . . . . . . . . . */
71 /* x . . . . . . . . . . . . . . . */
73 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
74 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
75 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
76 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
77 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
78 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
80 /* . . x x . . . . . . . . . . . . */
81 /* x x . . . . . . . . . . . . . . */
82 /* . X . . . . . . . . . . . . . . */
83 /* . x x . . . . . . . . . . . . . */
84 /* . x x . . . . . . . . . . . . . */
85 /* x x . . . . . . . . . . . . . . */
87 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
88 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
89 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
90 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
91 {0, 1, 1, 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}},
94 /* . . . x x . . . . . . . . . . . */
95 /* . x x . . . . . . . . . . . . . */
96 /* . . X . . . . . . . . . . . . . */
97 /* . . x x . . . . . . . . . . . . */
98 /* . . x x . . . . . . . . . . . . */
99 /* . x x . . . . . . . . . . . . . */
101 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
102 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
103 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
104 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
105 {0, 0, 1, 1, 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}},
108 /* . . . . x x . . . . . . . . . . */
109 /* . . x x . . . . . . . . . . . . */
110 /* . . . X . . . . . . . . . . . . */
111 /* . . . x x . . . . . . . . . . . */
112 /* . . . x x . . . . . . . . . . . */
113 /* . . x x . . . . . . . . . . . . */
115 {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
116 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
117 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
118 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
119 {0, 0, 0, 1, 1, 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}},
122 /* . . . . . x x . . . . . . . . . */
123 /* . . . x x . . . . . . . . . . . */
124 /* . . . . X . . . . . . . . . . . */
125 /* . . . . x x . . . . . . . . . . */
126 /* . . . . x x . . . . . . . . . . */
127 /* . . . x x . . . . . . . . . . . */
129 {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
130 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
131 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
132 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
133 {0, 0, 0, 0, 1, 1, 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}},
136 /* . . . . . . x x . . . . . . . . */
137 /* . . . . x x . . . . . . . . . . */
138 /* . . . . . X . . . . . . . . . . */
139 /* . . . . . x x . . . . . . . . . */
140 /* . . . . . x x . . . . . . . . . */
141 /* . . . . x x . . . . . . . . . . */
143 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
144 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
145 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
146 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
147 {0, 0, 0, 0, 0, 1, 1, 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}},
150 /* . . . . . . . x x . . . . . . . */
151 /* . . . . . x x . . . . . . . . . */
152 /* . . . . . . X . . . . . . . . . */
153 /* . . . . . . x x . . . . . . . . */
154 /* . . . . . . x x . . . . . . . . */
155 /* . . . . . x x . . . . . . . . . */
157 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
158 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
159 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
160 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
161 {0, 0, 0, 0, 0, 0, 1, 1, 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}},
164 /* . . . . . . . . x x . . . . . . */
165 /* . . . . . . x x x . . . . . . . */
166 /* . . . . . . . X . . . . . . . . */
167 /* . . . . . . . x x . . . . . . . */
168 /* . . . . . . . x x . . . . . . . */
169 /* . . . . . . x x . . . . . . . . */
171 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
172 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
173 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
174 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
175 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
176 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
178 /* . . . . . . . . x x x . . . . . */
179 /* . . . . . . . x x x . . . . . . */
180 /* . . . . . . . . X . . . . . . . */
181 /* . . . . . . . x x x . . . . . . */
182 /* . . . . . . . x x x . . . . . . */
183 /* . . . . . . . x x . . . . . . . */
185 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0},
188 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
189 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
190 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
192 /* . . . . . . . . . x x x . . . . */
193 /* . . . . . . . . x x x . . . . . */
194 /* . . . . . . . . . X . . . . . . */
195 /* . . . . . . . . x x x . . . . . */
196 /* . . . . . . . . x x x . . . . . */
197 /* . . . . . . . . x x . . . . . . */
199 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0},
202 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
203 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
204 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
206 /* . . . . . . . . . . x x x . . . */
207 /* . . . . . . . . . x x x . . . . */
208 /* . . . . . . . . . . X . . . . . */
209 /* . . . . . . . . . x x x . . . . */
210 /* . . . . . . . . . x x x . . . . */
211 /* . . . . . . . . . x x . . . . . */
213 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0},
216 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
217 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
218 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
220 /* . . . . . . . . . . . x x x . . */
221 /* . . . . . . . . . . x x x . . . */
222 /* . . . . . . . . . . . X . . . . */
223 /* . . . . . . . . . . x x x . . . */
224 /* . . . . . . . . . . x x x . . . */
225 /* . . . . . . . . . . x x . . . . */
227 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0},
230 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
231 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
232 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
234 /* . . . . . . . . . . . . x x x . */
235 /* . . . . . . . . . . . x x x . . */
236 /* . . . . . . . . . . . . X . . . */
237 /* . . . . . . . . . . . x x x . . */
238 /* . . . . . . . . . . . x x x . . */
239 /* . . . . . . . . . . . x x . . . */
241 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0},
244 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
245 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
246 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
248 /* . . . . . . . . . . . . . x x x */
249 /* . . . . . . . . . . . . x x x . */
250 /* . . . . . . . . . . . . . X . . */
251 /* . . . . . . . . . . . . x x x . */
252 /* . . . . . . . . . . . . x x x . */
253 /* . . . . . . . . . . . . x x . . */
255 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
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, 0, 1, 0, 0},
258 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
259 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
260 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
262 /* . . . . . . . . . . . . . . x x */
263 /* . . . . . . . . . . . . . x x x */
264 /* . . . . . . . . . . . . . . X . */
265 /* . . . . . . . . . . . . . x x x */
266 /* . . . . . . . . . . . . . x x x */
267 /* . . . . . . . . . . . . . x x . */
269 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
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, 0, 1, 0},
272 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
273 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
274 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
276 /* . . . . . . . . . . . . . . . x */
277 /* . . . . . . . . . . . . . . x x */
278 /* . . . . . . . . . . . . . . . X */
279 /* . . . . . . . . . . . . . . x x */
280 /* . . . . . . . . . . . . . . x x */
281 /* . . . . . . . . . . . . . . x x */
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, 0, 1},
286 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
287 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
288 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
290 { /* --- Stack 1 --- */
292 /* x x x . . . . . . . . . . . . . */
293 /* x x . . . . . . . . . . . . . . */
294 /* X . . . . . . . . . . . . . . . */
295 /* x x . . . . . . . . . . . . . . */
296 /* x x . . . . . . . . . . . . . . */
297 /* x . . . . . . . . . . . . . . . */
299 {{1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
302 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
303 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
304 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
306 /* . x x x . . . . . . . . . . . . */
307 /* x x x . . . . . . . . . . . . . */
308 /* . X . . . . . . . . . . . . . . */
309 /* x x x . . . . . . . . . . . . . */
310 /* x x x . . . . . . . . . . . . . */
311 /* x x . . . . . . . . . . . . . . */
313 {{0, 1, 1, 1, 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 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
316 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
317 {1, 1, 1, 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}},
320 /* . . x x x . . . . . . . . . . . */
321 /* . x x x . . . . . . . . . . . . */
322 /* . . X . . . . . . . . . . . . . */
323 /* . x x x . . . . . . . . . . . . */
324 /* . x x x . . . . . . . . . . . . */
325 /* . x x . . . . . . . . . . . . . */
327 {{0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
330 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
331 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
332 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
334 /* . . . x x x . . . . . . . . . . */
335 /* . . x x x . . . . . . . . . . . */
336 /* . . . X . . . . . . . . . . . . */
337 /* . . x x x . . . . . . . . . . . */
338 /* . . x x x . . . . . . . . . . . */
339 /* . . x x . . . . . . . . . . . . */
341 {{0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
344 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
345 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
346 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
348 /* . . . . x x x . . . . . . . . . */
349 /* . . . x x x . . . . . . . . . . */
350 /* . . . . X . . . . . . . . . . . */
351 /* . . . x x x . . . . . . . . . . */
352 /* . . . x x x . . . . . . . . . . */
353 /* . . . x x . . . . . . . . . . . */
355 {{0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
358 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
359 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
360 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
362 /* . . . . . x x x . . . . . . . . */
363 /* . . . . x x x . . . . . . . . . */
364 /* . . . . . X . . . . . . . . . . */
365 /* . . . . x x . . . . . . . . . . */
366 /* . . . . x x . . . . . . . . . . */
367 /* . . . . x x . . . . . . . . . . */
369 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
370 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
371 {0, 0, 0, 0, 0, 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},
373 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
374 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
376 /* . . . . . . x x x . . . . . . . */
377 /* . . . . . . x x . . . . . . . . */
378 /* . . . . . . X . . . . . . . . . */
379 /* . . . . . x x . . . . . . . . . */
380 /* . . . . . x x . . . . . . . . . */
381 /* . . . . . x x . . . . . . . . . */
383 {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
384 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
385 {0, 0, 0, 0, 0, 0, 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},
387 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
388 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
390 /* . . . . . . . x x . . . . . . . */
391 /* . . . . . . . x x . . . . . . . */
392 /* . . . . . . . X . . . . . . . . */
393 /* . . . . . . x x . . . . . . . . */
394 /* . . . . . . x x . . . . . . . . */
395 /* . . . . . . x x . . . . . . . . */
397 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
398 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
399 {0, 0, 0, 0, 0, 0, 0, 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},
401 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
402 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
404 /* . . . . . . . . x x . . . . . . */
405 /* . . . . . . . . x x . . . . . . */
406 /* . . . . . . . . X . . . . . . . */
407 /* . . . . . . . x x . . . . . . . */
408 /* . . . . . . . x x . . . . . . . */
409 /* . . . . . . . x x . . . . . . . */
411 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
412 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
413 {0, 0, 0, 0, 0, 0, 0, 0, 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},
415 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
416 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
418 /* . . . . . . . . . x x . . . . . */
419 /* . . . . . . . . . x x . . . . . */
420 /* . . . . . . . . . X . . . . . . */
421 /* . . . . . . . . x x . . . . . . */
422 /* . . . . . . . . x x . . . . . . */
423 /* . . . . . . . . x x . . . . . . */
425 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
426 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
427 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
428 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
429 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
430 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
432 /* . . . . . . . . . . x x . . . . */
433 /* . . . . . . . . . . x x . . . . */
434 /* . . . . . . . . . . X . . . . . */
435 /* . . . . . . . . . x x . . . . . */
436 /* . . . . . . . . . x x . . . . . */
437 /* . . . . . . . . . x x . . . . . */
439 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
440 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
441 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
442 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
443 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
444 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
446 /* . . . . . . . . . . . x x . . . */
447 /* . . . . . . . . . . . x x . . . */
448 /* . . . . . . . . . . . X . . . . */
449 /* . . . . . . . . . . x x . . . . */
450 /* . . . . . . . . . . x x . . . . */
451 /* . . . . . . . . . . x x . . . . */
453 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
454 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
455 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
456 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
457 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
458 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
460 /* . . . . . . . . . . . . x x . . */
461 /* . . . . . . . . . . . . x x . . */
462 /* . . . . . . . . . . . . X . . . */
463 /* . . . . . . . . . . . x x . . . */
464 /* . . . . . . . . . . . x x . . . */
465 /* . . . . . . . . . . . x x . . . */
467 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
468 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
469 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
470 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
471 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
472 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
474 /* . . . . . . . . . . . . . x x . */
475 /* . . . . . . . . . . . . . x x . */
476 /* . . . . . . . . . . . . . X . . */
477 /* . . . . . . . . . . . . x x . . */
478 /* . . . . . . . . . . . . x x . . */
479 /* . . . . . . . . . . . . x x . . */
481 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
482 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
483 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
484 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
485 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
486 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
488 /* . . . . . . . . . . . . . . x x */
489 /* . . . . . . . . . . . . . . x x */
490 /* . . . . . . . . . . . . . . X . */
491 /* . . . . . . . . . . . . . x x . */
492 /* . . . . . . . . . . . . . x x . */
493 /* . . . . . . . . . . . . . x x . */
495 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
496 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
497 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
498 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
499 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
500 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
502 /* . . . . . . . . . . . . . . . x */
503 /* . . . . . . . . . . . . . . . x */
504 /* . . . . . . . . . . . . . . . X */
505 /* . . . . . . . . . . . . . . x x */
506 /* . . . . . . . . . . . . . . x x */
507 /* . . . . . . . . . . . . . . x x */
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, 0, 1},
511 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
512 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
513 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
514 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
516 { /* --- Stack 2 --- */
518 /* x x . . . . . . . . . . */
519 /* x x . . . . . . . . . . */
520 /* X . . . . . . . . . . . */
521 /* x . . . . . . . . . . . */
522 /* x . . . . . . . . . . . */
523 /* x . . . . . . . . . . . */
525 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
526 {1, 1, 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},
529 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
530 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
532 /* . x x . . . . . . . . . */
533 /* . x x . . . . . . . . . */
534 /* . X . . . . . . . . . . */
535 /* x x . . . . . . . . . . */
536 /* x x . . . . . . . . . . */
537 /* x x . . . . . . . . . . */
539 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
540 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
541 {0, 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},
543 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
544 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
546 /* . . x x . . . . . . . . */
547 /* . . x x . . . . . . . . */
548 /* . . X . . . . . . . . . */
549 /* . x x . . . . . . . . . */
550 /* . x x . . . . . . . . . */
551 /* . x x . . . . . . . . . */
553 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
554 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
555 {0, 0, 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},
557 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
558 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
560 /* . . . x x . . . . . . . */
561 /* . . . x x . . . . . . . */
562 /* . . . X . . . . . . . . */
563 /* . . x x x . . . . . . . */
564 /* . . x x x . . . . . . . */
565 /* . . x x x . . . . . . . */
567 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
568 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
569 {0, 0, 0, 1, 0, 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},
571 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
572 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
574 /* . . . x x x . . . . . . */
575 /* . . . x x x . . . . . . */
576 /* . . . . X . . . . . . . */
577 /* . . . x x x . . . . . . */
578 /* . . . x x x . . . . . . */
579 /* . . . x x x . . . . . . */
581 {{0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 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},
585 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
586 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
588 /* . . . . x x x . . . . . */
589 /* . . . . x x x . . . . . */
590 /* . . . . . X . . . . . . */
591 /* . . . . x x x . . . . . */
592 /* . . . . x x x . . . . . */
593 /* . . . . x x x . . . . . */
595 {{0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 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},
599 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
600 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
602 /* . . . . . x x x . . . . */
603 /* . . . . . x x x . . . . */
604 /* . . . . . . X . . . . . */
605 /* . . . . . x x x . . . . */
606 /* . . . . . x x x . . . . */
607 /* . . . . . x x x . . . . */
609 {{0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 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},
613 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
614 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
616 /* . . . . . . x x x . . . */
617 /* . . . . . . x x x . . . */
618 /* . . . . . . . X . . . . */
619 /* . . . . . . x x x . . . */
620 /* . . . . . . x x x . . . */
621 /* . . . . . . x x x . . . */
623 {{0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
626 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
627 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
628 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
630 /* . . . . . . . x x . . . */
631 /* . . . . . . . x x . . . */
632 /* . . . . . . . . X . . . */
633 /* . . . . . . . x x x . . */
634 /* . . . . . . . x x x . . */
635 /* . . . . . . . x x x . . */
637 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
638 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
639 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
640 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
641 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
642 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}},
644 /* . . . . . . . . x x . . */
645 /* . . . . . . . . x x . . */
646 /* . . . . . . . . . X . . */
647 /* . . . . . . . . . x x . */
648 /* . . . . . . . . . x x . */
649 /* . . . . . . . . . x x . */
651 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
652 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
653 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
654 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
655 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
656 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
658 /* . . . . . . . . . x x . */
659 /* . . . . . . . . . x x . */
660 /* . . . . . . . . . . X . */
661 /* . . . . . . . . . . x x */
662 /* . . . . . . . . . . x x */
663 /* . . . . . . . . . . x x */
665 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
666 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
667 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
668 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
669 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
670 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
672 /* . . . . . . . . . . x x */
673 /* . . . . . . . . . . x x */
674 /* . . . . . . . . . . . X */
675 /* . . . . . . . . . . . x */
676 /* . . . . . . . . . . . x */
677 /* . . . . . . . . . . . x */
679 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
680 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
681 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
682 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
683 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
684 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
686 /* . . . . . . . . . . . . */
687 /* . . . . . . . . . . . . */
688 /* . . . . . . . . . . . . */
689 /* . . . . . . . . . . . . */
690 /* . . . . . . . . . . . . */
691 /* . . . . . . . . . . . . */
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},
697 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
698 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
700 /* . . . . . . . . . . . . */
701 /* . . . . . . . . . . . . */
702 /* . . . . . . . . . . . . */
703 /* . . . . . . . . . . . . */
704 /* . . . . . . . . . . . . */
705 /* . . . . . . . . . . . . */
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},
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}},
714 /* . . . . . . . . . . . . */
715 /* . . . . . . . . . . . . */
716 /* . . . . . . . . . . . . */
717 /* . . . . . . . . . . . . */
718 /* . . . . . . . . . . . . */
719 /* . . . . . . . . . . . . */
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},
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}},
728 /* . . . . . . . . . . . . */
729 /* . . . . . . . . . . . . */
730 /* . . . . . . . . . . . . */
731 /* . . . . . . . . . . . . */
732 /* . . . . . . . . . . . . */
733 /* . . . . . . . . . . . . */
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},
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}}},
742 { /* --- Stack 3 --- */
744 /* x . . . . . . . . . . . . . . . */
745 /* x . . . . . . . . . . . . . . . */
746 /* X . . . . . . . . . . . . . . . */
747 /* x x . . . . . . . . . . . . . . */
748 /* x x . . . . . . . . . . . . . . */
749 /* x x . . . . . . . . . . . . . . */
751 {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
752 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
753 {1, 0, 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},
755 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
756 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
758 /* x x . . . . . . . . . . . . . . */
759 /* x x . . . . . . . . . . . . . . */
760 /* . X . . . . . . . . . . . . . . */
761 /* . x x . . . . . . . . . . . . . */
762 /* . x x . . . . . . . . . . . . . */
763 /* . x x . . . . . . . . . . . . . */
765 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
766 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
767 {0, 1, 0, 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},
769 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
770 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
772 /* . x x . . . . . . . . . . . . . */
773 /* . x x . . . . . . . . . . . . . */
774 /* . . X . . . . . . . . . . . . . */
775 /* . . x x . . . . . . . . . . . . */
776 /* . . x x . . . . . . . . . . . . */
777 /* . . x x . . . . . . . . . . . . */
779 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
780 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
781 {0, 0, 1, 0, 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},
783 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
784 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
786 /* . . x x . . . . . . . . . . . . */
787 /* . . x x . . . . . . . . . . . . */
788 /* . . . X . . . . . . . . . . . . */
789 /* . . . x x . . . . . . . . . . . */
790 /* . . . x x . . . . . . . . . . . */
791 /* . . . x x . . . . . . . . . . . */
793 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
794 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
795 {0, 0, 0, 1, 0, 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},
797 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
798 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
800 /* . . . x x . . . . . . . . . . . */
801 /* . . . x x . . . . . . . . . . . */
802 /* . . . . X . . . . . . . . . . . */
803 /* . . . . x x . . . . . . . . . . */
804 /* . . . . x x . . . . . . . . . . */
805 /* . . . . x x . . . . . . . . . . */
807 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
808 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
809 {0, 0, 0, 0, 1, 0, 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},
811 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
812 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
814 /* . . . . x x . . . . . . . . . . */
815 /* . . . . x x . . . . . . . . . . */
816 /* . . . . . X . . . . . . . . . . */
817 /* . . . . . x x . . . . . . . . . */
818 /* . . . . . x x . . . . . . . . . */
819 /* . . . . . x x . . . . . . . . . */
821 {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
822 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
823 {0, 0, 0, 0, 0, 1, 0, 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},
825 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
826 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
828 /* . . . . . x x . . . . . . . . . */
829 /* . . . . . x x . . . . . . . . . */
830 /* . . . . . . X . . . . . . . . . */
831 /* . . . . . . x x . . . . . . . . */
832 /* . . . . . . x x . . . . . . . . */
833 /* . . . . . . x x . . . . . . . . */
835 {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
836 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
837 {0, 0, 0, 0, 0, 0, 1, 0, 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},
839 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
840 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
842 /* . . . . . . x x . . . . . . . . */
843 /* . . . . . . x x . . . . . . . . */
844 /* . . . . . . . X . . . . . . . . */
845 /* . . . . . . . x x . . . . . . . */
846 /* . . . . . . . x x . . . . . . . */
847 /* . . . . . . . x x . . . . . . . */
849 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
850 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
851 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
852 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
853 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
854 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
856 /* . . . . . . . x x . . . . . . . */
857 /* . . . . . . . x x . . . . . . . */
858 /* . . . . . . . . X . . . . . . . */
859 /* . . . . . . . . x x . . . . . . */
860 /* . . . . . . . . x x . . . . . . */
861 /* . . . . . . . . x x . . . . . . */
863 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
864 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
865 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
866 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
867 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
868 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
870 /* . . . . . . . x x x . . . . . . */
871 /* . . . . . . . . x x . . . . . . */
872 /* . . . . . . . . . X . . . . . . */
873 /* . . . . . . . . . x x . . . . . */
874 /* . . . . . . . . . x x . . . . . */
875 /* . . . . . . . . . x x . . . . . */
877 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
878 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
879 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
880 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
881 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
882 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
884 /* . . . . . . . . x x x . . . . . */
885 /* . . . . . . . . . x x x . . . . */
886 /* . . . . . . . . . . X . . . . . */
887 /* . . . . . . . . . . x x . . . . */
888 /* . . . . . . . . . . x x . . . . */
889 /* . . . . . . . . . . x x . . . . */
891 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
892 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
893 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
894 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
895 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
896 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
898 /* . . . . . . . . . x x x . . . . */
899 /* . . . . . . . . . . x x x . . . */
900 /* . . . . . . . . . . . X . . . . */
901 /* . . . . . . . . . . x x x . . . */
902 /* . . . . . . . . . . x x x . . . */
903 /* . . . . . . . . . . . x x . . . */
905 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 0, 0, 0, 0},
908 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
909 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
910 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
912 /* . . . . . . . . . . x x x . . . */
913 /* . . . . . . . . . . . x x x . . */
914 /* . . . . . . . . . . . . X . . . */
915 /* . . . . . . . . . . . x x x . . */
916 /* . . . . . . . . . . . x x x . . */
917 /* . . . . . . . . . . . . x x . . */
919 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 0, 0, 0},
922 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
923 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
924 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
926 /* . . . . . . . . . . . x x x . . */
927 /* . . . . . . . . . . . . x x x . */
928 /* . . . . . . . . . . . . . X . . */
929 /* . . . . . . . . . . . . x x x . */
930 /* . . . . . . . . . . . . x x x . */
931 /* . . . . . . . . . . . . . x x . */
933 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 0, 0},
936 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
937 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
938 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
940 /* . . . . . . . . . . . . x x x . */
941 /* . . . . . . . . . . . . . x x x */
942 /* . . . . . . . . . . . . . . X . */
943 /* . . . . . . . . . . . . . x x x */
944 /* . . . . . . . . . . . . . x x x */
945 /* . . . . . . . . . . . . . . x x */
947 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 0},
950 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
951 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
952 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
954 /* . . . . . . . . . . . . . x x x */
955 /* . . . . . . . . . . . . . . x x */
956 /* . . . . . . . . . . . . . . . X */
957 /* . . . . . . . . . . . . . . x x */
958 /* . . . . . . . . . . . . . . x x */
959 /* . . . . . . . . . . . . . . . x */
961 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 1},
964 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
965 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
966 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}},
968 { /* --- Stack 4 --- */
970 /* x . . . . . . . . . . . . . . . */
971 /* x x . . . . . . . . . . . . . . */
972 /* X . . . . . . . . . . . . . . . */
973 /* x x . . . . . . . . . . . . . . */
974 /* x x . . . . . . . . . . . . . . */
975 /* x x . . . . . . . . . . . . . . */
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, 0, 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},
981 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
982 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
984 /* x x . . . . . . . . . . . . . . */
985 /* x x x . . . . . . . . . . . . . */
986 /* . X . . . . . . . . . . . . . . */
987 /* x x x . . . . . . . . . . . . . */
988 /* x x x . . . . . . . . . . . . . */
989 /* . x x . . . . . . . . . . . . . */
991 {{1, 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 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
994 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
995 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
996 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
998 /* x x x . . . . . . . . . . . . . */
999 /* . x x x . . . . . . . . . . . . */
1000 /* . . X . . . . . . . . . . . . . */
1001 /* . x x x . . . . . . . . . . . . */
1002 /* . x x x . . . . . . . . . . . . */
1003 /* . . x x . . . . . . . . . . . . */
1005 {{1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1008 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1009 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1010 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1012 /* . x x x . . . . . . . . . . . . */
1013 /* . . x x x . . . . . . . . . . . */
1014 /* . . . X . . . . . . . . . . . . */
1015 /* . . x x x . . . . . . . . . . . */
1016 /* . . x x x . . . . . . . . . . . */
1017 /* . . . x x . . . . . . . . . . . */
1019 {{0, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1022 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1023 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1024 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1026 /* . . x x x . . . . . . . . . . . */
1027 /* . . . x x x . . . . . . . . . . */
1028 /* . . . . X . . . . . . . . . . . */
1029 /* . . . x x x . . . . . . . . . . */
1030 /* . . . x x x . . . . . . . . . . */
1031 /* . . . . x x . . . . . . . . . . */
1033 {{0, 0, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1036 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1037 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1038 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1040 /* . . . x x x . . . . . . . . . . */
1041 /* . . . . x x x . . . . . . . . . */
1042 /* . . . . . X . . . . . . . . . . */
1043 /* . . . . x x x . . . . . . . . . */
1044 /* . . . . x x x . . . . . . . . . */
1045 /* . . . . . x x . . . . . . . . . */
1047 {{0, 0, 0, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1050 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1051 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1052 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1054 /* . . . . x x x . . . . . . . . . */
1055 /* . . . . . x x x . . . . . . . . */
1056 /* . . . . . . X . . . . . . . . . */
1057 /* . . . . . x x x . . . . . . . . */
1058 /* . . . . . x x x . . . . . . . . */
1059 /* . . . . . . x x . . . . . . . . */
1061 {{0, 0, 0, 0, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1064 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1065 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1066 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
1068 /* . . . . . x x x . . . . . . . . */
1069 /* . . . . . . x x x . . . . . . . */
1070 /* . . . . . . . X . . . . . . . . */
1071 /* . . . . . . x x x . . . . . . . */
1072 /* . . . . . . x x x . . . . . . . */
1073 /* . . . . . . . x x . . . . . . . */
1075 {{0, 0, 0, 0, 0, 1, 1, 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1078 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1079 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1080 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
1082 /* . . . . . . x x . . . . . . . . */
1083 /* . . . . . . . x x x . . . . . . */
1084 /* . . . . . . . . X . . . . . . . */
1085 /* . . . . . . . x x . . . . . . . */
1086 /* . . . . . . . x x . . . . . . . */
1087 /* . . . . . . . . x x . . . . . . */
1089 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1090 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
1091 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
1092 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1093 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1094 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
1096 /* . . . . . . . x x . . . . . . . */
1097 /* . . . . . . . . . x x . . . . . */
1098 /* . . . . . . . . . X . . . . . . */
1099 /* . . . . . . . . x x . . . . . . */
1100 /* . . . . . . . . x x . . . . . . */
1101 /* . . . . . . . . . x x . . . . . */
1103 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1104 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1105 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
1106 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1107 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1108 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
1110 /* . . . . . . . . x x . . . . . . */
1111 /* . . . . . . . . . . x x . . . . */
1112 /* . . . . . . . . . . X . . . . . */
1113 /* . . . . . . . . . x x . . . . . */
1114 /* . . . . . . . . . x x . . . . . */
1115 /* . . . . . . . . . . x x . . . . */
1117 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1118 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1119 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
1120 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1121 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1122 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
1124 /* . . . . . . . . . x x . . . . . */
1125 /* . . . . . . . . . . . x x . . . */
1126 /* . . . . . . . . . . . X . . . . */
1127 /* . . . . . . . . . . x x . . . . */
1128 /* . . . . . . . . . . x x . . . . */
1129 /* . . . . . . . . . . . x x . . . */
1131 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1132 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1133 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
1134 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1135 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1136 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
1138 /* . . . . . . . . . . x x . . . . */
1139 /* . . . . . . . . . . . . x x . . */
1140 /* . . . . . . . . . . . . X . . . */
1141 /* . . . . . . . . . . . x x . . . */
1142 /* . . . . . . . . . . . x x . . . */
1143 /* . . . . . . . . . . . . x x . . */
1145 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1146 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1147 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
1148 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1149 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1150 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
1152 /* . . . . . . . . . . . x x . . . */
1153 /* . . . . . . . . . . . . . x x . */
1154 /* . . . . . . . . . . . . . X . . */
1155 /* . . . . . . . . . . . . x x . . */
1156 /* . . . . . . . . . . . . x x . . */
1157 /* . . . . . . . . . . . . . x x . */
1159 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1160 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1161 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
1162 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1163 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1164 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
1166 /* . . . . . . . . . . . . x x . . */
1167 /* . . . . . . . . . . . . . . x x */
1168 /* . . . . . . . . . . . . . . X . */
1169 /* . . . . . . . . . . . . . x x . */
1170 /* . . . . . . . . . . . . . x x . */
1171 /* . . . . . . . . . . . . . . x x */
1173 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1174 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1175 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
1176 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1177 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1178 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
1180 /* . . . . . . . . . . . . . x x . */
1181 /* . . . . . . . . . . . . . . . x */
1182 /* . . . . . . . . . . . . . . . X */
1183 /* . . . . . . . . . . . . . . x x */
1184 /* . . . . . . . . . . . . . . x x */
1185 /* . . . . . . . . . . . . . . . x */
1187 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1188 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1189 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1190 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1191 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1192 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}}
1196 AliTRDgtuParam::AliTRDgtuParam() :
1198 fCurrTrackletMask(0),
1203 fGeo = new AliTRDgeometry();
1204 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
1210 GenerateZChannelMap();
1213 AliTRDgtuParam::~AliTRDgtuParam()
1220 AliTRDgtuParam* AliTRDgtuParam::Instance()
1222 // get (or create) the single instance
1224 if (fgInstance == 0)
1225 fgInstance = new AliTRDgtuParam();
1230 void AliTRDgtuParam::Terminate()
1232 // destruct the instance
1234 if (fgInstance != 0) {
1240 Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1242 return (fZSubChannel[stack][zchannel][layer][zpos] != 0);
1245 Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1247 return fZSubChannel[stack][zchannel][layer][zpos];
1250 Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx)
1252 // returns the reference layer indexed by refLayerIdx
1254 if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers)
1255 return fgRefLayers[refLayerIdx];
1260 Int_t AliTRDgtuParam::GenerateZChannelMap()
1262 // generate the z-channel map
1263 // assuming that the tracks come from the vertex
1264 // +/- fVertexSize in z-direction
1266 if (fgUseGTUconst) {
1267 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1268 for (Int_t iChannel = 0; iChannel < fGeo->GetRowMax(fgkFixLayer, iStack, 0); iChannel++) {
1269 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1270 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1271 if (fgZChannelMap[iStack][iChannel][iLayer][iRow] != 0) {
1272 fZChannelMap[iStack][iChannel][iLayer][iRow] = 1;
1273 fZSubChannel[iStack][iChannel % fgkNZChannels][iLayer][iRow] = iChannel / fgkNZChannels + 1;
1283 Int_t iSec = 0; // sector is irrelevant
1284 Bool_t collision = kFALSE;
1286 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1288 Float_t x[6] = { 0 };
1289 Float_t z[6][16] = {{ 0 }};
1290 Float_t dZ[6][16] = {{ 0 }};
1292 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1293 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1294 x[iLayer] = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ???
1295 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1296 z[iLayer][iRow] = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad
1297 dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction
1298 for (Int_t i = 0; i < fgkNZChannels; i++)
1299 fZSubChannel[iStack][i][iLayer][iRow] = 0;
1303 for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
1305 Double_t fixZmin = z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow];
1306 Double_t fixZmax = z[fgkFixLayer][fixRow];
1307 Double_t fixX = x[fgkFixLayer] + 1.5; // ??? 1.5 from where?
1309 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1310 Double_t leftZ, rightZ;
1312 if (iLayer <= fgkFixLayer) {
1313 leftZ = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1314 rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1317 leftZ = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1318 rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1321 Double_t epsilon = 0.001;
1322 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1323 if ( (z[iLayer][iRow] ) > (leftZ + epsilon) &&
1324 (z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) {
1325 fZChannelMap[iStack][fixRow][iLayer][iRow] = 1;
1326 if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) {
1327 AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!");
1331 fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1;
1343 Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const
1345 // display the z-channel map
1347 if (zchannel >= fgkNZChannels) {
1348 AliError("Invalid Z channel!");
1352 Int_t zchmin = zchannel >= 0 ? zchannel : 0;
1353 Int_t zchmax = zchannel >= 0 ? zchannel + 1 : fgkNZChannels;
1356 TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping");
1358 TGraph **graphz = new TGraph*[fgkNZChannels];
1359 for (Int_t zch = zchmin; zch < zchmax; zch++)
1360 graphz[zch] = new TGraph;
1361 TGraphAsymmErrors *graph = new TGraphAsymmErrors();
1362 graph->SetTitle("Z-Channel Map");
1363 graph->SetPoint(i, 0, 0); // vertex
1364 graph->SetPointError(i++, 20, 20, 0, 0);
1365 // graph->SetRange //????
1366 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1367 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1368 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1369 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1370 graph->SetPoint(i, pp->GetRowPos(iRow), fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1371 graph->SetPointError(i++, pp->GetRowSize(iRow), 0, 0, 0);
1372 for (Int_t zch = zchmin; zch < zchmax; zch++)
1373 if (fZSubChannel[iStack][zch][iLayer][iRow] != 0)
1374 if (subchannel == 0 || fZSubChannel[iStack][zch][iLayer][iRow] == subchannel)
1375 graphz[zch]->SetPoint(j++, pp->GetRowPos(iRow) - pp->GetRowSize(iRow)/2, fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1379 graph->SetMarkerStyle(kDot);
1382 for (Int_t zch = zchmin; zch < zchmax; zch++) {
1383 graphz[zch]->SetMarkerStyle(kCircle);
1384 graphz[zch]->SetMarkerColor(zch+2);
1385 graphz[zch]->SetMarkerSize(0.3 + zch*0.2);
1386 graphz[zch]->Draw("P");
1387 gROOT->Add(graphz[zch]);
1393 Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const
1395 // get the constant for the calculation of alpha
1397 Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
1401 Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const
1403 // get the constant for the calculation of y_proj
1405 Float_t xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.;
1406 Int_t ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) );
1410 Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const
1412 return (Int_t) (- ( (layer % 2 ? 1 : -1) *
1413 (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2) *
1414 TMath::Tan(- 2.0 / 180.0 * TMath::Pi()) ) / 0.016 );
1417 Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask)
1419 // calculate the coefficients for the straight line fit
1420 // depending on the mask of contributing tracklets
1422 fCurrTrackletMask = trackletMask;
1424 TMatrix a(GetNLayers(), 3);
1425 TMatrix b(3, GetNLayers());
1428 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1429 if ( (trackletMask & (1 << layer)) == 0) {
1436 a(layer, 1) = fGeo->GetTime0(layer);
1437 a(layer, 2) = (layer % 2 ? 1 : -1) * fGeo->GetTime0(layer);
1446 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1447 fAki[layer] = b.GetMatrixArray()[layer];
1448 fBki[layer] = b.GetMatrixArray()[GetNLayers() + layer];
1449 fCki[layer] = b.GetMatrixArray()[2 * GetNLayers() + layer];
1454 Float_t AliTRDgtuParam::GetAki(Int_t k, Int_t i)
1456 // get A_ki for the calculation of the tracking parameters
1457 if (fCurrTrackletMask != k)
1458 GenerateRecoCoefficients(k);
1463 Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i)
1465 // get B_ki for the calculation of the tracking parameters
1467 if (fCurrTrackletMask != k)
1468 GenerateRecoCoefficients(k);
1473 Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i)
1475 // get B_ki for the calculation of the tracking parameters
1477 if (fCurrTrackletMask != k)
1478 GenerateRecoCoefficients(k);
1484 Float_t AliTRDgtuParam::GetD(Int_t k) const
1486 // get the determinant for the calculation of the tracking parameters
1489 for (Int_t i = 0; i < GetNLayers(); i++) {
1490 if ( !((k >> i) & 0x1) )
1492 Float_t xi = fGeo->GetTime0(i);
1495 t(2,0) += TMath::Power(-1, i) * xi;
1497 t(1,1) += TMath::Power(xi, 2);
1498 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1499 t(0,2) += TMath::Power(-1, i) * xi;
1500 t(1,2) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1501 t(2,2) += TMath::Power(xi, 2);
1503 return t.Determinant();
1506 Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k)
1508 // calculate the fitting parameters
1512 for (Int_t i = 0; i < GetNLayers(); i++) {
1513 if ( !((k >> i) & 0x1) )
1515 Float_t xi = fGeo->GetTime0(i);
1518 t(2,0) += TMath::Power(-1, i) * xi;
1520 t(1,1) += TMath::Power(xi, 2);
1521 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1522 t(0,2) -= TMath::Power(-1, i) * xi;
1523 t(1,2) -= TMath::Power(-1, i) * TMath::Power(xi, 2);
1524 t(2,2) -= TMath::Power(xi, 2);
1528 return lr.Decompose();
1532 Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2)
1534 // get the x-coord. of the assumed circle/straight line intersection points
1539 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1540 if ( (k >> layer) & 0x1 ) {
1548 if ( (l1 >= 0) && (l2 >= 0) ) {
1549 x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1);
1550 x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1);
1557 Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2, Float_t magField)
1559 // returns 0.3 * B * 1/a (1/128 GeV/c)
1560 // a : offset, b : slope (not used)
1562 if (fgUseGTUconst) {
1563 //----- calculation as in the GTU ----
1564 const Int_t maskIdLut[64] = {
1565 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1566 -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1567 -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1568 -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1571 const Int_t c1Lut[32] = {
1572 -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
1573 -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
1574 -2670, -2557, -2763, -2557, -2644, -2523, -1, -1,
1575 -1, -1, -1, -1, -1, -1, -1, -1
1578 Int_t layerMaskId = maskIdLut[layerMask];
1579 Int_t c1 = c1Lut[layerMaskId];
1580 Int_t c1Ext = c1 << 8;
1581 Int_t ptRawStage4 = c1Ext / (a >> 2);
1582 Int_t ptRawComb4 = ptRawStage4;
1583 Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
1585 return ((Int_t) ptExtComb4/2);
1588 //----- simple calculation -----
1589 Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
1592 r = (0.3 * magField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
1594 Int_t pt = (Int_t) (2 * r);