]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDgtuParam.cxx
changes for Vertex and Tracks classes
[u/mrichter/AliRoot.git] / TRD / AliTRDgtuParam.cxx
CommitLineData
52c19022 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id: AliTRDgtuParam.cxx 28397 2008-09-02 09:33:00Z cblume $ */
17
18////////////////////////////////////////////////////////////////////////////
19// //
20// Parameters for GTU simulation //
21// //
22// Author: J. Klein (Jochen.Klein@cern.ch) //
23// //
24////////////////////////////////////////////////////////////////////////////
25
ec5db61b 26#include <limits>
27
637666cd 28#include "TROOT.h"
52c19022 29#include "TMath.h"
30#include "TMatrix.h"
31#include "TDecompLU.h"
32#include "TGraphAsymmErrors.h"
33#include "TCanvas.h"
34
35#include "AliLog.h"
36#include "AliTRDgtuParam.h"
37#include "AliTRDgeometry.h"
38#include "AliTRDpadPlane.h"
39
40ClassImp(AliTRDgtuParam)
41
44eafcf2 42Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE;
ec5db61b 43Bool_t AliTRDgtuParam::fgUseGTUmerge = kTRUE;
44Bool_t AliTRDgtuParam::fgLimitNoTracklets = kTRUE;
a3461d38 45Int_t AliTRDgtuParam::fgMaxNoTracklets = 62;
52c19022 46
2cf67435 47// ----- matching windows -----
48 Int_t AliTRDgtuParam::fgDeltaY = 19;
49 Int_t AliTRDgtuParam::fgDeltaAlpha = 21;
d2c8b010 50// ----- reference layers -----
51 Int_t AliTRDgtuParam::fgRefLayers[] = { 3, 2, 1 };
2cf67435 52
52c19022 53// ----- Bin widths (granularity) -----
54const Float_t AliTRDgtuParam::fgkBinWidthY = 160e-4;
55const Float_t AliTRDgtuParam::fgkBinWidthdY = 140e-4;
56
57// ----- Bit widths (used for internal representation) -----
58const Int_t AliTRDgtuParam::fgkBitWidthY = 13;
5f006bd7 59const Int_t AliTRDgtuParam::fgkBitWidthdY = 7;
52c19022 60const Int_t AliTRDgtuParam::fgkBitWidthYProj = 10;
5f006bd7 61const Int_t AliTRDgtuParam::fgkBitExcessY = 4;
62const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10;
63const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2;
52c19022 64
ec5db61b 65// pt higher than the one for smallest possible a != 0
66const Int_t AliTRDgtuParam::fgkPtInfinity = std::numeric_limits<Int_t>::max();
67
68// ----- geometry constants used in GTU -----
44eafcf2 69const Bool_t AliTRDgtuParam::fgZChannelMap[5][16][6][16] = {
70
71{ /* --- Stack 0 --- */
72
73/* . x x . . . . . . . . . . . . . */
74/* x . . . . . . . . . . . . . . . */
75/* X . . . . . . . . . . . . . . . */
76/* x x . . . . . . . . . . . . . . */
77/* x x . . . . . . . . . . . . . . */
78/* x . . . . . . . . . . . . . . . */
79
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}},
86
87/* . . x x . . . . . . . . . . . . */
88/* x x . . . . . . . . . . . . . . */
89/* . X . . . . . . . . . . . . . . */
90/* . x x . . . . . . . . . . . . . */
91/* . x x . . . . . . . . . . . . . */
92/* x x . . . . . . . . . . . . . . */
93
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}},
100
101/* . . . x x . . . . . . . . . . . */
102/* . x x . . . . . . . . . . . . . */
103/* . . X . . . . . . . . . . . . . */
104/* . . x x . . . . . . . . . . . . */
105/* . . x x . . . . . . . . . . . . */
106/* . x x . . . . . . . . . . . . . */
107
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}},
114
115/* . . . . x x . . . . . . . . . . */
116/* . . x x . . . . . . . . . . . . */
117/* . . . X . . . . . . . . . . . . */
118/* . . . x x . . . . . . . . . . . */
119/* . . . x x . . . . . . . . . . . */
120/* . . x x . . . . . . . . . . . . */
121
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}},
128
129/* . . . . . x x . . . . . . . . . */
130/* . . . x x . . . . . . . . . . . */
131/* . . . . X . . . . . . . . . . . */
132/* . . . . x x . . . . . . . . . . */
133/* . . . . x x . . . . . . . . . . */
134/* . . . x x . . . . . . . . . . . */
135
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}},
142
143/* . . . . . . x x . . . . . . . . */
144/* . . . . x x . . . . . . . . . . */
145/* . . . . . X . . . . . . . . . . */
146/* . . . . . x x . . . . . . . . . */
147/* . . . . . x x . . . . . . . . . */
148/* . . . . x x . . . . . . . . . . */
149
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}},
156
157/* . . . . . . . x x . . . . . . . */
158/* . . . . . x x . . . . . . . . . */
159/* . . . . . . X . . . . . . . . . */
160/* . . . . . . x x . . . . . . . . */
161/* . . . . . . x x . . . . . . . . */
162/* . . . . . x x . . . . . . . . . */
163
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}},
170
171/* . . . . . . . . x x . . . . . . */
172/* . . . . . . x x x . . . . . . . */
173/* . . . . . . . X . . . . . . . . */
174/* . . . . . . . x x . . . . . . . */
175/* . . . . . . . x x . . . . . . . */
176/* . . . . . . x x . . . . . . . . */
177
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}},
184
185/* . . . . . . . . x x x . . . . . */
186/* . . . . . . . x x x . . . . . . */
187/* . . . . . . . . X . . . . . . . */
188/* . . . . . . . x x x . . . . . . */
189/* . . . . . . . x x x . . . . . . */
190/* . . . . . . . x x . . . . . . . */
191
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}},
198
199/* . . . . . . . . . x x x . . . . */
200/* . . . . . . . . x x x . . . . . */
201/* . . . . . . . . . X . . . . . . */
202/* . . . . . . . . x x x . . . . . */
203/* . . . . . . . . x x x . . . . . */
204/* . . . . . . . . x x . . . . . . */
205
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}},
212
213/* . . . . . . . . . . x x x . . . */
214/* . . . . . . . . . x x x . . . . */
215/* . . . . . . . . . . X . . . . . */
216/* . . . . . . . . . x x x . . . . */
217/* . . . . . . . . . x x x . . . . */
218/* . . . . . . . . . x x . . . . . */
219
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}},
226
227/* . . . . . . . . . . . x x x . . */
228/* . . . . . . . . . . x x x . . . */
229/* . . . . . . . . . . . X . . . . */
230/* . . . . . . . . . . x x x . . . */
231/* . . . . . . . . . . x x x . . . */
232/* . . . . . . . . . . x x . . . . */
233
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}},
240
241/* . . . . . . . . . . . . x x x . */
242/* . . . . . . . . . . . x x x . . */
243/* . . . . . . . . . . . . X . . . */
244/* . . . . . . . . . . . x x x . . */
245/* . . . . . . . . . . . x x x . . */
246/* . . . . . . . . . . . x x . . . */
247
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}},
254
255/* . . . . . . . . . . . . . x x x */
256/* . . . . . . . . . . . . x x x . */
257/* . . . . . . . . . . . . . X . . */
258/* . . . . . . . . . . . . x x x . */
259/* . . . . . . . . . . . . x x x . */
260/* . . . . . . . . . . . . x x . . */
261
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}},
268
269/* . . . . . . . . . . . . . . x x */
270/* . . . . . . . . . . . . . x x x */
271/* . . . . . . . . . . . . . . X . */
272/* . . . . . . . . . . . . . x x x */
273/* . . . . . . . . . . . . . x x x */
274/* . . . . . . . . . . . . . x x . */
275
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}},
282
283/* . . . . . . . . . . . . . . . x */
284/* . . . . . . . . . . . . . . x x */
285/* . . . . . . . . . . . . . . . X */
286/* . . . . . . . . . . . . . . x x */
287/* . . . . . . . . . . . . . . x x */
288/* . . . . . . . . . . . . . . x x */
289
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}}},
296
297{ /* --- Stack 1 --- */
298
299/* x x x . . . . . . . . . . . . . */
300/* x x . . . . . . . . . . . . . . */
301/* X . . . . . . . . . . . . . . . */
302/* x x . . . . . . . . . . . . . . */
303/* x x . . . . . . . . . . . . . . */
304/* x . . . . . . . . . . . . . . . */
305
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}},
312
313/* . x x x . . . . . . . . . . . . */
314/* x x x . . . . . . . . . . . . . */
315/* . X . . . . . . . . . . . . . . */
316/* x x x . . . . . . . . . . . . . */
317/* x x x . . . . . . . . . . . . . */
318/* x x . . . . . . . . . . . . . . */
319
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}},
326
327/* . . x x x . . . . . . . . . . . */
328/* . x x x . . . . . . . . . . . . */
329/* . . X . . . . . . . . . . . . . */
330/* . x x x . . . . . . . . . . . . */
331/* . x x x . . . . . . . . . . . . */
332/* . x x . . . . . . . . . . . . . */
333
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}},
340
341/* . . . x x x . . . . . . . . . . */
342/* . . x x x . . . . . . . . . . . */
343/* . . . X . . . . . . . . . . . . */
344/* . . x x x . . . . . . . . . . . */
345/* . . x x x . . . . . . . . . . . */
346/* . . x x . . . . . . . . . . . . */
347
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}},
354
355/* . . . . x x x . . . . . . . . . */
356/* . . . x x x . . . . . . . . . . */
357/* . . . . X . . . . . . . . . . . */
358/* . . . x x x . . . . . . . . . . */
359/* . . . x x x . . . . . . . . . . */
360/* . . . x x . . . . . . . . . . . */
361
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}},
368
369/* . . . . . x x x . . . . . . . . */
370/* . . . . x x x . . . . . . . . . */
371/* . . . . . X . . . . . . . . . . */
372/* . . . . x x . . . . . . . . . . */
373/* . . . . x x . . . . . . . . . . */
374/* . . . . x x . . . . . . . . . . */
375
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}},
382
383/* . . . . . . x x x . . . . . . . */
384/* . . . . . . x x . . . . . . . . */
385/* . . . . . . X . . . . . . . . . */
386/* . . . . . x x . . . . . . . . . */
387/* . . . . . x x . . . . . . . . . */
388/* . . . . . x x . . . . . . . . . */
389
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}},
396
397/* . . . . . . . x x . . . . . . . */
398/* . . . . . . . x x . . . . . . . */
399/* . . . . . . . X . . . . . . . . */
400/* . . . . . . x x . . . . . . . . */
401/* . . . . . . x x . . . . . . . . */
402/* . . . . . . x x . . . . . . . . */
403
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}},
410
411/* . . . . . . . . x x . . . . . . */
412/* . . . . . . . . x x . . . . . . */
413/* . . . . . . . . X . . . . . . . */
414/* . . . . . . . x x . . . . . . . */
415/* . . . . . . . x x . . . . . . . */
416/* . . . . . . . x x . . . . . . . */
417
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}},
424
425/* . . . . . . . . . x x . . . . . */
426/* . . . . . . . . . x x . . . . . */
427/* . . . . . . . . . X . . . . . . */
428/* . . . . . . . . x x . . . . . . */
429/* . . . . . . . . x x . . . . . . */
430/* . . . . . . . . x x . . . . . . */
431
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}},
438
439/* . . . . . . . . . . x x . . . . */
440/* . . . . . . . . . . x x . . . . */
441/* . . . . . . . . . . X . . . . . */
442/* . . . . . . . . . x x . . . . . */
443/* . . . . . . . . . x x . . . . . */
444/* . . . . . . . . . x x . . . . . */
445
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}},
452
453/* . . . . . . . . . . . x x . . . */
454/* . . . . . . . . . . . x x . . . */
455/* . . . . . . . . . . . X . . . . */
456/* . . . . . . . . . . x x . . . . */
457/* . . . . . . . . . . x x . . . . */
458/* . . . . . . . . . . x x . . . . */
459
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}},
466
467/* . . . . . . . . . . . . x x . . */
468/* . . . . . . . . . . . . x x . . */
469/* . . . . . . . . . . . . X . . . */
470/* . . . . . . . . . . . x x . . . */
471/* . . . . . . . . . . . x x . . . */
472/* . . . . . . . . . . . x x . . . */
473
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}},
480
481/* . . . . . . . . . . . . . x x . */
482/* . . . . . . . . . . . . . x x . */
483/* . . . . . . . . . . . . . X . . */
484/* . . . . . . . . . . . . x x . . */
485/* . . . . . . . . . . . . x x . . */
486/* . . . . . . . . . . . . x x . . */
487
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}},
494
495/* . . . . . . . . . . . . . . x x */
496/* . . . . . . . . . . . . . . x x */
497/* . . . . . . . . . . . . . . X . */
498/* . . . . . . . . . . . . . x x . */
499/* . . . . . . . . . . . . . x x . */
500/* . . . . . . . . . . . . . x x . */
501
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}},
508
509/* . . . . . . . . . . . . . . . x */
510/* . . . . . . . . . . . . . . . x */
511/* . . . . . . . . . . . . . . . X */
512/* . . . . . . . . . . . . . . x x */
513/* . . . . . . . . . . . . . . x x */
514/* . . . . . . . . . . . . . . x x */
515
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}}},
522
523{ /* --- Stack 2 --- */
524
525/* x x . . . . . . . . . . */
526/* x x . . . . . . . . . . */
527/* X . . . . . . . . . . . */
528/* x . . . . . . . . . . . */
529/* x . . . . . . . . . . . */
530/* x . . . . . . . . . . . */
531
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}},
538
539/* . x x . . . . . . . . . */
540/* . x x . . . . . . . . . */
541/* . X . . . . . . . . . . */
542/* x x . . . . . . . . . . */
543/* x x . . . . . . . . . . */
544/* x x . . . . . . . . . . */
545
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}},
552
553/* . . x x . . . . . . . . */
554/* . . x x . . . . . . . . */
555/* . . X . . . . . . . . . */
556/* . x x . . . . . . . . . */
557/* . x x . . . . . . . . . */
558/* . x x . . . . . . . . . */
559
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}},
566
567/* . . . x x . . . . . . . */
568/* . . . x x . . . . . . . */
569/* . . . X . . . . . . . . */
570/* . . x x x . . . . . . . */
571/* . . x x x . . . . . . . */
572/* . . x x x . . . . . . . */
573
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}},
580
581/* . . . x x x . . . . . . */
582/* . . . x x x . . . . . . */
583/* . . . . X . . . . . . . */
584/* . . . x x x . . . . . . */
585/* . . . x x x . . . . . . */
586/* . . . x x x . . . . . . */
587
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}},
594
595/* . . . . x x x . . . . . */
596/* . . . . x x x . . . . . */
597/* . . . . . X . . . . . . */
598/* . . . . x x x . . . . . */
599/* . . . . x x x . . . . . */
600/* . . . . x x x . . . . . */
601
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}},
608
609/* . . . . . x x x . . . . */
610/* . . . . . x x x . . . . */
611/* . . . . . . X . . . . . */
612/* . . . . . x x x . . . . */
613/* . . . . . x x x . . . . */
614/* . . . . . x x x . . . . */
615
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}},
622
623/* . . . . . . x x x . . . */
624/* . . . . . . x x x . . . */
625/* . . . . . . . X . . . . */
626/* . . . . . . x x x . . . */
627/* . . . . . . x x x . . . */
628/* . . . . . . x x x . . . */
629
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}},
636
637/* . . . . . . . x x . . . */
638/* . . . . . . . x x . . . */
639/* . . . . . . . . X . . . */
640/* . . . . . . . x x x . . */
641/* . . . . . . . x x x . . */
642/* . . . . . . . x x x . . */
643
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}},
650
651/* . . . . . . . . x x . . */
652/* . . . . . . . . x x . . */
653/* . . . . . . . . . X . . */
654/* . . . . . . . . . x x . */
655/* . . . . . . . . . x x . */
656/* . . . . . . . . . x x . */
657
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}},
664
665/* . . . . . . . . . x x . */
666/* . . . . . . . . . x x . */
667/* . . . . . . . . . . X . */
668/* . . . . . . . . . . x x */
669/* . . . . . . . . . . x x */
670/* . . . . . . . . . . x x */
671
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}},
678
679/* . . . . . . . . . . x x */
680/* . . . . . . . . . . x x */
681/* . . . . . . . . . . . X */
682/* . . . . . . . . . . . x */
683/* . . . . . . . . . . . x */
684/* . . . . . . . . . . . x */
685
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}},
692
693/* . . . . . . . . . . . . */
694/* . . . . . . . . . . . . */
695/* . . . . . . . . . . . . */
696/* . . . . . . . . . . . . */
697/* . . . . . . . . . . . . */
698/* . . . . . . . . . . . . */
699
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}},
706
707/* . . . . . . . . . . . . */
708/* . . . . . . . . . . . . */
709/* . . . . . . . . . . . . */
710/* . . . . . . . . . . . . */
711/* . . . . . . . . . . . . */
712/* . . . . . . . . . . . . */
713
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}},
720
721/* . . . . . . . . . . . . */
722/* . . . . . . . . . . . . */
723/* . . . . . . . . . . . . */
724/* . . . . . . . . . . . . */
725/* . . . . . . . . . . . . */
726/* . . . . . . . . . . . . */
727
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}},
734
735/* . . . . . . . . . . . . */
736/* . . . . . . . . . . . . */
737/* . . . . . . . . . . . . */
738/* . . . . . . . . . . . . */
739/* . . . . . . . . . . . . */
740/* . . . . . . . . . . . . */
741
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}}},
748
749{ /* --- Stack 3 --- */
750
751/* x . . . . . . . . . . . . . . . */
752/* x . . . . . . . . . . . . . . . */
753/* X . . . . . . . . . . . . . . . */
754/* x x . . . . . . . . . . . . . . */
755/* x x . . . . . . . . . . . . . . */
756/* x x . . . . . . . . . . . . . . */
757
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}},
764
765/* x x . . . . . . . . . . . . . . */
766/* x x . . . . . . . . . . . . . . */
767/* . X . . . . . . . . . . . . . . */
768/* . x x . . . . . . . . . . . . . */
769/* . x x . . . . . . . . . . . . . */
770/* . x x . . . . . . . . . . . . . */
771
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}},
778
779/* . x x . . . . . . . . . . . . . */
780/* . x x . . . . . . . . . . . . . */
781/* . . X . . . . . . . . . . . . . */
782/* . . x x . . . . . . . . . . . . */
783/* . . x x . . . . . . . . . . . . */
784/* . . x x . . . . . . . . . . . . */
785
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}},
792
793/* . . x x . . . . . . . . . . . . */
794/* . . x x . . . . . . . . . . . . */
795/* . . . X . . . . . . . . . . . . */
796/* . . . x x . . . . . . . . . . . */
797/* . . . x x . . . . . . . . . . . */
798/* . . . x x . . . . . . . . . . . */
799
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}},
806
807/* . . . x x . . . . . . . . . . . */
808/* . . . x x . . . . . . . . . . . */
809/* . . . . X . . . . . . . . . . . */
810/* . . . . x x . . . . . . . . . . */
811/* . . . . x x . . . . . . . . . . */
812/* . . . . x x . . . . . . . . . . */
813
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}},
820
821/* . . . . x x . . . . . . . . . . */
822/* . . . . x x . . . . . . . . . . */
823/* . . . . . X . . . . . . . . . . */
824/* . . . . . x x . . . . . . . . . */
825/* . . . . . x x . . . . . . . . . */
826/* . . . . . x x . . . . . . . . . */
827
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}},
834
835/* . . . . . x x . . . . . . . . . */
836/* . . . . . x x . . . . . . . . . */
837/* . . . . . . X . . . . . . . . . */
838/* . . . . . . x x . . . . . . . . */
839/* . . . . . . x x . . . . . . . . */
840/* . . . . . . x x . . . . . . . . */
841
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}},
848
849/* . . . . . . x x . . . . . . . . */
850/* . . . . . . x x . . . . . . . . */
851/* . . . . . . . X . . . . . . . . */
852/* . . . . . . . x x . . . . . . . */
853/* . . . . . . . x x . . . . . . . */
854/* . . . . . . . x x . . . . . . . */
855
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}},
862
863/* . . . . . . . x x . . . . . . . */
864/* . . . . . . . x x . . . . . . . */
865/* . . . . . . . . X . . . . . . . */
866/* . . . . . . . . x x . . . . . . */
867/* . . . . . . . . x x . . . . . . */
868/* . . . . . . . . x x . . . . . . */
869
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}},
876
877/* . . . . . . . x x x . . . . . . */
878/* . . . . . . . . x x . . . . . . */
879/* . . . . . . . . . X . . . . . . */
880/* . . . . . . . . . x x . . . . . */
881/* . . . . . . . . . x x . . . . . */
882/* . . . . . . . . . x x . . . . . */
883
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}},
890
891/* . . . . . . . . x x x . . . . . */
892/* . . . . . . . . . x x x . . . . */
893/* . . . . . . . . . . X . . . . . */
894/* . . . . . . . . . . x x . . . . */
895/* . . . . . . . . . . x x . . . . */
896/* . . . . . . . . . . x x . . . . */
897
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}},
904
905/* . . . . . . . . . x x x . . . . */
906/* . . . . . . . . . . x x x . . . */
907/* . . . . . . . . . . . X . . . . */
908/* . . . . . . . . . . x x x . . . */
909/* . . . . . . . . . . x x x . . . */
910/* . . . . . . . . . . . x x . . . */
911
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}},
918
919/* . . . . . . . . . . x x x . . . */
920/* . . . . . . . . . . . x x x . . */
921/* . . . . . . . . . . . . X . . . */
922/* . . . . . . . . . . . x x x . . */
923/* . . . . . . . . . . . x x x . . */
924/* . . . . . . . . . . . . x x . . */
925
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}},
932
933/* . . . . . . . . . . . x x x . . */
934/* . . . . . . . . . . . . x x x . */
935/* . . . . . . . . . . . . . X . . */
936/* . . . . . . . . . . . . x x x . */
937/* . . . . . . . . . . . . x x x . */
938/* . . . . . . . . . . . . . x x . */
939
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}},
946
947/* . . . . . . . . . . . . x x x . */
948/* . . . . . . . . . . . . . x x x */
949/* . . . . . . . . . . . . . . X . */
950/* . . . . . . . . . . . . . x x x */
951/* . . . . . . . . . . . . . x x x */
952/* . . . . . . . . . . . . . . x x */
953
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}},
960
961/* . . . . . . . . . . . . . x x x */
962/* . . . . . . . . . . . . . . x x */
963/* . . . . . . . . . . . . . . . X */
964/* . . . . . . . . . . . . . . x x */
965/* . . . . . . . . . . . . . . x x */
966/* . . . . . . . . . . . . . . . x */
967
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}}},
974
975{ /* --- Stack 4 --- */
976
977/* x . . . . . . . . . . . . . . . */
978/* x x . . . . . . . . . . . . . . */
979/* X . . . . . . . . . . . . . . . */
980/* x x . . . . . . . . . . . . . . */
981/* x x . . . . . . . . . . . . . . */
982/* x x . . . . . . . . . . . . . . */
983
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}},
990
991/* x x . . . . . . . . . . . . . . */
992/* x x x . . . . . . . . . . . . . */
993/* . X . . . . . . . . . . . . . . */
994/* x x x . . . . . . . . . . . . . */
995/* x x x . . . . . . . . . . . . . */
996/* . x x . . . . . . . . . . . . . */
997
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}},
1004
1005/* x x x . . . . . . . . . . . . . */
1006/* . x x x . . . . . . . . . . . . */
1007/* . . X . . . . . . . . . . . . . */
1008/* . x x x . . . . . . . . . . . . */
1009/* . x x x . . . . . . . . . . . . */
1010/* . . x x . . . . . . . . . . . . */
1011
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}},
1018
1019/* . x x x . . . . . . . . . . . . */
1020/* . . x x x . . . . . . . . . . . */
1021/* . . . X . . . . . . . . . . . . */
1022/* . . x x x . . . . . . . . . . . */
1023/* . . x x x . . . . . . . . . . . */
1024/* . . . x x . . . . . . . . . . . */
1025
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}},
1032
1033/* . . x x x . . . . . . . . . . . */
1034/* . . . x x x . . . . . . . . . . */
1035/* . . . . X . . . . . . . . . . . */
1036/* . . . x x x . . . . . . . . . . */
1037/* . . . x x x . . . . . . . . . . */
1038/* . . . . x x . . . . . . . . . . */
1039
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}},
1046
1047/* . . . x x x . . . . . . . . . . */
1048/* . . . . x x x . . . . . . . . . */
1049/* . . . . . X . . . . . . . . . . */
1050/* . . . . x x x . . . . . . . . . */
1051/* . . . . x x x . . . . . . . . . */
1052/* . . . . . x x . . . . . . . . . */
1053
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}},
1060
1061/* . . . . x x x . . . . . . . . . */
1062/* . . . . . x x x . . . . . . . . */
1063/* . . . . . . X . . . . . . . . . */
1064/* . . . . . x x x . . . . . . . . */
1065/* . . . . . x x x . . . . . . . . */
1066/* . . . . . . x x . . . . . . . . */
1067
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}},
1074
1075/* . . . . . x x x . . . . . . . . */
1076/* . . . . . . x x x . . . . . . . */
1077/* . . . . . . . X . . . . . . . . */
1078/* . . . . . . x x x . . . . . . . */
1079/* . . . . . . x x x . . . . . . . */
1080/* . . . . . . . x x . . . . . . . */
1081
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}},
1088
1089/* . . . . . . x x . . . . . . . . */
1090/* . . . . . . . x x x . . . . . . */
1091/* . . . . . . . . X . . . . . . . */
1092/* . . . . . . . x x . . . . . . . */
1093/* . . . . . . . x x . . . . . . . */
1094/* . . . . . . . . x x . . . . . . */
1095
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}},
1102
1103/* . . . . . . . x x . . . . . . . */
1104/* . . . . . . . . . x x . . . . . */
1105/* . . . . . . . . . X . . . . . . */
1106/* . . . . . . . . x x . . . . . . */
1107/* . . . . . . . . x x . . . . . . */
1108/* . . . . . . . . . x x . . . . . */
1109
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}},
1116
1117/* . . . . . . . . x x . . . . . . */
1118/* . . . . . . . . . . x x . . . . */
1119/* . . . . . . . . . . X . . . . . */
1120/* . . . . . . . . . x x . . . . . */
1121/* . . . . . . . . . x x . . . . . */
1122/* . . . . . . . . . . x x . . . . */
1123
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}},
1130
1131/* . . . . . . . . . x x . . . . . */
1132/* . . . . . . . . . . . x x . . . */
1133/* . . . . . . . . . . . X . . . . */
1134/* . . . . . . . . . . x x . . . . */
1135/* . . . . . . . . . . x x . . . . */
1136/* . . . . . . . . . . . x x . . . */
1137
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}},
1144
1145/* . . . . . . . . . . x x . . . . */
1146/* . . . . . . . . . . . . x x . . */
1147/* . . . . . . . . . . . . X . . . */
1148/* . . . . . . . . . . . x x . . . */
1149/* . . . . . . . . . . . x x . . . */
1150/* . . . . . . . . . . . . x x . . */
1151
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}},
1158
1159/* . . . . . . . . . . . x x . . . */
1160/* . . . . . . . . . . . . . x x . */
1161/* . . . . . . . . . . . . . X . . */
1162/* . . . . . . . . . . . . x x . . */
1163/* . . . . . . . . . . . . x x . . */
1164/* . . . . . . . . . . . . . x x . */
1165
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}},
1172
1173/* . . . . . . . . . . . . x x . . */
1174/* . . . . . . . . . . . . . . x x */
1175/* . . . . . . . . . . . . . . X . */
1176/* . . . . . . . . . . . . . x x . */
1177/* . . . . . . . . . . . . . x x . */
1178/* . . . . . . . . . . . . . . x x */
1179
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}},
1186
1187/* . . . . . . . . . . . . . x x . */
1188/* . . . . . . . . . . . . . . . x */
1189/* . . . . . . . . . . . . . . . X */
1190/* . . . . . . . . . . . . . . x x */
1191/* . . . . . . . . . . . . . . x x */
1192/* . . . . . . . . . . . . . . . x */
1193
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}}}
1200
1201};
ec5db61b 1202const Float_t AliTRDgtuParam::fgkRadius[6] = { 300.65, 313.25, 325.85, 338.45, 351.05, 363.65 };
1203const Float_t AliTRDgtuParam::fgkThickness = 3.;
1204const 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}
1211};
1212const Float_t AliTRDgtuParam::fgkInnerPadLength[] = {7.5, 7.5, 8.0, 8.5, 9.0, 9.0};
1213const Float_t AliTRDgtuParam::fgkOuterPadLength[] = {7.5, 7.5, 7.5, 7.5, 7.5, 8.5};
1214const 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}
1247};
1248const 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
1253};
52c19022 1254
1255AliTRDgtuParam::AliTRDgtuParam() :
1256 fVertexSize(20.0),
1257 fCurrTrackletMask(0),
b491d23b 1258 fMagField(0.5),
52c19022 1259 fGeo(0x0)
1260{
1261 // default ctor
1262 fGeo = new AliTRDgeometry();
637666cd 1263 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
1264 fAki[iLayer] = 0.;
1265 fBki[iLayer] = 0.;
1266 fCki[iLayer] = 0.;
1267 }
1268
5f006bd7 1269 GenerateZChannelMap();
52c19022 1270}
1271
5f006bd7 1272AliTRDgtuParam::~AliTRDgtuParam()
52c19022 1273{
1274 // dtor
1275
1276 delete fGeo;
52c19022 1277}
1278
5f006bd7 1279AliTRDgtuParam* AliTRDgtuParam::Instance()
52c19022 1280{
1281 // get (or create) the single instance
1282
b3b30cf6 1283 static AliTRDgtuParam instance;
1284 return &instance;
52c19022 1285}
1286
5f006bd7 1287Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
52c19022 1288{
1289 return (fZSubChannel[stack][zchannel][layer][zpos] != 0);
1290}
1291
1292Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1293{
1294 return fZSubChannel[stack][zchannel][layer][zpos];
1295}
1296
d2c8b010 1297Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx)
52c19022 1298{
36dc3337 1299 // returns the reference layer indexed by refLayerIdx
1300
52c19022 1301 if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers)
d2c8b010 1302 return fgRefLayers[refLayerIdx];
5f006bd7 1303 else
52c19022 1304 return -1;
1305}
1306
5f006bd7 1307Int_t AliTRDgtuParam::GenerateZChannelMap()
52c19022 1308{
1309 // generate the z-channel map
5f006bd7 1310 // assuming that the tracks come from the vertex
52c19022 1311 // +/- fVertexSize in z-direction
1312
44eafcf2 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;
1321 }
1322 }
1323 }
1324 }
1325 }
52c19022 1326
44eafcf2 1327 return kTRUE;
1328 }
1329 else {
1330 Int_t iSec = 0; // sector is irrelevant
1331 Bool_t collision = kFALSE;
52c19022 1332
44eafcf2 1333 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
5f006bd7 1334
44eafcf2 1335 Float_t x[6] = { 0 };
1336 Float_t z[6][16] = {{ 0 }};
1337 Float_t dZ[6][16] = {{ 0 }};
1338
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++)
52c19022 1346 fZSubChannel[iStack][i][iLayer][iRow] = 0;
44eafcf2 1347 }
52c19022 1348 }
52c19022 1349
44eafcf2 1350 for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
5f006bd7 1351
44eafcf2 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?
52c19022 1355
44eafcf2 1356 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1357 Double_t leftZ, rightZ;
5f006bd7 1358
44eafcf2 1359 if (iLayer <= fgkFixLayer) {
1360 leftZ = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1361 rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1362 }
1363 else {
1364 leftZ = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1365 rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1366 }
5f006bd7 1367
44eafcf2 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!!!");
1375 collision = kTRUE;
1376 }
1377 else
1378 fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1;
52c19022 1379 }
52c19022 1380
44eafcf2 1381 }
52c19022 1382 }
1383 }
1384 }
52c19022 1385
44eafcf2 1386 return ~collision;
1387 }
52c19022 1388}
1389
5f006bd7 1390Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const
52c19022 1391{
5f006bd7 1392 // display the z-channel map
52c19022 1393
637666cd 1394 if (zchannel >= fgkNZChannels) {
52c19022 1395 AliError("Invalid Z channel!");
1396 return kFALSE;
1397 }
1398
1399 Int_t zchmin = zchannel >= 0 ? zchannel : 0;
1400 Int_t zchmax = zchannel >= 0 ? zchannel + 1 : fgkNZChannels;
1401 Int_t i = 0;
1402 Int_t j = 0;
1403 TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping");
1404 c->cd();
1405 TGraph **graphz = new TGraph*[fgkNZChannels];
5f006bd7 1406 for (Int_t zch = zchmin; zch < zchmax; zch++)
52c19022 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());
1423 }
1424 }
1425 }
1426 graph->SetMarkerStyle(kDot);
1427 graph->Draw("AP");
637666cd 1428 gROOT->Add(graph);
52c19022 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");
637666cd 1434 gROOT->Add(graphz[zch]);
52c19022 1435 }
54d34aac 1436 delete [] graphz;
52c19022 1437 return kTRUE;
1438}
1439
5f006bd7 1440Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const
52c19022 1441{
1442 // get the constant for the calculation of alpha
1443
44eafcf2 1444 Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
36dc3337 1445 return ci;
52c19022 1446}
1447
5f006bd7 1448Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const
52c19022 1449{
1450 // get the constant for the calculation of y_proj
1451
ec5db61b 1452 Int_t ci = 0;
1453
1454 if (fgUseGTUconst) {
1455 Float_t xmid = (fgkRadius[0] + fgkRadius[5]) / 2.;
1456 ci = TMath::Nint(- (fgkRadius[layer] - xmid) * fgkBinWidthdY / (fgkBinWidthY * fgkThickness) * (1 << GetBitExcessYProj()));
1457 } else {
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()) );
1460 }
1461
36dc3337 1462 return ci;
52c19022 1463}
1464
1465Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const
1466{
ec5db61b 1467 // return yt for the calculation of y'
1468
1469 Int_t yt = 0;
1470
1471 if (fgUseGTUconst) {
1472 yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
1473 GetZrow(stack, layer, zrow) * TMath::Tan(- 2./180. * TMath::Pi()) / fgkBinWidthY ));
1474 } else {
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 );
1478 }
1479
1480 return yt;
52c19022 1481}
1482
5f006bd7 1483Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask)
52c19022 1484{
5f006bd7 1485 // calculate the coefficients for the straight line fit
36dc3337 1486 // depending on the mask of contributing tracklets
1487
52c19022 1488 fCurrTrackletMask = trackletMask;
1489
1490 TMatrix a(GetNLayers(), 3);
1491 TMatrix b(3, GetNLayers());
1492 TMatrix c(3, 3);
1493
1494 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1495 if ( (trackletMask & (1 << layer)) == 0) {
1496 a(layer, 0) = 0;
1497 a(layer, 1) = 0;
1498 a(layer, 2) = 0;
5f006bd7 1499 }
52c19022 1500 else {
1501 a(layer, 0) = 1;
1502 a(layer, 1) = fGeo->GetTime0(layer);
1503 a(layer, 2) = (layer % 2 ? 1 : -1) * fGeo->GetTime0(layer);
1504 }
1505 }
1506
1507 b.Transpose(a);
1508 c = b * a;
1509 c.InvertFast();
1510 b = c * b;
1511
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];
1516 }
1517 return kTRUE;
1518}
1519
ec5db61b 1520Int_t AliTRDgtuParam::GetAki(Int_t k, Int_t i)
52c19022 1521{
1522 // get A_ki for the calculation of the tracking parameters
ec5db61b 1523 if (fgUseGTUconst) {
1524 Int_t maskId = fgkMaskID[k];
1525 return fgkAcoeff[maskId][i];
1526 } else {
1527 if (fCurrTrackletMask != k)
1528 GenerateRecoCoefficients(k);
1529 return -(((Int_t) fAki[i]) << 9);
1530 }
52c19022 1531}
1532
5f006bd7 1533Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i)
52c19022 1534{
1535 // get B_ki for the calculation of the tracking parameters
1536
1537 if (fCurrTrackletMask != k)
1538 GenerateRecoCoefficients(k);
1539
1540 return fBki[i];
1541}
1542
5f006bd7 1543Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i)
52c19022 1544{
1545 // get B_ki for the calculation of the tracking parameters
1546
1547 if (fCurrTrackletMask != k)
1548 GenerateRecoCoefficients(k);
1549
1550 return fCki[i];
1551}
1552
1553/*
5f006bd7 1554Float_t AliTRDgtuParam::GetD(Int_t k) const
52c19022 1555{
1556 // get the determinant for the calculation of the tracking parameters
1557
1558 TMatrix t(3, 3);
1559 for (Int_t i = 0; i < GetNLayers(); i++) {
1560 if ( !((k >> i) & 0x1) )
1561 continue;
1562 Float_t xi = fGeo->GetTime0(i);
1563 t(0,0) += 1;
1564 t(1,0) += xi;
1565 t(2,0) += TMath::Power(-1, i) * xi;
1566 t(0,1) += 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);
1572 }
1573 return t.Determinant();
1574}
1575
5f006bd7 1576Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k)
52c19022 1577{
1578 // calculate the fitting parameters
1579 // will be changed!
1580
1581 TMatrix t(3,3);
1582 for (Int_t i = 0; i < GetNLayers(); i++) {
1583 if ( !((k >> i) & 0x1) )
1584 continue;
1585 Float_t xi = fGeo->GetTime0(i);
1586 t(0,0) += 1;
1587 t(1,0) += xi;
1588 t(2,0) += TMath::Power(-1, i) * xi;
1589 t(0,1) += 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);
1595 }
1596 TDecompLU lr(t);
1597 lr.Solve(rhs);
1598 return lr.Decompose();
1599}
1600*/
1601
5f006bd7 1602Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2)
52c19022 1603{
1604 // get the x-coord. of the assumed circle/straight line intersection points
1605
1606 Int_t l1 = -1;
1607 Int_t l2 = -1;
1608 Int_t nHits = 0;
1609 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1610 if ( (k >> layer) & 0x1 ) {
5f006bd7 1611 if (l1 < 0)
52c19022 1612 l1 = layer;
1613 l2 = layer;
1614 nHits++;
1615 }
1616 }
1617
637666cd 1618 if ( (l1 >= 0) && (l2 >= 0) ) {
1619 x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1);
1620 x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1);
1621 return kTRUE;
1622 }
1623 else
1624 return kFALSE;
52c19022 1625}
1626
d2c8b010 1627Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2, Float_t magField)
52c19022 1628{
b491d23b 1629 // returns 0.3 * B * 1/a (1/128 GeV/c)
1630 // a : offset, b : slope (not used)
1631
ec5db61b 1632 // protect against division by zero, covers both cases
1633 if ((a >> 2) == 0)
1634 return fgkPtInfinity;
1635
44eafcf2 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
1643 };
1644
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
1650 };
1651
1652 Int_t layerMaskId = maskIdLut[layerMask];
1653 Int_t c1 = c1Lut[layerMaskId];
1654 Int_t c1Ext = c1 << 8;
d2c8b010 1655 Int_t ptRawStage4 = c1Ext / (a >> 2);
44eafcf2 1656 Int_t ptRawComb4 = ptRawStage4;
1657 Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
1658
1659 return ((Int_t) ptExtComb4/2);
1660 }
1661 else {
1662 //----- simple calculation -----
1663 Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
1664 Float_t r = 0;
1665 if ( (a >> 1) != 0)
d2c8b010 1666 r = (0.3 * magField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
44eafcf2 1667
1668 Int_t pt = (Int_t) (2 * r);
1669 if (pt >= 0)
1670 pt += 32;
1671 else
1672 pt -= 29;
1673 pt /= 2;
1674 return pt;
1675 }
52c19022 1676}