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 AliTRDgtuParam *AliTRDgtuParam::fgInstance = 0;
43 Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE;
44 Bool_t AliTRDgtuParam::fgUseGTUmerge = kTRUE;
45 Bool_t AliTRDgtuParam::fgLimitNoTracklets = kTRUE;
46 Int_t AliTRDgtuParam::fgMaxNoTracklets = 62;
48 // ----- matching windows -----
49 Int_t AliTRDgtuParam::fgDeltaY = 19;
50 Int_t AliTRDgtuParam::fgDeltaAlpha = 21;
51 // ----- reference layers -----
52 Int_t AliTRDgtuParam::fgRefLayers[] = { 3, 2, 1 };
54 // ----- Bin widths (granularity) -----
55 const Float_t AliTRDgtuParam::fgkBinWidthY = 160e-4;
56 const Float_t AliTRDgtuParam::fgkBinWidthdY = 140e-4;
58 // ----- Bit widths (used for internal representation) -----
59 const Int_t AliTRDgtuParam::fgkBitWidthY = 13;
60 const Int_t AliTRDgtuParam::fgkBitWidthdY = 7;
61 const Int_t AliTRDgtuParam::fgkBitWidthYProj = 10;
62 const Int_t AliTRDgtuParam::fgkBitExcessY = 4;
63 const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10;
64 const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2;
66 // pt higher than the one for smallest possible a != 0
67 const Int_t AliTRDgtuParam::fgkPtInfinity = std::numeric_limits<Int_t>::max();
69 // ----- geometry constants used in GTU -----
70 const Bool_t AliTRDgtuParam::fgZChannelMap[5][16][6][16] = {
72 { /* --- Stack 0 --- */
74 /* . x x . . . . . . . . . . . . . */
75 /* x . . . . . . . . . . . . . . . */
76 /* X . . . . . . . . . . . . . . . */
77 /* x x . . . . . . . . . . . . . . */
78 /* x x . . . . . . . . . . . . . . */
79 /* x . . . . . . . . . . . . . . . */
81 {{0, 1, 1, 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, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
86 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
88 /* . . x x . . . . . . . . . . . . */
89 /* x x . . . . . . . . . . . . . . */
90 /* . X . . . . . . . . . . . . . . */
91 /* . x x . . . . . . . . . . . . . */
92 /* . x x . . . . . . . . . . . . . */
93 /* x x . . . . . . . . . . . . . . */
95 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
96 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
97 {0, 1, 0, 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 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
100 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
102 /* . . . x x . . . . . . . . . . . */
103 /* . x x . . . . . . . . . . . . . */
104 /* . . X . . . . . . . . . . . . . */
105 /* . . x x . . . . . . . . . . . . */
106 /* . . x x . . . . . . . . . . . . */
107 /* . x x . . . . . . . . . . . . . */
109 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
110 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
111 {0, 0, 1, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
114 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
116 /* . . . . x x . . . . . . . . . . */
117 /* . . x x . . . . . . . . . . . . */
118 /* . . . X . . . . . . . . . . . . */
119 /* . . . x x . . . . . . . . . . . */
120 /* . . . x x . . . . . . . . . . . */
121 /* . . x x . . . . . . . . . . . . */
123 {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
124 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
125 {0, 0, 0, 1, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
128 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
130 /* . . . . . x x . . . . . . . . . */
131 /* . . . x x . . . . . . . . . . . */
132 /* . . . . X . . . . . . . . . . . */
133 /* . . . . x x . . . . . . . . . . */
134 /* . . . . x x . . . . . . . . . . */
135 /* . . . x x . . . . . . . . . . . */
137 {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
138 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
139 {0, 0, 0, 0, 1, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
142 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
144 /* . . . . . . x x . . . . . . . . */
145 /* . . . . x x . . . . . . . . . . */
146 /* . . . . . X . . . . . . . . . . */
147 /* . . . . . x x . . . . . . . . . */
148 /* . . . . . x x . . . . . . . . . */
149 /* . . . . x x . . . . . . . . . . */
151 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
152 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
153 {0, 0, 0, 0, 0, 1, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
156 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
158 /* . . . . . . . x x . . . . . . . */
159 /* . . . . . x x . . . . . . . . . */
160 /* . . . . . . X . . . . . . . . . */
161 /* . . . . . . x x . . . . . . . . */
162 /* . . . . . . x x . . . . . . . . */
163 /* . . . . . x x . . . . . . . . . */
165 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
166 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
167 {0, 0, 0, 0, 0, 0, 1, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
170 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
172 /* . . . . . . . . x x . . . . . . */
173 /* . . . . . . x x x . . . . . . . */
174 /* . . . . . . . X . . . . . . . . */
175 /* . . . . . . . x x . . . . . . . */
176 /* . . . . . . . x x . . . . . . . */
177 /* . . . . . . x x . . . . . . . . */
179 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
180 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
181 {0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
184 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
186 /* . . . . . . . . x x x . . . . . */
187 /* . . . . . . . x x x . . . . . . */
188 /* . . . . . . . . X . . . . . . . */
189 /* . . . . . . . x x x . . . . . . */
190 /* . . . . . . . x x x . . . . . . */
191 /* . . . . . . . x x . . . . . . . */
193 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
194 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
195 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0},
198 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
200 /* . . . . . . . . . x x x . . . . */
201 /* . . . . . . . . x x x . . . . . */
202 /* . . . . . . . . . X . . . . . . */
203 /* . . . . . . . . x x x . . . . . */
204 /* . . . . . . . . x x x . . . . . */
205 /* . . . . . . . . x x . . . . . . */
207 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
208 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
209 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0},
212 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
214 /* . . . . . . . . . . x x x . . . */
215 /* . . . . . . . . . x x x . . . . */
216 /* . . . . . . . . . . X . . . . . */
217 /* . . . . . . . . . x x x . . . . */
218 /* . . . . . . . . . x x x . . . . */
219 /* . . . . . . . . . x x . . . . . */
221 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
222 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
223 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0},
226 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
228 /* . . . . . . . . . . . x x x . . */
229 /* . . . . . . . . . . x x x . . . */
230 /* . . . . . . . . . . . X . . . . */
231 /* . . . . . . . . . . x x x . . . */
232 /* . . . . . . . . . . x x x . . . */
233 /* . . . . . . . . . . x x . . . . */
235 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
236 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
237 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0},
240 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
242 /* . . . . . . . . . . . . x x x . */
243 /* . . . . . . . . . . . x x x . . */
244 /* . . . . . . . . . . . . X . . . */
245 /* . . . . . . . . . . . x x x . . */
246 /* . . . . . . . . . . . x x x . . */
247 /* . . . . . . . . . . . x x . . . */
249 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
250 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
251 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0, 0},
254 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
256 /* . . . . . . . . . . . . . x x x */
257 /* . . . . . . . . . . . . x x x . */
258 /* . . . . . . . . . . . . . X . . */
259 /* . . . . . . . . . . . . x x x . */
260 /* . . . . . . . . . . . . x x x . */
261 /* . . . . . . . . . . . . x x . . */
263 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
264 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
265 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 0},
268 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
270 /* . . . . . . . . . . . . . . x x */
271 /* . . . . . . . . . . . . . x x x */
272 /* . . . . . . . . . . . . . . X . */
273 /* . . . . . . . . . . . . . x x x */
274 /* . . . . . . . . . . . . . x x x */
275 /* . . . . . . . . . . . . . x x . */
277 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
278 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
279 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
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, 1},
282 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
284 /* . . . . . . . . . . . . . . . x */
285 /* . . . . . . . . . . . . . . x x */
286 /* . . . . . . . . . . . . . . . X */
287 /* . . . . . . . . . . . . . . x x */
288 /* . . . . . . . . . . . . . . x x */
289 /* . . . . . . . . . . . . . . x x */
291 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
292 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
293 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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},
296 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
298 { /* --- Stack 1 --- */
300 /* x x x . . . . . . . . . . . . . */
301 /* x x . . . . . . . . . . . . . . */
302 /* X . . . . . . . . . . . . . . . */
303 /* x x . . . . . . . . . . . . . . */
304 /* x x . . . . . . . . . . . . . . */
305 /* x . . . . . . . . . . . . . . . */
307 {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
308 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
309 {1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
312 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
314 /* . x x x . . . . . . . . . . . . */
315 /* x x x . . . . . . . . . . . . . */
316 /* . X . . . . . . . . . . . . . . */
317 /* x x x . . . . . . . . . . . . . */
318 /* x x x . . . . . . . . . . . . . */
319 /* x x . . . . . . . . . . . . . . */
321 {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
322 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
323 {0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
326 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
328 /* . . x x x . . . . . . . . . . . */
329 /* . x x x . . . . . . . . . . . . */
330 /* . . X . . . . . . . . . . . . . */
331 /* . x x x . . . . . . . . . . . . */
332 /* . x x x . . . . . . . . . . . . */
333 /* . x x . . . . . . . . . . . . . */
335 {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
336 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
337 {0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
340 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
342 /* . . . x x x . . . . . . . . . . */
343 /* . . x x x . . . . . . . . . . . */
344 /* . . . X . . . . . . . . . . . . */
345 /* . . x x x . . . . . . . . . . . */
346 /* . . x x x . . . . . . . . . . . */
347 /* . . x x . . . . . . . . . . . . */
349 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
350 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
351 {0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
354 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
356 /* . . . . x x x . . . . . . . . . */
357 /* . . . x x x . . . . . . . . . . */
358 /* . . . . X . . . . . . . . . . . */
359 /* . . . x x x . . . . . . . . . . */
360 /* . . . x x x . . . . . . . . . . */
361 /* . . . x x . . . . . . . . . . . */
363 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
364 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
365 {0, 0, 0, 0, 1, 0, 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, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
368 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
370 /* . . . . . x x x . . . . . . . . */
371 /* . . . . x x x . . . . . . . . . */
372 /* . . . . . X . . . . . . . . . . */
373 /* . . . . x x . . . . . . . . . . */
374 /* . . . . x x . . . . . . . . . . */
375 /* . . . . x x . . . . . . . . . . */
377 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
378 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
379 {0, 0, 0, 0, 0, 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},
382 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
384 /* . . . . . . x x x . . . . . . . */
385 /* . . . . . . x x . . . . . . . . */
386 /* . . . . . . X . . . . . . . . . */
387 /* . . . . . x x . . . . . . . . . */
388 /* . . . . . x x . . . . . . . . . */
389 /* . . . . . x x . . . . . . . . . */
391 {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
392 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
393 {0, 0, 0, 0, 0, 0, 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},
396 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
398 /* . . . . . . . x x . . . . . . . */
399 /* . . . . . . . x x . . . . . . . */
400 /* . . . . . . . X . . . . . . . . */
401 /* . . . . . . x x . . . . . . . . */
402 /* . . . . . . x x . . . . . . . . */
403 /* . . . . . . x x . . . . . . . . */
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, 1, 0, 0, 0, 0, 0, 0, 0},
407 {0, 0, 0, 0, 0, 0, 0, 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},
410 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
412 /* . . . . . . . . x x . . . . . . */
413 /* . . . . . . . . x x . . . . . . */
414 /* . . . . . . . . X . . . . . . . */
415 /* . . . . . . . x x . . . . . . . */
416 /* . . . . . . . x x . . . . . . . */
417 /* . . . . . . . x x . . . . . . . */
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, 1, 0, 0, 0, 0, 0, 0},
421 {0, 0, 0, 0, 0, 0, 0, 0, 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},
424 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
426 /* . . . . . . . . . x x . . . . . */
427 /* . . . . . . . . . x x . . . . . */
428 /* . . . . . . . . . X . . . . . . */
429 /* . . . . . . . . x x . . . . . . */
430 /* . . . . . . . . x x . . . . . . */
431 /* . . . . . . . . x x . . . . . . */
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, 1, 0, 0, 0, 0, 0},
435 {0, 0, 0, 0, 0, 0, 0, 0, 0, 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},
438 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
440 /* . . . . . . . . . . x x . . . . */
441 /* . . . . . . . . . . x x . . . . */
442 /* . . . . . . . . . . X . . . . . */
443 /* . . . . . . . . . x x . . . . . */
444 /* . . . . . . . . . x x . . . . . */
445 /* . . . . . . . . . x x . . . . . */
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, 1, 0, 0, 0, 0},
449 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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},
452 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
454 /* . . . . . . . . . . . x x . . . */
455 /* . . . . . . . . . . . x x . . . */
456 /* . . . . . . . . . . . X . . . . */
457 /* . . . . . . . . . . x x . . . . */
458 /* . . . . . . . . . . x x . . . . */
459 /* . . . . . . . . . . x x . . . . */
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, 1, 0, 0, 0},
463 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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},
466 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
468 /* . . . . . . . . . . . . x x . . */
469 /* . . . . . . . . . . . . x x . . */
470 /* . . . . . . . . . . . . X . . . */
471 /* . . . . . . . . . . . x x . . . */
472 /* . . . . . . . . . . . x x . . . */
473 /* . . . . . . . . . . . x x . . . */
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, 1, 0, 0},
477 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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},
480 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
482 /* . . . . . . . . . . . . . x x . */
483 /* . . . . . . . . . . . . . x x . */
484 /* . . . . . . . . . . . . . X . . */
485 /* . . . . . . . . . . . . x x . . */
486 /* . . . . . . . . . . . . x x . . */
487 /* . . . . . . . . . . . . x x . . */
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, 1, 0},
491 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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},
494 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
496 /* . . . . . . . . . . . . . . x x */
497 /* . . . . . . . . . . . . . . x x */
498 /* . . . . . . . . . . . . . . X . */
499 /* . . . . . . . . . . . . . x x . */
500 /* . . . . . . . . . . . . . x x . */
501 /* . . . . . . . . . . . . . x x . */
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, 1},
505 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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},
508 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
510 /* . . . . . . . . . . . . . . . x */
511 /* . . . . . . . . . . . . . . . x */
512 /* . . . . . . . . . . . . . . . X */
513 /* . . . . . . . . . . . . . . x x */
514 /* . . . . . . . . . . . . . . x x */
515 /* . . . . . . . . . . . . . . x x */
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, 0, 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},
522 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
524 { /* --- Stack 2 --- */
526 /* x x . . . . . . . . . . */
527 /* x x . . . . . . . . . . */
528 /* X . . . . . . . . . . . */
529 /* x . . . . . . . . . . . */
530 /* x . . . . . . . . . . . */
531 /* x . . . . . . . . . . . */
533 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
534 {1, 1, 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},
538 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
540 /* . x x . . . . . . . . . */
541 /* . x x . . . . . . . . . */
542 /* . X . . . . . . . . . . */
543 /* x x . . . . . . . . . . */
544 /* x x . . . . . . . . . . */
545 /* x x . . . . . . . . . . */
547 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
548 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
549 {0, 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},
552 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
554 /* . . x x . . . . . . . . */
555 /* . . x x . . . . . . . . */
556 /* . . X . . . . . . . . . */
557 /* . x x . . . . . . . . . */
558 /* . x x . . . . . . . . . */
559 /* . x x . . . . . . . . . */
561 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
562 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
563 {0, 0, 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},
566 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
568 /* . . . x x . . . . . . . */
569 /* . . . x x . . . . . . . */
570 /* . . . X . . . . . . . . */
571 /* . . x x x . . . . . . . */
572 /* . . x x x . . . . . . . */
573 /* . . x x x . . . . . . . */
575 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
576 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
577 {0, 0, 0, 1, 0, 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},
580 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
582 /* . . . x x x . . . . . . */
583 /* . . . x x x . . . . . . */
584 /* . . . . X . . . . . . . */
585 /* . . . x x x . . . . . . */
586 /* . . . x x x . . . . . . */
587 /* . . . x x x . . . . . . */
589 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
590 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
591 {0, 0, 0, 0, 1, 0, 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},
594 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
596 /* . . . . x x x . . . . . */
597 /* . . . . x x x . . . . . */
598 /* . . . . . X . . . . . . */
599 /* . . . . x x x . . . . . */
600 /* . . . . x x x . . . . . */
601 /* . . . . x x x . . . . . */
603 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
604 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
605 {0, 0, 0, 0, 0, 1, 0, 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},
608 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
610 /* . . . . . x x x . . . . */
611 /* . . . . . x x x . . . . */
612 /* . . . . . . X . . . . . */
613 /* . . . . . x x x . . . . */
614 /* . . . . . x x x . . . . */
615 /* . . . . . x x x . . . . */
617 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
618 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
619 {0, 0, 0, 0, 0, 0, 1, 0, 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},
622 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
624 /* . . . . . . x x x . . . */
625 /* . . . . . . x x x . . . */
626 /* . . . . . . . X . . . . */
627 /* . . . . . . x x x . . . */
628 /* . . . . . . x x x . . . */
629 /* . . . . . . x x x . . . */
631 {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
632 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
633 {0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
636 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
638 /* . . . . . . . x x . . . */
639 /* . . . . . . . x x . . . */
640 /* . . . . . . . . X . . . */
641 /* . . . . . . . x x x . . */
642 /* . . . . . . . x x x . . */
643 /* . . . . . . . x x x . . */
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, 1, 1, 0, 0, 0, 0, 0, 0, 0},
647 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
650 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}},
652 /* . . . . . . . . x x . . */
653 /* . . . . . . . . x x . . */
654 /* . . . . . . . . . X . . */
655 /* . . . . . . . . . x x . */
656 /* . . . . . . . . . x x . */
657 /* . . . . . . . . . x x . */
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, 1, 1, 0, 0, 0, 0, 0, 0},
661 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
664 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
666 /* . . . . . . . . . x x . */
667 /* . . . . . . . . . x x . */
668 /* . . . . . . . . . . X . */
669 /* . . . . . . . . . . x x */
670 /* . . . . . . . . . . x x */
671 /* . . . . . . . . . . x x */
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, 1, 1, 0, 0, 0, 0, 0},
675 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
678 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
680 /* . . . . . . . . . . x x */
681 /* . . . . . . . . . . x x */
682 /* . . . . . . . . . . . X */
683 /* . . . . . . . . . . . x */
684 /* . . . . . . . . . . . x */
685 /* . . . . . . . . . . . x */
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, 1, 1, 0, 0, 0, 0},
689 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
692 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
694 /* . . . . . . . . . . . . */
695 /* . . . . . . . . . . . . */
696 /* . . . . . . . . . . . . */
697 /* . . . . . . . . . . . . */
698 /* . . . . . . . . . . . . */
699 /* . . . . . . . . . . . . */
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},
706 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
708 /* . . . . . . . . . . . . */
709 /* . . . . . . . . . . . . */
710 /* . . . . . . . . . . . . */
711 /* . . . . . . . . . . . . */
712 /* . . . . . . . . . . . . */
713 /* . . . . . . . . . . . . */
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},
720 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
722 /* . . . . . . . . . . . . */
723 /* . . . . . . . . . . . . */
724 /* . . . . . . . . . . . . */
725 /* . . . . . . . . . . . . */
726 /* . . . . . . . . . . . . */
727 /* . . . . . . . . . . . . */
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},
734 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
736 /* . . . . . . . . . . . . */
737 /* . . . . . . . . . . . . */
738 /* . . . . . . . . . . . . */
739 /* . . . . . . . . . . . . */
740 /* . . . . . . . . . . . . */
741 /* . . . . . . . . . . . . */
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},
748 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}},
750 { /* --- Stack 3 --- */
752 /* x . . . . . . . . . . . . . . . */
753 /* x . . . . . . . . . . . . . . . */
754 /* X . . . . . . . . . . . . . . . */
755 /* x x . . . . . . . . . . . . . . */
756 /* x x . . . . . . . . . . . . . . */
757 /* x x . . . . . . . . . . . . . . */
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, 0, 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},
764 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
766 /* x x . . . . . . . . . . . . . . */
767 /* x x . . . . . . . . . . . . . . */
768 /* . X . . . . . . . . . . . . . . */
769 /* . x x . . . . . . . . . . . . . */
770 /* . x x . . . . . . . . . . . . . */
771 /* . x x . . . . . . . . . . . . . */
773 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
774 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
775 {0, 1, 0, 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},
778 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
780 /* . x x . . . . . . . . . . . . . */
781 /* . x x . . . . . . . . . . . . . */
782 /* . . X . . . . . . . . . . . . . */
783 /* . . x x . . . . . . . . . . . . */
784 /* . . x x . . . . . . . . . . . . */
785 /* . . x x . . . . . . . . . . . . */
787 {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
788 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
789 {0, 0, 1, 0, 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},
792 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
794 /* . . x x . . . . . . . . . . . . */
795 /* . . x x . . . . . . . . . . . . */
796 /* . . . X . . . . . . . . . . . . */
797 /* . . . x x . . . . . . . . . . . */
798 /* . . . x x . . . . . . . . . . . */
799 /* . . . x x . . . . . . . . . . . */
801 {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
802 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
803 {0, 0, 0, 1, 0, 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},
806 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
808 /* . . . x x . . . . . . . . . . . */
809 /* . . . x x . . . . . . . . . . . */
810 /* . . . . X . . . . . . . . . . . */
811 /* . . . . x x . . . . . . . . . . */
812 /* . . . . x x . . . . . . . . . . */
813 /* . . . . x x . . . . . . . . . . */
815 {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
816 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
817 {0, 0, 0, 0, 1, 0, 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},
820 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
822 /* . . . . x x . . . . . . . . . . */
823 /* . . . . x x . . . . . . . . . . */
824 /* . . . . . X . . . . . . . . . . */
825 /* . . . . . x x . . . . . . . . . */
826 /* . . . . . x x . . . . . . . . . */
827 /* . . . . . x x . . . . . . . . . */
829 {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
830 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
831 {0, 0, 0, 0, 0, 1, 0, 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},
834 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
836 /* . . . . . x x . . . . . . . . . */
837 /* . . . . . x x . . . . . . . . . */
838 /* . . . . . . X . . . . . . . . . */
839 /* . . . . . . x x . . . . . . . . */
840 /* . . . . . . x x . . . . . . . . */
841 /* . . . . . . x x . . . . . . . . */
843 {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
844 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
845 {0, 0, 0, 0, 0, 0, 1, 0, 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},
848 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
850 /* . . . . . . x x . . . . . . . . */
851 /* . . . . . . x x . . . . . . . . */
852 /* . . . . . . . X . . . . . . . . */
853 /* . . . . . . . x x . . . . . . . */
854 /* . . . . . . . x x . . . . . . . */
855 /* . . . . . . . x x . . . . . . . */
857 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
858 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
859 {0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
862 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
864 /* . . . . . . . x x . . . . . . . */
865 /* . . . . . . . x x . . . . . . . */
866 /* . . . . . . . . X . . . . . . . */
867 /* . . . . . . . . x x . . . . . . */
868 /* . . . . . . . . x x . . . . . . */
869 /* . . . . . . . . x x . . . . . . */
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, 1, 1, 0, 0, 0, 0, 0, 0, 0},
873 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
876 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
878 /* . . . . . . . x x x . . . . . . */
879 /* . . . . . . . . x x . . . . . . */
880 /* . . . . . . . . . X . . . . . . */
881 /* . . . . . . . . . x x . . . . . */
882 /* . . . . . . . . . x x . . . . . */
883 /* . . . . . . . . . x x . . . . . */
885 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
886 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
887 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
890 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
892 /* . . . . . . . . x x x . . . . . */
893 /* . . . . . . . . . x x x . . . . */
894 /* . . . . . . . . . . X . . . . . */
895 /* . . . . . . . . . . x x . . . . */
896 /* . . . . . . . . . . x x . . . . */
897 /* . . . . . . . . . . x x . . . . */
899 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
900 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
901 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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},
904 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
906 /* . . . . . . . . . x x x . . . . */
907 /* . . . . . . . . . . x x x . . . */
908 /* . . . . . . . . . . . X . . . . */
909 /* . . . . . . . . . . x x x . . . */
910 /* . . . . . . . . . . x x x . . . */
911 /* . . . . . . . . . . . x x . . . */
913 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
914 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
915 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 0, 0, 0},
918 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
920 /* . . . . . . . . . . x x x . . . */
921 /* . . . . . . . . . . . x x x . . */
922 /* . . . . . . . . . . . . X . . . */
923 /* . . . . . . . . . . . x x x . . */
924 /* . . . . . . . . . . . x x x . . */
925 /* . . . . . . . . . . . . x x . . */
927 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
928 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
929 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 0, 0},
932 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
934 /* . . . . . . . . . . . x x x . . */
935 /* . . . . . . . . . . . . x x x . */
936 /* . . . . . . . . . . . . . X . . */
937 /* . . . . . . . . . . . . x x x . */
938 /* . . . . . . . . . . . . x x x . */
939 /* . . . . . . . . . . . . . x x . */
941 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
942 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
943 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 0},
946 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
948 /* . . . . . . . . . . . . x x x . */
949 /* . . . . . . . . . . . . . x x x */
950 /* . . . . . . . . . . . . . . X . */
951 /* . . . . . . . . . . . . . x x x */
952 /* . . . . . . . . . . . . . x x x */
953 /* . . . . . . . . . . . . . . x x */
955 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
956 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
957 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
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, 1, 1, 1},
960 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
962 /* . . . . . . . . . . . . . x x x */
963 /* . . . . . . . . . . . . . . x x */
964 /* . . . . . . . . . . . . . . . X */
965 /* . . . . . . . . . . . . . . x x */
966 /* . . . . . . . . . . . . . . x x */
967 /* . . . . . . . . . . . . . . . x */
969 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
970 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
971 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1},
974 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}},
976 { /* --- Stack 4 --- */
978 /* x . . . . . . . . . . . . . . . */
979 /* x x . . . . . . . . . . . . . . */
980 /* X . . . . . . . . . . . . . . . */
981 /* x x . . . . . . . . . . . . . . */
982 /* x x . . . . . . . . . . . . . . */
983 /* x x . . . . . . . . . . . . . . */
985 {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
986 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
987 {1, 0, 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},
990 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
992 /* x x . . . . . . . . . . . . . . */
993 /* x x x . . . . . . . . . . . . . */
994 /* . X . . . . . . . . . . . . . . */
995 /* x x x . . . . . . . . . . . . . */
996 /* x x x . . . . . . . . . . . . . */
997 /* . x x . . . . . . . . . . . . . */
999 {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1000 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1001 {0, 1, 0, 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 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1004 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1006 /* x x x . . . . . . . . . . . . . */
1007 /* . x x x . . . . . . . . . . . . */
1008 /* . . X . . . . . . . . . . . . . */
1009 /* . x x x . . . . . . . . . . . . */
1010 /* . x x x . . . . . . . . . . . . */
1011 /* . . x x . . . . . . . . . . . . */
1013 {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1014 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1015 {0, 0, 1, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1018 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1020 /* . x x x . . . . . . . . . . . . */
1021 /* . . x x x . . . . . . . . . . . */
1022 /* . . . X . . . . . . . . . . . . */
1023 /* . . x x x . . . . . . . . . . . */
1024 /* . . x x x . . . . . . . . . . . */
1025 /* . . . x x . . . . . . . . . . . */
1027 {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1028 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1029 {0, 0, 0, 1, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1032 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1034 /* . . x x x . . . . . . . . . . . */
1035 /* . . . x x x . . . . . . . . . . */
1036 /* . . . . X . . . . . . . . . . . */
1037 /* . . . x x x . . . . . . . . . . */
1038 /* . . . x x x . . . . . . . . . . */
1039 /* . . . . x x . . . . . . . . . . */
1041 {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1042 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1043 {0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1046 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1048 /* . . . x x x . . . . . . . . . . */
1049 /* . . . . x x x . . . . . . . . . */
1050 /* . . . . . X . . . . . . . . . . */
1051 /* . . . . x x x . . . . . . . . . */
1052 /* . . . . x x x . . . . . . . . . */
1053 /* . . . . . x x . . . . . . . . . */
1055 {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1056 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1057 {0, 0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1060 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1062 /* . . . . x x x . . . . . . . . . */
1063 /* . . . . . x x x . . . . . . . . */
1064 /* . . . . . . X . . . . . . . . . */
1065 /* . . . . . x x x . . . . . . . . */
1066 /* . . . . . x x x . . . . . . . . */
1067 /* . . . . . . x x . . . . . . . . */
1069 {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1070 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1071 {0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1074 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
1076 /* . . . . . x x x . . . . . . . . */
1077 /* . . . . . . x x x . . . . . . . */
1078 /* . . . . . . . X . . . . . . . . */
1079 /* . . . . . . x x x . . . . . . . */
1080 /* . . . . . . x x x . . . . . . . */
1081 /* . . . . . . . x x . . . . . . . */
1083 {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1084 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1085 {0, 0, 0, 0, 0, 0, 0, 1, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1088 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
1090 /* . . . . . . x x . . . . . . . . */
1091 /* . . . . . . . x x x . . . . . . */
1092 /* . . . . . . . . X . . . . . . . */
1093 /* . . . . . . . x x . . . . . . . */
1094 /* . . . . . . . x x . . . . . . . */
1095 /* . . . . . . . . x x . . . . . . */
1097 {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1098 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
1099 {0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1102 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
1104 /* . . . . . . . x x . . . . . . . */
1105 /* . . . . . . . . . x x . . . . . */
1106 /* . . . . . . . . . X . . . . . . */
1107 /* . . . . . . . . x x . . . . . . */
1108 /* . . . . . . . . x x . . . . . . */
1109 /* . . . . . . . . . x x . . . . . */
1111 {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1112 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1113 {0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0},
1116 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
1118 /* . . . . . . . . x x . . . . . . */
1119 /* . . . . . . . . . . x x . . . . */
1120 /* . . . . . . . . . . X . . . . . */
1121 /* . . . . . . . . . x x . . . . . */
1122 /* . . . . . . . . . x x . . . . . */
1123 /* . . . . . . . . . . x x . . . . */
1125 {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1126 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1127 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0, 0},
1130 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
1132 /* . . . . . . . . . x x . . . . . */
1133 /* . . . . . . . . . . . x x . . . */
1134 /* . . . . . . . . . . . X . . . . */
1135 /* . . . . . . . . . . x x . . . . */
1136 /* . . . . . . . . . . x x . . . . */
1137 /* . . . . . . . . . . . x x . . . */
1139 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1140 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1141 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0, 0},
1144 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
1146 /* . . . . . . . . . . x x . . . . */
1147 /* . . . . . . . . . . . . x x . . */
1148 /* . . . . . . . . . . . . X . . . */
1149 /* . . . . . . . . . . . x x . . . */
1150 /* . . . . . . . . . . . x x . . . */
1151 /* . . . . . . . . . . . . x x . . */
1153 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1154 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1155 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0, 0},
1158 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
1160 /* . . . . . . . . . . . x x . . . */
1161 /* . . . . . . . . . . . . . x x . */
1162 /* . . . . . . . . . . . . . X . . */
1163 /* . . . . . . . . . . . . x x . . */
1164 /* . . . . . . . . . . . . x x . . */
1165 /* . . . . . . . . . . . . . x x . */
1167 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1168 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1169 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0, 0},
1172 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
1174 /* . . . . . . . . . . . . x x . . */
1175 /* . . . . . . . . . . . . . . x x */
1176 /* . . . . . . . . . . . . . . X . */
1177 /* . . . . . . . . . . . . . x x . */
1178 /* . . . . . . . . . . . . . x x . */
1179 /* . . . . . . . . . . . . . . x x */
1181 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1182 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1183 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 0},
1186 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
1188 /* . . . . . . . . . . . . . x x . */
1189 /* . . . . . . . . . . . . . . . x */
1190 /* . . . . . . . . . . . . . . . X */
1191 /* . . . . . . . . . . . . . . x x */
1192 /* . . . . . . . . . . . . . . x x */
1193 /* . . . . . . . . . . . . . . . x */
1195 {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
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, 0, 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, 1, 1},
1200 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}}
1203 const Float_t AliTRDgtuParam::fgkRadius[6] = { 300.65, 313.25, 325.85, 338.45, 351.05, 363.65 };
1204 const Float_t AliTRDgtuParam::fgkThickness = 3.;
1205 const Float_t AliTRDgtuParam::fgkRow0Pos[6][5] = {
1206 {301, 177, 53, -57, -181},
1207 {301, 177, 53, -57, -181},
1208 {315, 184, 53, -57, -188},
1209 {329, 191, 53, -57, -195},
1210 {343, 198, 53, -57, -202},
1211 {347, 200, 53, -57, -204}
1213 const Float_t AliTRDgtuParam::fgkInnerPadLength[] = {7.5, 7.5, 8.0, 8.5, 9.0, 9.0};
1214 const Float_t AliTRDgtuParam::fgkOuterPadLength[] = {7.5, 7.5, 7.5, 7.5, 7.5, 8.5};
1215 const Float_t AliTRDgtuParam::fgkAcoeff[32][6] = {
1216 {-3440, -3303, 3174, 3057, 0, 0},
1217 {-3481, 0, -171, 0, 3140, 0},
1218 {-2850, -1380, 0, 1277, 2441, 0},
1219 {-3481, 0, -171, 0, 3140, 0},
1220 { 0, -3568, -3431, 3303, 3185, 0},
1221 {-2783, -1378, -136, 1275, 2510, 0},
1222 {-1500, -2857, 1384, 0, 0, 2461},
1223 { 0, -3609, 0, -171, 0, 3268},
1224 {-3685, 0, 3400, -3276, 0, 3049},
1225 { 0, -3609, 0, -171, 0, 3268},
1226 {-1498, -2792, 1382, -132, 0, 2528},
1227 {-1850, -1777, 0, 0, 1585, 1531},
1228 {-3481, 0, -171, 0, 3140, 0},
1229 { 0, -2953, -1431, 0, 1328, 2544},
1230 {-1808, -1776, -89, 0, 1631, 1530},
1231 {-2932, 0, 0, -1314, 2511, 1223},
1232 { 0, -3609, 0, -171, 0, 3268},
1233 {-1849, -1738, 0, -82, 1583, 1574},
1234 { 0, 0, -3696, -3559, 3431, 3313},
1235 {-2863, 0, -140, -1312, 2582, 1221},
1236 { 0, -2886, -1429, -136, 1327, 2613},
1237 {-1806, -1736, -89, -82, 1629, 1572},
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},
1247 { -1, -1, -1, -1, -1, -1}
1249 const Int_t AliTRDgtuParam::fgkMaskID[] = {
1250 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1251 -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1252 -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1253 -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1256 AliTRDgtuParam::AliTRDgtuParam() :
1258 fCurrTrackletMask(0),
1263 fGeo = new AliTRDgeometry();
1264 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
1270 GenerateZChannelMap();
1273 AliTRDgtuParam::~AliTRDgtuParam()
1280 AliTRDgtuParam* AliTRDgtuParam::Instance()
1282 // get (or create) the single instance
1284 if (fgInstance == 0)
1285 fgInstance = new AliTRDgtuParam();
1290 void AliTRDgtuParam::Terminate()
1292 // destruct the instance
1294 if (fgInstance != 0) {
1300 Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1302 return (fZSubChannel[stack][zchannel][layer][zpos] != 0);
1305 Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1307 return fZSubChannel[stack][zchannel][layer][zpos];
1310 Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx)
1312 // returns the reference layer indexed by refLayerIdx
1314 if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers)
1315 return fgRefLayers[refLayerIdx];
1320 Int_t AliTRDgtuParam::GenerateZChannelMap()
1322 // generate the z-channel map
1323 // assuming that the tracks come from the vertex
1324 // +/- fVertexSize in z-direction
1326 if (fgUseGTUconst) {
1327 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1328 for (Int_t iChannel = 0; iChannel < fGeo->GetRowMax(fgkFixLayer, iStack, 0); iChannel++) {
1329 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1330 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1331 if (fgZChannelMap[iStack][iChannel][iLayer][iRow] != 0) {
1332 fZChannelMap[iStack][iChannel][iLayer][iRow] = 1;
1333 fZSubChannel[iStack][iChannel % fgkNZChannels][iLayer][iRow] = iChannel / fgkNZChannels + 1;
1343 Int_t iSec = 0; // sector is irrelevant
1344 Bool_t collision = kFALSE;
1346 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1348 Float_t x[6] = { 0 };
1349 Float_t z[6][16] = {{ 0 }};
1350 Float_t dZ[6][16] = {{ 0 }};
1352 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1353 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1354 x[iLayer] = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ???
1355 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1356 z[iLayer][iRow] = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad
1357 dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction
1358 for (Int_t i = 0; i < fgkNZChannels; i++)
1359 fZSubChannel[iStack][i][iLayer][iRow] = 0;
1363 for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
1365 Double_t fixZmin = z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow];
1366 Double_t fixZmax = z[fgkFixLayer][fixRow];
1367 Double_t fixX = x[fgkFixLayer] + 1.5; // ??? 1.5 from where?
1369 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1370 Double_t leftZ, rightZ;
1372 if (iLayer <= fgkFixLayer) {
1373 leftZ = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1374 rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1377 leftZ = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1378 rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1381 Double_t epsilon = 0.001;
1382 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1383 if ( (z[iLayer][iRow] ) > (leftZ + epsilon) &&
1384 (z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) {
1385 fZChannelMap[iStack][fixRow][iLayer][iRow] = 1;
1386 if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) {
1387 AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!");
1391 fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1;
1403 Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const
1405 // display the z-channel map
1407 if (zchannel >= fgkNZChannels) {
1408 AliError("Invalid Z channel!");
1412 Int_t zchmin = zchannel >= 0 ? zchannel : 0;
1413 Int_t zchmax = zchannel >= 0 ? zchannel + 1 : fgkNZChannels;
1416 TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping");
1418 TGraph **graphz = new TGraph*[fgkNZChannels];
1419 for (Int_t zch = zchmin; zch < zchmax; zch++)
1420 graphz[zch] = new TGraph;
1421 TGraphAsymmErrors *graph = new TGraphAsymmErrors();
1422 graph->SetTitle("Z-Channel Map");
1423 graph->SetPoint(i, 0, 0); // vertex
1424 graph->SetPointError(i++, 20, 20, 0, 0);
1425 // graph->SetRange //????
1426 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1427 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1428 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1429 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1430 graph->SetPoint(i, pp->GetRowPos(iRow), fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1431 graph->SetPointError(i++, pp->GetRowSize(iRow), 0, 0, 0);
1432 for (Int_t zch = zchmin; zch < zchmax; zch++)
1433 if (fZSubChannel[iStack][zch][iLayer][iRow] != 0)
1434 if (subchannel == 0 || fZSubChannel[iStack][zch][iLayer][iRow] == subchannel)
1435 graphz[zch]->SetPoint(j++, pp->GetRowPos(iRow) - pp->GetRowSize(iRow)/2, fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1439 graph->SetMarkerStyle(kDot);
1442 for (Int_t zch = zchmin; zch < zchmax; zch++) {
1443 graphz[zch]->SetMarkerStyle(kCircle);
1444 graphz[zch]->SetMarkerColor(zch+2);
1445 graphz[zch]->SetMarkerSize(0.3 + zch*0.2);
1446 graphz[zch]->Draw("P");
1447 gROOT->Add(graphz[zch]);
1453 Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const
1455 // get the constant for the calculation of alpha
1457 Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
1461 Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const
1463 // get the constant for the calculation of y_proj
1467 if (fgUseGTUconst) {
1468 Float_t xmid = (fgkRadius[0] + fgkRadius[5]) / 2.;
1469 ci = TMath::Nint(- (fgkRadius[layer] - xmid) * fgkBinWidthdY / (fgkBinWidthY * fgkThickness) * (1 << GetBitExcessYProj()));
1471 Float_t xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.;
1472 ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) );
1478 Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const
1480 // return yt for the calculation of y'
1484 if (fgUseGTUconst) {
1485 yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
1486 GetZrow(stack, layer, zrow) * TMath::Tan(- 2./180. * TMath::Pi()) / fgkBinWidthY ));
1488 yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
1489 (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2.) *
1490 TMath::Tan(- 2./180. * TMath::Pi()) ) / fgkBinWidthY );
1496 Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask)
1498 // calculate the coefficients for the straight line fit
1499 // depending on the mask of contributing tracklets
1501 fCurrTrackletMask = trackletMask;
1503 TMatrix a(GetNLayers(), 3);
1504 TMatrix b(3, GetNLayers());
1507 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1508 if ( (trackletMask & (1 << layer)) == 0) {
1515 a(layer, 1) = fGeo->GetTime0(layer);
1516 a(layer, 2) = (layer % 2 ? 1 : -1) * fGeo->GetTime0(layer);
1525 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1526 fAki[layer] = b.GetMatrixArray()[layer];
1527 fBki[layer] = b.GetMatrixArray()[GetNLayers() + layer];
1528 fCki[layer] = b.GetMatrixArray()[2 * GetNLayers() + layer];
1533 Int_t AliTRDgtuParam::GetAki(Int_t k, Int_t i)
1535 // get A_ki for the calculation of the tracking parameters
1536 if (fgUseGTUconst) {
1537 Int_t maskId = fgkMaskID[k];
1538 return fgkAcoeff[maskId][i];
1540 if (fCurrTrackletMask != k)
1541 GenerateRecoCoefficients(k);
1542 return -(((Int_t) fAki[i]) << 9);
1546 Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i)
1548 // get B_ki for the calculation of the tracking parameters
1550 if (fCurrTrackletMask != k)
1551 GenerateRecoCoefficients(k);
1556 Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i)
1558 // get B_ki for the calculation of the tracking parameters
1560 if (fCurrTrackletMask != k)
1561 GenerateRecoCoefficients(k);
1567 Float_t AliTRDgtuParam::GetD(Int_t k) const
1569 // get the determinant for the calculation of the tracking parameters
1572 for (Int_t i = 0; i < GetNLayers(); i++) {
1573 if ( !((k >> i) & 0x1) )
1575 Float_t xi = fGeo->GetTime0(i);
1578 t(2,0) += TMath::Power(-1, i) * xi;
1580 t(1,1) += TMath::Power(xi, 2);
1581 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1582 t(0,2) += TMath::Power(-1, i) * xi;
1583 t(1,2) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1584 t(2,2) += TMath::Power(xi, 2);
1586 return t.Determinant();
1589 Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k)
1591 // calculate the fitting parameters
1595 for (Int_t i = 0; i < GetNLayers(); i++) {
1596 if ( !((k >> i) & 0x1) )
1598 Float_t xi = fGeo->GetTime0(i);
1601 t(2,0) += TMath::Power(-1, i) * xi;
1603 t(1,1) += TMath::Power(xi, 2);
1604 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1605 t(0,2) -= TMath::Power(-1, i) * xi;
1606 t(1,2) -= TMath::Power(-1, i) * TMath::Power(xi, 2);
1607 t(2,2) -= TMath::Power(xi, 2);
1611 return lr.Decompose();
1615 Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2)
1617 // get the x-coord. of the assumed circle/straight line intersection points
1622 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1623 if ( (k >> layer) & 0x1 ) {
1631 if ( (l1 >= 0) && (l2 >= 0) ) {
1632 x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1);
1633 x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1);
1640 Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2, Float_t magField)
1642 // returns 0.3 * B * 1/a (1/128 GeV/c)
1643 // a : offset, b : slope (not used)
1645 // protect against division by zero, covers both cases
1647 return fgkPtInfinity;
1649 if (fgUseGTUconst) {
1650 //----- calculation as in the GTU ----
1651 const Int_t maskIdLut[64] = {
1652 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1653 -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1654 -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1655 -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1658 const Int_t c1Lut[32] = {
1659 -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
1660 -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
1661 -2670, -2557, -2763, -2557, -2644, -2523, -1, -1,
1662 -1, -1, -1, -1, -1, -1, -1, -1
1665 Int_t layerMaskId = maskIdLut[layerMask];
1666 Int_t c1 = c1Lut[layerMaskId];
1667 Int_t c1Ext = c1 << 8;
1668 Int_t ptRawStage4 = c1Ext / (a >> 2);
1669 Int_t ptRawComb4 = ptRawStage4;
1670 Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
1672 return ((Int_t) ptExtComb4/2);
1675 //----- simple calculation -----
1676 Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
1679 r = (0.3 * magField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
1681 Int_t pt = (Int_t) (2 * r);