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 ////////////////////////////////////////////////////////////////////////////
31 #include "TDecompLU.h"
32 #include "TGraphAsymmErrors.h"
36 #include "AliTRDgtuParam.h"
37 #include "AliTRDgeometry.h"
38 #include "AliTRDpadPlane.h"
40 ClassImp(AliTRDgtuParam)
42 Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE;
43 Bool_t AliTRDgtuParam::fgUseGTUmerge = kTRUE;
44 Bool_t AliTRDgtuParam::fgLimitNoTracklets = kTRUE;
45 Int_t AliTRDgtuParam::fgMaxNoTracklets = 62;
47 // ----- matching windows -----
48 Int_t AliTRDgtuParam::fgDeltaY = 19;
49 Int_t AliTRDgtuParam::fgDeltaAlpha = 21;
50 // ----- reference layers -----
51 Int_t AliTRDgtuParam::fgRefLayers[] = { 3, 2, 1 };
53 // ----- Bin widths (granularity) -----
54 const Float_t AliTRDgtuParam::fgkBinWidthY = 160e-4;
55 const Float_t AliTRDgtuParam::fgkBinWidthdY = 140e-4;
57 // ----- Bit widths (used for internal representation) -----
58 const Int_t AliTRDgtuParam::fgkBitWidthY = 13;
59 const Int_t AliTRDgtuParam::fgkBitWidthdY = 7;
60 const Int_t AliTRDgtuParam::fgkBitWidthYProj = 10;
61 const Int_t AliTRDgtuParam::fgkBitExcessY = 4;
62 const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10;
63 const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2;
65 // pt higher than the one for smallest possible a != 0
66 const Int_t AliTRDgtuParam::fgkPtInfinity = std::numeric_limits<Int_t>::max();
68 // ----- geometry constants used in GTU -----
69 const Bool_t AliTRDgtuParam::fgZChannelMap[5][16][6][16] = {
71 { /* --- Stack 0 --- */
73 /* . x x . . . . . . . . . . . . . */
74 /* x . . . . . . . . . . . . . . . */
75 /* X . . . . . . . . . . . . . . . */
76 /* x x . . . . . . . . . . . . . . */
77 /* x x . . . . . . . . . . . . . . */
78 /* x . . . . . . . . . . . . . . . */
80 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
81 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
82 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
83 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
84 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
85 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
87 /* . . x x . . . . . . . . . . . . */
88 /* x x . . . . . . . . . . . . . . */
89 /* . X . . . . . . . . . . . . . . */
90 /* . x x . . . . . . . . . . . . . */
91 /* . x x . . . . . . . . . . . . . */
92 /* x x . . . . . . . . . . . . . . */
94 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
95 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
96 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
97 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
98 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
99 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
101 /* . . . x x . . . . . . . . . . . */
102 /* . x x . . . . . . . . . . . . . */
103 /* . . X . . . . . . . . . . . . . */
104 /* . . x x . . . . . . . . . . . . */
105 /* . . x x . . . . . . . . . . . . */
106 /* . x x . . . . . . . . . . . . . */
108 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
109 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
110 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
111 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
112 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
113 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
115 /* . . . . x x . . . . . . . . . . */
116 /* . . x x . . . . . . . . . . . . */
117 /* . . . X . . . . . . . . . . . . */
118 /* . . . x x . . . . . . . . . . . */
119 /* . . . x x . . . . . . . . . . . */
120 /* . . x x . . . . . . . . . . . . */
122 {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
123 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
124 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
125 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
126 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
127 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
129 /* . . . . . x x . . . . . . . . . */
130 /* . . . x x . . . . . . . . . . . */
131 /* . . . . X . . . . . . . . . . . */
132 /* . . . . x x . . . . . . . . . . */
133 /* . . . . x x . . . . . . . . . . */
134 /* . . . x x . . . . . . . . . . . */
136 {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
137 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
138 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
139 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
140 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
141 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
143 /* . . . . . . x x . . . . . . . . */
144 /* . . . . x x . . . . . . . . . . */
145 /* . . . . . X . . . . . . . . . . */
146 /* . . . . . x x . . . . . . . . . */
147 /* . . . . . x x . . . . . . . . . */
148 /* . . . . x x . . . . . . . . . . */
150 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
151 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
152 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
153 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
154 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
155 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
157 /* . . . . . . . x x . . . . . . . */
158 /* . . . . . x x . . . . . . . . . */
159 /* . . . . . . X . . . . . . . . . */
160 /* . . . . . . x x . . . . . . . . */
161 /* . . . . . . x x . . . . . . . . */
162 /* . . . . . x x . . . . . . . . . */
164 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
165 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
166 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
167 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
168 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
169 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
171 /* . . . . . . . . x x . . . . . . */
172 /* . . . . . . x x x . . . . . . . */
173 /* . . . . . . . X . . . . . . . . */
174 /* . . . . . . . x x . . . . . . . */
175 /* . . . . . . . x x . . . . . . . */
176 /* . . . . . . x x . . . . . . . . */
178 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
179 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
180 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
181 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
182 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
183 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
185 /* . . . . . . . . x x x . . . . . */
186 /* . . . . . . . x x x . . . . . . */
187 /* . . . . . . . . X . . . . . . . */
188 /* . . . . . . . x x x . . . . . . */
189 /* . . . . . . . x x x . . . . . . */
190 /* . . . . . . . x x . . . . . . . */
192 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
193 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
194 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
195 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
196 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
197 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
199 /* . . . . . . . . . x x x . . . . */
200 /* . . . . . . . . x x x . . . . . */
201 /* . . . . . . . . . X . . . . . . */
202 /* . . . . . . . . x x x . . . . . */
203 /* . . . . . . . . x x x . . . . . */
204 /* . . . . . . . . x x . . . . . . */
206 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
207 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
208 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
209 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
210 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
211 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
213 /* . . . . . . . . . . x x x . . . */
214 /* . . . . . . . . . x x x . . . . */
215 /* . . . . . . . . . . X . . . . . */
216 /* . . . . . . . . . x x x . . . . */
217 /* . . . . . . . . . x x x . . . . */
218 /* . . . . . . . . . x x . . . . . */
220 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
221 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
222 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
223 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
224 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
225 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
227 /* . . . . . . . . . . . x x x . . */
228 /* . . . . . . . . . . x x x . . . */
229 /* . . . . . . . . . . . X . . . . */
230 /* . . . . . . . . . . x x x . . . */
231 /* . . . . . . . . . . x x x . . . */
232 /* . . . . . . . . . . x x . . . . */
234 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
235 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
236 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
237 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
238 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
239 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
241 /* . . . . . . . . . . . . x x x . */
242 /* . . . . . . . . . . . x x x . . */
243 /* . . . . . . . . . . . . X . . . */
244 /* . . . . . . . . . . . x x x . . */
245 /* . . . . . . . . . . . x x x . . */
246 /* . . . . . . . . . . . x x . . . */
248 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
249 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
250 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
251 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
252 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
253 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
255 /* . . . . . . . . . . . . . x x x */
256 /* . . . . . . . . . . . . x x x . */
257 /* . . . . . . . . . . . . . X . . */
258 /* . . . . . . . . . . . . x x x . */
259 /* . . . . . . . . . . . . x x x . */
260 /* . . . . . . . . . . . . x x . . */
262 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
263 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
264 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
265 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
266 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
267 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
269 /* . . . . . . . . . . . . . . x x */
270 /* . . . . . . . . . . . . . x x x */
271 /* . . . . . . . . . . . . . . X . */
272 /* . . . . . . . . . . . . . x x x */
273 /* . . . . . . . . . . . . . x x x */
274 /* . . . . . . . . . . . . . x x . */
276 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
277 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
278 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
279 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
280 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
281 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
283 /* . . . . . . . . . . . . . . . x */
284 /* . . . . . . . . . . . . . . x x */
285 /* . . . . . . . . . . . . . . . X */
286 /* . . . . . . . . . . . . . . x x */
287 /* . . . . . . . . . . . . . . x x */
288 /* . . . . . . . . . . . . . . x x */
290 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
291 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
292 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
293 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
294 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
295 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
297 { /* --- Stack 1 --- */
299 /* x x x . . . . . . . . . . . . . */
300 /* x x . . . . . . . . . . . . . . */
301 /* X . . . . . . . . . . . . . . . */
302 /* x x . . . . . . . . . . . . . . */
303 /* x x . . . . . . . . . . . . . . */
304 /* x . . . . . . . . . . . . . . . */
306 {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
307 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
308 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
309 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
310 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
311 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
313 /* . x x x . . . . . . . . . . . . */
314 /* x x x . . . . . . . . . . . . . */
315 /* . X . . . . . . . . . . . . . . */
316 /* x x x . . . . . . . . . . . . . */
317 /* x x x . . . . . . . . . . . . . */
318 /* x x . . . . . . . . . . . . . . */
320 {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
321 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
322 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
323 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
324 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
325 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
327 /* . . x x x . . . . . . . . . . . */
328 /* . x x x . . . . . . . . . . . . */
329 /* . . X . . . . . . . . . . . . . */
330 /* . x x x . . . . . . . . . . . . */
331 /* . x x x . . . . . . . . . . . . */
332 /* . x x . . . . . . . . . . . . . */
334 {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
335 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
336 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
337 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
338 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
339 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
341 /* . . . x x x . . . . . . . . . . */
342 /* . . x x x . . . . . . . . . . . */
343 /* . . . X . . . . . . . . . . . . */
344 /* . . x x x . . . . . . . . . . . */
345 /* . . x x x . . . . . . . . . . . */
346 /* . . x x . . . . . . . . . . . . */
348 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
349 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
350 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
351 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
352 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
353 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
355 /* . . . . x x x . . . . . . . . . */
356 /* . . . x x x . . . . . . . . . . */
357 /* . . . . X . . . . . . . . . . . */
358 /* . . . x x x . . . . . . . . . . */
359 /* . . . x x x . . . . . . . . . . */
360 /* . . . x x . . . . . . . . . . . */
362 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
363 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
364 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
365 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
366 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
367 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
369 /* . . . . . x x x . . . . . . . . */
370 /* . . . . x x x . . . . . . . . . */
371 /* . . . . . X . . . . . . . . . . */
372 /* . . . . x x . . . . . . . . . . */
373 /* . . . . x x . . . . . . . . . . */
374 /* . . . . x x . . . . . . . . . . */
376 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
377 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
378 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
379 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
380 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
381 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
383 /* . . . . . . x x x . . . . . . . */
384 /* . . . . . . x x . . . . . . . . */
385 /* . . . . . . X . . . . . . . . . */
386 /* . . . . . x x . . . . . . . . . */
387 /* . . . . . x x . . . . . . . . . */
388 /* . . . . . x x . . . . . . . . . */
390 {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
391 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
392 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
393 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
394 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
395 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
397 /* . . . . . . . x x . . . . . . . */
398 /* . . . . . . . x x . . . . . . . */
399 /* . . . . . . . X . . . . . . . . */
400 /* . . . . . . x x . . . . . . . . */
401 /* . . . . . . x x . . . . . . . . */
402 /* . . . . . . x x . . . . . . . . */
404 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
405 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
406 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
407 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
408 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
409 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
411 /* . . . . . . . . x x . . . . . . */
412 /* . . . . . . . . x x . . . . . . */
413 /* . . . . . . . . X . . . . . . . */
414 /* . . . . . . . x x . . . . . . . */
415 /* . . . . . . . x x . . . . . . . */
416 /* . . . . . . . x x . . . . . . . */
418 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
419 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
420 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
421 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
422 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
423 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
425 /* . . . . . . . . . x x . . . . . */
426 /* . . . . . . . . . x x . . . . . */
427 /* . . . . . . . . . X . . . . . . */
428 /* . . . . . . . . x x . . . . . . */
429 /* . . . . . . . . x x . . . . . . */
430 /* . . . . . . . . x x . . . . . . */
432 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
433 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
434 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
435 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
436 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
437 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
439 /* . . . . . . . . . . x x . . . . */
440 /* . . . . . . . . . . x x . . . . */
441 /* . . . . . . . . . . X . . . . . */
442 /* . . . . . . . . . x x . . . . . */
443 /* . . . . . . . . . x x . . . . . */
444 /* . . . . . . . . . x x . . . . . */
446 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
447 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
448 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
449 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
450 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
451 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
453 /* . . . . . . . . . . . x x . . . */
454 /* . . . . . . . . . . . x x . . . */
455 /* . . . . . . . . . . . X . . . . */
456 /* . . . . . . . . . . x x . . . . */
457 /* . . . . . . . . . . x x . . . . */
458 /* . . . . . . . . . . x x . . . . */
460 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
461 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
462 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
463 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
464 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
465 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
467 /* . . . . . . . . . . . . x x . . */
468 /* . . . . . . . . . . . . x x . . */
469 /* . . . . . . . . . . . . X . . . */
470 /* . . . . . . . . . . . x x . . . */
471 /* . . . . . . . . . . . x x . . . */
472 /* . . . . . . . . . . . x x . . . */
474 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
475 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
476 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
477 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
478 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
479 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
481 /* . . . . . . . . . . . . . x x . */
482 /* . . . . . . . . . . . . . x x . */
483 /* . . . . . . . . . . . . . X . . */
484 /* . . . . . . . . . . . . x x . . */
485 /* . . . . . . . . . . . . x x . . */
486 /* . . . . . . . . . . . . x x . . */
488 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
489 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
490 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
491 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
492 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
493 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
495 /* . . . . . . . . . . . . . . x x */
496 /* . . . . . . . . . . . . . . x x */
497 /* . . . . . . . . . . . . . . X . */
498 /* . . . . . . . . . . . . . x x . */
499 /* . . . . . . . . . . . . . x x . */
500 /* . . . . . . . . . . . . . x x . */
502 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
503 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
504 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
505 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
506 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
507 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
509 /* . . . . . . . . . . . . . . . x */
510 /* . . . . . . . . . . . . . . . x */
511 /* . . . . . . . . . . . . . . . X */
512 /* . . . . . . . . . . . . . . x x */
513 /* . . . . . . . . . . . . . . x x */
514 /* . . . . . . . . . . . . . . x x */
516 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
517 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
518 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
519 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
520 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
521 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
523 { /* --- Stack 2 --- */
525 /* x x . . . . . . . . . . */
526 /* x x . . . . . . . . . . */
527 /* X . . . . . . . . . . . */
528 /* x . . . . . . . . . . . */
529 /* x . . . . . . . . . . . */
530 /* x . . . . . . . . . . . */
532 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
533 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
534 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
535 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
536 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
537 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
539 /* . x x . . . . . . . . . */
540 /* . x x . . . . . . . . . */
541 /* . X . . . . . . . . . . */
542 /* x x . . . . . . . . . . */
543 /* x x . . . . . . . . . . */
544 /* x x . . . . . . . . . . */
546 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
547 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
548 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
549 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
550 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
551 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
553 /* . . x x . . . . . . . . */
554 /* . . x x . . . . . . . . */
555 /* . . X . . . . . . . . . */
556 /* . x x . . . . . . . . . */
557 /* . x x . . . . . . . . . */
558 /* . x x . . . . . . . . . */
560 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
561 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
562 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
563 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
564 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
565 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
567 /* . . . x x . . . . . . . */
568 /* . . . x x . . . . . . . */
569 /* . . . X . . . . . . . . */
570 /* . . x x x . . . . . . . */
571 /* . . x x x . . . . . . . */
572 /* . . x x x . . . . . . . */
574 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
575 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
576 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
577 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
578 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
579 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
581 /* . . . x x x . . . . . . */
582 /* . . . x x x . . . . . . */
583 /* . . . . X . . . . . . . */
584 /* . . . x x x . . . . . . */
585 /* . . . x x x . . . . . . */
586 /* . . . x x x . . . . . . */
588 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
589 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
590 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
591 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
592 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
593 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
595 /* . . . . x x x . . . . . */
596 /* . . . . x x x . . . . . */
597 /* . . . . . X . . . . . . */
598 /* . . . . x x x . . . . . */
599 /* . . . . x x x . . . . . */
600 /* . . . . x x x . . . . . */
602 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
603 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
604 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
605 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
606 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
607 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
609 /* . . . . . x x x . . . . */
610 /* . . . . . x x x . . . . */
611 /* . . . . . . X . . . . . */
612 /* . . . . . x x x . . . . */
613 /* . . . . . x x x . . . . */
614 /* . . . . . x x x . . . . */
616 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
617 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
618 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
619 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
620 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
621 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
623 /* . . . . . . x x x . . . */
624 /* . . . . . . x x x . . . */
625 /* . . . . . . . X . . . . */
626 /* . . . . . . x x x . . . */
627 /* . . . . . . x x x . . . */
628 /* . . . . . . x x x . . . */
630 {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
631 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
632 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
633 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
634 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
635 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
637 /* . . . . . . . x x . . . */
638 /* . . . . . . . x x . . . */
639 /* . . . . . . . . X . . . */
640 /* . . . . . . . x x x . . */
641 /* . . . . . . . x x x . . */
642 /* . . . . . . . x x x . . */
644 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
645 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
646 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
647 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
648 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
649 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}},
651 /* . . . . . . . . x x . . */
652 /* . . . . . . . . x x . . */
653 /* . . . . . . . . . X . . */
654 /* . . . . . . . . . x x . */
655 /* . . . . . . . . . x x . */
656 /* . . . . . . . . . x x . */
658 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
659 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
660 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
661 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
662 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
663 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
665 /* . . . . . . . . . x x . */
666 /* . . . . . . . . . x x . */
667 /* . . . . . . . . . . X . */
668 /* . . . . . . . . . . x x */
669 /* . . . . . . . . . . x x */
670 /* . . . . . . . . . . x x */
672 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
673 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
674 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
675 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
676 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
677 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
679 /* . . . . . . . . . . x x */
680 /* . . . . . . . . . . x x */
681 /* . . . . . . . . . . . X */
682 /* . . . . . . . . . . . x */
683 /* . . . . . . . . . . . x */
684 /* . . . . . . . . . . . x */
686 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
687 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
688 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
689 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
690 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
691 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
693 /* . . . . . . . . . . . . */
694 /* . . . . . . . . . . . . */
695 /* . . . . . . . . . . . . */
696 /* . . . . . . . . . . . . */
697 /* . . . . . . . . . . . . */
698 /* . . . . . . . . . . . . */
700 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
701 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
702 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
703 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
704 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
705 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
707 /* . . . . . . . . . . . . */
708 /* . . . . . . . . . . . . */
709 /* . . . . . . . . . . . . */
710 /* . . . . . . . . . . . . */
711 /* . . . . . . . . . . . . */
712 /* . . . . . . . . . . . . */
714 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
715 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
716 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
717 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
718 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
719 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
721 /* . . . . . . . . . . . . */
722 /* . . . . . . . . . . . . */
723 /* . . . . . . . . . . . . */
724 /* . . . . . . . . . . . . */
725 /* . . . . . . . . . . . . */
726 /* . . . . . . . . . . . . */
728 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
729 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
730 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
731 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
732 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
733 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
735 /* . . . . . . . . . . . . */
736 /* . . . . . . . . . . . . */
737 /* . . . . . . . . . . . . */
738 /* . . . . . . . . . . . . */
739 /* . . . . . . . . . . . . */
740 /* . . . . . . . . . . . . */
742 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
743 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
744 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
745 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
746 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
747 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}},
749 { /* --- Stack 3 --- */
751 /* x . . . . . . . . . . . . . . . */
752 /* x . . . . . . . . . . . . . . . */
753 /* X . . . . . . . . . . . . . . . */
754 /* x x . . . . . . . . . . . . . . */
755 /* x x . . . . . . . . . . . . . . */
756 /* x x . . . . . . . . . . . . . . */
758 {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
759 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
760 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
761 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
762 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
763 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
765 /* x x . . . . . . . . . . . . . . */
766 /* x x . . . . . . . . . . . . . . */
767 /* . X . . . . . . . . . . . . . . */
768 /* . x x . . . . . . . . . . . . . */
769 /* . x x . . . . . . . . . . . . . */
770 /* . x x . . . . . . . . . . . . . */
772 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
773 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
774 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
775 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
776 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
777 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
779 /* . x x . . . . . . . . . . . . . */
780 /* . x x . . . . . . . . . . . . . */
781 /* . . X . . . . . . . . . . . . . */
782 /* . . x x . . . . . . . . . . . . */
783 /* . . x x . . . . . . . . . . . . */
784 /* . . x x . . . . . . . . . . . . */
786 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
787 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
788 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
789 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
790 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
791 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
793 /* . . x x . . . . . . . . . . . . */
794 /* . . x x . . . . . . . . . . . . */
795 /* . . . X . . . . . . . . . . . . */
796 /* . . . x x . . . . . . . . . . . */
797 /* . . . x x . . . . . . . . . . . */
798 /* . . . x x . . . . . . . . . . . */
800 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
801 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
802 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
803 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
804 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
805 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
807 /* . . . x x . . . . . . . . . . . */
808 /* . . . x x . . . . . . . . . . . */
809 /* . . . . X . . . . . . . . . . . */
810 /* . . . . x x . . . . . . . . . . */
811 /* . . . . x x . . . . . . . . . . */
812 /* . . . . x x . . . . . . . . . . */
814 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
815 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
816 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
817 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
818 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
819 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
821 /* . . . . x x . . . . . . . . . . */
822 /* . . . . x x . . . . . . . . . . */
823 /* . . . . . X . . . . . . . . . . */
824 /* . . . . . x x . . . . . . . . . */
825 /* . . . . . x x . . . . . . . . . */
826 /* . . . . . x x . . . . . . . . . */
828 {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
829 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
830 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
831 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
832 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
833 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
835 /* . . . . . x x . . . . . . . . . */
836 /* . . . . . x x . . . . . . . . . */
837 /* . . . . . . X . . . . . . . . . */
838 /* . . . . . . x x . . . . . . . . */
839 /* . . . . . . x x . . . . . . . . */
840 /* . . . . . . x x . . . . . . . . */
842 {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
843 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
844 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
845 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
846 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
847 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
849 /* . . . . . . x x . . . . . . . . */
850 /* . . . . . . x x . . . . . . . . */
851 /* . . . . . . . X . . . . . . . . */
852 /* . . . . . . . x x . . . . . . . */
853 /* . . . . . . . x x . . . . . . . */
854 /* . . . . . . . x x . . . . . . . */
856 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
857 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
858 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
859 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
860 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
861 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
863 /* . . . . . . . x x . . . . . . . */
864 /* . . . . . . . x x . . . . . . . */
865 /* . . . . . . . . X . . . . . . . */
866 /* . . . . . . . . x x . . . . . . */
867 /* . . . . . . . . x x . . . . . . */
868 /* . . . . . . . . x x . . . . . . */
870 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
871 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
872 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
873 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
874 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
875 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
877 /* . . . . . . . x x x . . . . . . */
878 /* . . . . . . . . x x . . . . . . */
879 /* . . . . . . . . . X . . . . . . */
880 /* . . . . . . . . . x x . . . . . */
881 /* . . . . . . . . . x x . . . . . */
882 /* . . . . . . . . . x x . . . . . */
884 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
885 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
886 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
887 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
888 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
889 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
891 /* . . . . . . . . x x x . . . . . */
892 /* . . . . . . . . . x x x . . . . */
893 /* . . . . . . . . . . X . . . . . */
894 /* . . . . . . . . . . x x . . . . */
895 /* . . . . . . . . . . x x . . . . */
896 /* . . . . . . . . . . x x . . . . */
898 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
899 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
900 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
901 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
902 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
903 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
905 /* . . . . . . . . . x x x . . . . */
906 /* . . . . . . . . . . x x x . . . */
907 /* . . . . . . . . . . . X . . . . */
908 /* . . . . . . . . . . x x x . . . */
909 /* . . . . . . . . . . x x x . . . */
910 /* . . . . . . . . . . . x x . . . */
912 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
913 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
914 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
915 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
916 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
917 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
919 /* . . . . . . . . . . x x x . . . */
920 /* . . . . . . . . . . . x x x . . */
921 /* . . . . . . . . . . . . X . . . */
922 /* . . . . . . . . . . . x x x . . */
923 /* . . . . . . . . . . . x x x . . */
924 /* . . . . . . . . . . . . x x . . */
926 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
927 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
928 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
929 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
930 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
931 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
933 /* . . . . . . . . . . . x x x . . */
934 /* . . . . . . . . . . . . x x x . */
935 /* . . . . . . . . . . . . . X . . */
936 /* . . . . . . . . . . . . x x x . */
937 /* . . . . . . . . . . . . x x x . */
938 /* . . . . . . . . . . . . . x x . */
940 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
941 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
942 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
943 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
944 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
945 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
947 /* . . . . . . . . . . . . x x x . */
948 /* . . . . . . . . . . . . . x x x */
949 /* . . . . . . . . . . . . . . X . */
950 /* . . . . . . . . . . . . . x x x */
951 /* . . . . . . . . . . . . . x x x */
952 /* . . . . . . . . . . . . . . x x */
954 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
955 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
956 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
957 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
958 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
959 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
961 /* . . . . . . . . . . . . . x x x */
962 /* . . . . . . . . . . . . . . x x */
963 /* . . . . . . . . . . . . . . . X */
964 /* . . . . . . . . . . . . . . x x */
965 /* . . . . . . . . . . . . . . x x */
966 /* . . . . . . . . . . . . . . . x */
968 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
969 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
970 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
971 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
972 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
973 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}},
975 { /* --- Stack 4 --- */
977 /* x . . . . . . . . . . . . . . . */
978 /* x x . . . . . . . . . . . . . . */
979 /* X . . . . . . . . . . . . . . . */
980 /* x x . . . . . . . . . . . . . . */
981 /* x x . . . . . . . . . . . . . . */
982 /* x x . . . . . . . . . . . . . . */
984 {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
985 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
986 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
987 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
988 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
989 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
991 /* x x . . . . . . . . . . . . . . */
992 /* x x x . . . . . . . . . . . . . */
993 /* . X . . . . . . . . . . . . . . */
994 /* x x x . . . . . . . . . . . . . */
995 /* x x x . . . . . . . . . . . . . */
996 /* . x x . . . . . . . . . . . . . */
998 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
999 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1000 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1001 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1002 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1003 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1005 /* x x x . . . . . . . . . . . . . */
1006 /* . x x x . . . . . . . . . . . . */
1007 /* . . X . . . . . . . . . . . . . */
1008 /* . x x x . . . . . . . . . . . . */
1009 /* . x x x . . . . . . . . . . . . */
1010 /* . . x x . . . . . . . . . . . . */
1012 {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1013 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1014 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1015 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1016 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1017 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1019 /* . x x x . . . . . . . . . . . . */
1020 /* . . x x x . . . . . . . . . . . */
1021 /* . . . X . . . . . . . . . . . . */
1022 /* . . x x x . . . . . . . . . . . */
1023 /* . . x x x . . . . . . . . . . . */
1024 /* . . . x x . . . . . . . . . . . */
1026 {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1027 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1028 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1029 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1030 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1031 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1033 /* . . x x x . . . . . . . . . . . */
1034 /* . . . x x x . . . . . . . . . . */
1035 /* . . . . X . . . . . . . . . . . */
1036 /* . . . x x x . . . . . . . . . . */
1037 /* . . . x x x . . . . . . . . . . */
1038 /* . . . . x x . . . . . . . . . . */
1040 {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1041 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1042 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1043 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1044 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1045 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1047 /* . . . x x x . . . . . . . . . . */
1048 /* . . . . x x x . . . . . . . . . */
1049 /* . . . . . X . . . . . . . . . . */
1050 /* . . . . x x x . . . . . . . . . */
1051 /* . . . . x x x . . . . . . . . . */
1052 /* . . . . . x x . . . . . . . . . */
1054 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1055 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1056 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1057 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1058 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1059 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1061 /* . . . . x x x . . . . . . . . . */
1062 /* . . . . . x x x . . . . . . . . */
1063 /* . . . . . . X . . . . . . . . . */
1064 /* . . . . . x x x . . . . . . . . */
1065 /* . . . . . x x x . . . . . . . . */
1066 /* . . . . . . x x . . . . . . . . */
1068 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1069 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1070 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1071 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1072 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1073 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
1075 /* . . . . . x x x . . . . . . . . */
1076 /* . . . . . . x x x . . . . . . . */
1077 /* . . . . . . . X . . . . . . . . */
1078 /* . . . . . . x x x . . . . . . . */
1079 /* . . . . . . x x x . . . . . . . */
1080 /* . . . . . . . x x . . . . . . . */
1082 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1083 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1084 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1085 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1086 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1087 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
1089 /* . . . . . . x x . . . . . . . . */
1090 /* . . . . . . . x x x . . . . . . */
1091 /* . . . . . . . . X . . . . . . . */
1092 /* . . . . . . . x x . . . . . . . */
1093 /* . . . . . . . x x . . . . . . . */
1094 /* . . . . . . . . x x . . . . . . */
1096 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1097 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
1098 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
1099 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1100 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1101 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
1103 /* . . . . . . . x x . . . . . . . */
1104 /* . . . . . . . . . x x . . . . . */
1105 /* . . . . . . . . . X . . . . . . */
1106 /* . . . . . . . . x x . . . . . . */
1107 /* . . . . . . . . x x . . . . . . */
1108 /* . . . . . . . . . x x . . . . . */
1110 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1111 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1112 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
1113 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1114 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1115 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
1117 /* . . . . . . . . x x . . . . . . */
1118 /* . . . . . . . . . . x x . . . . */
1119 /* . . . . . . . . . . X . . . . . */
1120 /* . . . . . . . . . x x . . . . . */
1121 /* . . . . . . . . . x x . . . . . */
1122 /* . . . . . . . . . . x x . . . . */
1124 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1125 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1126 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
1127 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1128 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1129 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
1131 /* . . . . . . . . . x x . . . . . */
1132 /* . . . . . . . . . . . x x . . . */
1133 /* . . . . . . . . . . . X . . . . */
1134 /* . . . . . . . . . . x x . . . . */
1135 /* . . . . . . . . . . x x . . . . */
1136 /* . . . . . . . . . . . x x . . . */
1138 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1139 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1140 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
1141 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1142 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1143 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
1145 /* . . . . . . . . . . x x . . . . */
1146 /* . . . . . . . . . . . . x x . . */
1147 /* . . . . . . . . . . . . X . . . */
1148 /* . . . . . . . . . . . x x . . . */
1149 /* . . . . . . . . . . . x x . . . */
1150 /* . . . . . . . . . . . . x x . . */
1152 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1153 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1154 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
1155 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1156 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1157 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
1159 /* . . . . . . . . . . . x x . . . */
1160 /* . . . . . . . . . . . . . x x . */
1161 /* . . . . . . . . . . . . . X . . */
1162 /* . . . . . . . . . . . . x x . . */
1163 /* . . . . . . . . . . . . x x . . */
1164 /* . . . . . . . . . . . . . x x . */
1166 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1167 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1168 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
1169 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1170 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1171 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
1173 /* . . . . . . . . . . . . x x . . */
1174 /* . . . . . . . . . . . . . . x x */
1175 /* . . . . . . . . . . . . . . X . */
1176 /* . . . . . . . . . . . . . x x . */
1177 /* . . . . . . . . . . . . . x x . */
1178 /* . . . . . . . . . . . . . . x x */
1180 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1181 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1182 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
1183 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1184 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1185 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
1187 /* . . . . . . . . . . . . . x x . */
1188 /* . . . . . . . . . . . . . . . x */
1189 /* . . . . . . . . . . . . . . . X */
1190 /* . . . . . . . . . . . . . . x x */
1191 /* . . . . . . . . . . . . . . x x */
1192 /* . . . . . . . . . . . . . . . x */
1194 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1195 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1196 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1197 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1198 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1199 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}}
1202 const Float_t AliTRDgtuParam::fgkRadius[6] = { 300.65, 313.25, 325.85, 338.45, 351.05, 363.65 };
1203 const Float_t AliTRDgtuParam::fgkThickness = 3.;
1204 const Float_t AliTRDgtuParam::fgkRow0Pos[6][5] = {
1205 {301, 177, 53, -57, -181},
1206 {301, 177, 53, -57, -181},
1207 {315, 184, 53, -57, -188},
1208 {329, 191, 53, -57, -195},
1209 {343, 198, 53, -57, -202},
1210 {347, 200, 53, -57, -204}
1212 const Float_t AliTRDgtuParam::fgkInnerPadLength[] = {7.5, 7.5, 8.0, 8.5, 9.0, 9.0};
1213 const Float_t AliTRDgtuParam::fgkOuterPadLength[] = {7.5, 7.5, 7.5, 7.5, 7.5, 8.5};
1214 const Float_t AliTRDgtuParam::fgkAcoeff[32][6] = {
1215 {-3440, -3303, 3174, 3057, 0, 0},
1216 {-3481, 0, -171, 0, 3140, 0},
1217 {-2850, -1380, 0, 1277, 2441, 0},
1218 {-3481, 0, -171, 0, 3140, 0},
1219 { 0, -3568, -3431, 3303, 3185, 0},
1220 {-2783, -1378, -136, 1275, 2510, 0},
1221 {-1500, -2857, 1384, 0, 0, 2461},
1222 { 0, -3609, 0, -171, 0, 3268},
1223 {-3685, 0, 3400, -3276, 0, 3049},
1224 { 0, -3609, 0, -171, 0, 3268},
1225 {-1498, -2792, 1382, -132, 0, 2528},
1226 {-1850, -1777, 0, 0, 1585, 1531},
1227 {-3481, 0, -171, 0, 3140, 0},
1228 { 0, -2953, -1431, 0, 1328, 2544},
1229 {-1808, -1776, -89, 0, 1631, 1530},
1230 {-2932, 0, 0, -1314, 2511, 1223},
1231 { 0, -3609, 0, -171, 0, 3268},
1232 {-1849, -1738, 0, -82, 1583, 1574},
1233 { 0, 0, -3696, -3559, 3431, 3313},
1234 {-2863, 0, -140, -1312, 2582, 1221},
1235 { 0, -2886, -1429, -136, 1327, 2613},
1236 {-1806, -1736, -89, -82, 1629, 1572},
1237 { -1, -1, -1, -1, -1, -1},
1238 { -1, -1, -1, -1, -1, -1},
1239 { -1, -1, -1, -1, -1, -1},
1240 { -1, -1, -1, -1, -1, -1},
1241 { -1, -1, -1, -1, -1, -1},
1242 { -1, -1, -1, -1, -1, -1},
1243 { -1, -1, -1, -1, -1, -1},
1244 { -1, -1, -1, -1, -1, -1},
1245 { -1, -1, -1, -1, -1, -1},
1246 { -1, -1, -1, -1, -1, -1}
1248 const Int_t AliTRDgtuParam::fgkMaskID[] = {
1249 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1250 -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1251 -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1252 -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1255 AliTRDgtuParam::AliTRDgtuParam() :
1257 fCurrTrackletMask(0),
1262 fGeo = new AliTRDgeometry();
1263 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
1269 GenerateZChannelMap();
1272 AliTRDgtuParam::~AliTRDgtuParam()
1279 AliTRDgtuParam* AliTRDgtuParam::Instance()
1281 // get (or create) the single instance
1283 static AliTRDgtuParam instance;
1287 Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1289 return (fZSubChannel[stack][zchannel][layer][zpos] != 0);
1292 Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1294 return fZSubChannel[stack][zchannel][layer][zpos];
1297 Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx)
1299 // returns the reference layer indexed by refLayerIdx
1301 if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers)
1302 return fgRefLayers[refLayerIdx];
1307 Int_t AliTRDgtuParam::GenerateZChannelMap()
1309 // generate the z-channel map
1310 // assuming that the tracks come from the vertex
1311 // +/- fVertexSize in z-direction
1313 if (fgUseGTUconst) {
1314 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1315 for (Int_t iChannel = 0; iChannel < fGeo->GetRowMax(fgkFixLayer, iStack, 0); iChannel++) {
1316 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1317 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1318 if (fgZChannelMap[iStack][iChannel][iLayer][iRow] != 0) {
1319 fZChannelMap[iStack][iChannel][iLayer][iRow] = 1;
1320 fZSubChannel[iStack][iChannel % fgkNZChannels][iLayer][iRow] = iChannel / fgkNZChannels + 1;
1330 Int_t iSec = 0; // sector is irrelevant
1331 Bool_t collision = kFALSE;
1333 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1335 Float_t x[6] = { 0 };
1336 Float_t z[6][16] = {{ 0 }};
1337 Float_t dZ[6][16] = {{ 0 }};
1339 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1340 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1341 x[iLayer] = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ???
1342 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1343 z[iLayer][iRow] = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad
1344 dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction
1345 for (Int_t i = 0; i < fgkNZChannels; i++)
1346 fZSubChannel[iStack][i][iLayer][iRow] = 0;
1350 for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
1352 Double_t fixZmin = z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow];
1353 Double_t fixZmax = z[fgkFixLayer][fixRow];
1354 Double_t fixX = x[fgkFixLayer] + 1.5; // ??? 1.5 from where?
1356 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1357 Double_t leftZ, rightZ;
1359 if (iLayer <= fgkFixLayer) {
1360 leftZ = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1361 rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1364 leftZ = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1365 rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1368 Double_t epsilon = 0.001;
1369 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1370 if ( (z[iLayer][iRow] ) > (leftZ + epsilon) &&
1371 (z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) {
1372 fZChannelMap[iStack][fixRow][iLayer][iRow] = 1;
1373 if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) {
1374 AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!");
1378 fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1;
1390 Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const
1392 // display the z-channel map
1394 if (zchannel >= fgkNZChannels) {
1395 AliError("Invalid Z channel!");
1399 Int_t zchmin = zchannel >= 0 ? zchannel : 0;
1400 Int_t zchmax = zchannel >= 0 ? zchannel + 1 : fgkNZChannels;
1403 TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping");
1405 TGraph **graphz = new TGraph*[fgkNZChannels];
1406 for (Int_t zch = zchmin; zch < zchmax; zch++)
1407 graphz[zch] = new TGraph;
1408 TGraphAsymmErrors *graph = new TGraphAsymmErrors();
1409 graph->SetTitle("Z-Channel Map");
1410 graph->SetPoint(i, 0, 0); // vertex
1411 graph->SetPointError(i++, 20, 20, 0, 0);
1412 // graph->SetRange //????
1413 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1414 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1415 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1416 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1417 graph->SetPoint(i, pp->GetRowPos(iRow), fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1418 graph->SetPointError(i++, pp->GetRowSize(iRow), 0, 0, 0);
1419 for (Int_t zch = zchmin; zch < zchmax; zch++)
1420 if (fZSubChannel[iStack][zch][iLayer][iRow] != 0)
1421 if (subchannel == 0 || fZSubChannel[iStack][zch][iLayer][iRow] == subchannel)
1422 graphz[zch]->SetPoint(j++, pp->GetRowPos(iRow) - pp->GetRowSize(iRow)/2, fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1426 graph->SetMarkerStyle(kDot);
1429 for (Int_t zch = zchmin; zch < zchmax; zch++) {
1430 graphz[zch]->SetMarkerStyle(kCircle);
1431 graphz[zch]->SetMarkerColor(zch+2);
1432 graphz[zch]->SetMarkerSize(0.3 + zch*0.2);
1433 graphz[zch]->Draw("P");
1434 gROOT->Add(graphz[zch]);
1440 Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const
1442 // get the constant for the calculation of alpha
1444 Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
1448 Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const
1450 // get the constant for the calculation of y_proj
1454 if (fgUseGTUconst) {
1455 Float_t xmid = (fgkRadius[0] + fgkRadius[5]) / 2.;
1456 ci = TMath::Nint(- (fgkRadius[layer] - xmid) * fgkBinWidthdY / (fgkBinWidthY * fgkThickness) * (1 << GetBitExcessYProj()));
1458 Float_t xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.;
1459 ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) );
1465 Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const
1467 // return yt for the calculation of y'
1471 if (fgUseGTUconst) {
1472 yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
1473 GetZrow(stack, layer, zrow) * TMath::Tan(- 2./180. * TMath::Pi()) / fgkBinWidthY ));
1475 yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
1476 (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2.) *
1477 TMath::Tan(- 2./180. * TMath::Pi()) ) / fgkBinWidthY );
1483 Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask)
1485 // calculate the coefficients for the straight line fit
1486 // depending on the mask of contributing tracklets
1488 fCurrTrackletMask = trackletMask;
1490 TMatrix a(GetNLayers(), 3);
1491 TMatrix b(3, GetNLayers());
1494 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1495 if ( (trackletMask & (1 << layer)) == 0) {
1502 a(layer, 1) = fGeo->GetTime0(layer);
1503 a(layer, 2) = (layer % 2 ? 1 : -1) * fGeo->GetTime0(layer);
1512 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1513 fAki[layer] = b.GetMatrixArray()[layer];
1514 fBki[layer] = b.GetMatrixArray()[GetNLayers() + layer];
1515 fCki[layer] = b.GetMatrixArray()[2 * GetNLayers() + layer];
1520 Int_t AliTRDgtuParam::GetAki(Int_t k, Int_t i)
1522 // get A_ki for the calculation of the tracking parameters
1523 if (fgUseGTUconst) {
1524 Int_t maskId = fgkMaskID[k];
1525 return fgkAcoeff[maskId][i];
1527 if (fCurrTrackletMask != k)
1528 GenerateRecoCoefficients(k);
1529 return -(((Int_t) fAki[i]) << 9);
1533 Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i)
1535 // get B_ki for the calculation of the tracking parameters
1537 if (fCurrTrackletMask != k)
1538 GenerateRecoCoefficients(k);
1543 Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i)
1545 // get B_ki for the calculation of the tracking parameters
1547 if (fCurrTrackletMask != k)
1548 GenerateRecoCoefficients(k);
1554 Float_t AliTRDgtuParam::GetD(Int_t k) const
1556 // get the determinant for the calculation of the tracking parameters
1559 for (Int_t i = 0; i < GetNLayers(); i++) {
1560 if ( !((k >> i) & 0x1) )
1562 Float_t xi = fGeo->GetTime0(i);
1565 t(2,0) += TMath::Power(-1, i) * xi;
1567 t(1,1) += TMath::Power(xi, 2);
1568 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1569 t(0,2) += TMath::Power(-1, i) * xi;
1570 t(1,2) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1571 t(2,2) += TMath::Power(xi, 2);
1573 return t.Determinant();
1576 Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k)
1578 // calculate the fitting parameters
1582 for (Int_t i = 0; i < GetNLayers(); i++) {
1583 if ( !((k >> i) & 0x1) )
1585 Float_t xi = fGeo->GetTime0(i);
1588 t(2,0) += TMath::Power(-1, i) * xi;
1590 t(1,1) += TMath::Power(xi, 2);
1591 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1592 t(0,2) -= TMath::Power(-1, i) * xi;
1593 t(1,2) -= TMath::Power(-1, i) * TMath::Power(xi, 2);
1594 t(2,2) -= TMath::Power(xi, 2);
1598 return lr.Decompose();
1602 Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2)
1604 // get the x-coord. of the assumed circle/straight line intersection points
1609 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1610 if ( (k >> layer) & 0x1 ) {
1618 if ( (l1 >= 0) && (l2 >= 0) ) {
1619 x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1);
1620 x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1);
1627 Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2, Float_t magField)
1629 // returns 0.3 * B * 1/a (1/128 GeV/c)
1630 // a : offset, b : slope (not used)
1632 // protect against division by zero, covers both cases
1634 return fgkPtInfinity;
1636 if (fgUseGTUconst) {
1637 //----- calculation as in the GTU ----
1638 const Int_t maskIdLut[64] = {
1639 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1640 -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1641 -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1642 -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1645 const Int_t c1Lut[32] = {
1646 -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
1647 -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
1648 -2670, -2557, -2763, -2557, -2644, -2523, -1, -1,
1649 -1, -1, -1, -1, -1, -1, -1, -1
1652 Int_t layerMaskId = maskIdLut[layerMask];
1653 Int_t c1 = c1Lut[layerMaskId];
1654 Int_t c1Ext = c1 << 8;
1655 Int_t ptRawStage4 = c1Ext / (a >> 2);
1656 Int_t ptRawComb4 = ptRawStage4;
1657 Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
1659 return ((Int_t) ptExtComb4/2);
1662 //----- simple calculation -----
1663 Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
1666 r = (0.3 * magField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
1668 Int_t pt = (Int_t) (2 * r);