]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/AliTRDgtuParam.cxx
output of raw clusters (pad/time coordinates) added
[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
637666cd 26#include "TROOT.h"
52c19022 27#include "TMath.h"
28#include "TMatrix.h"
29#include "TDecompLU.h"
30#include "TGraphAsymmErrors.h"
31#include "TCanvas.h"
32
33#include "AliLog.h"
34#include "AliTRDgtuParam.h"
35#include "AliTRDgeometry.h"
36#include "AliTRDpadPlane.h"
37
38ClassImp(AliTRDgtuParam)
39
40AliTRDgtuParam *AliTRDgtuParam::fgInstance = 0;
44eafcf2 41Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE;
52c19022 42
2cf67435 43// ----- matching windows -----
44 Int_t AliTRDgtuParam::fgDeltaY = 19;
45 Int_t AliTRDgtuParam::fgDeltaAlpha = 21;
46
52c19022 47// ----- Bin widths (granularity) -----
48const Float_t AliTRDgtuParam::fgkBinWidthY = 160e-4;
49const Float_t AliTRDgtuParam::fgkBinWidthdY = 140e-4;
50
51// ----- Bit widths (used for internal representation) -----
52const Int_t AliTRDgtuParam::fgkBitWidthY = 13;
5f006bd7 53const Int_t AliTRDgtuParam::fgkBitWidthdY = 7;
52c19022 54const Int_t AliTRDgtuParam::fgkBitWidthYProj = 10;
5f006bd7 55const Int_t AliTRDgtuParam::fgkBitExcessY = 4;
56const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10;
57const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2;
52c19022 58
44eafcf2 59// ----- z-channel tables -----
60const Bool_t AliTRDgtuParam::fgZChannelMap[5][16][6][16] = {
61
62{ /* --- Stack 0 --- */
63
64/* . x x . . . . . . . . . . . . . */
65/* x . . . . . . . . . . . . . . . */
66/* X . . . . . . . . . . . . . . . */
67/* x x . . . . . . . . . . . . . . */
68/* x x . . . . . . . . . . . . . . */
69/* x . . . . . . . . . . . . . . . */
70
71{{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
72 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
73 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
74 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
75 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
76 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
77
78/* . . x x . . . . . . . . . . . . */
79/* x x . . . . . . . . . . . . . . */
80/* . X . . . . . . . . . . . . . . */
81/* . x x . . . . . . . . . . . . . */
82/* . x x . . . . . . . . . . . . . */
83/* x x . . . . . . . . . . . . . . */
84
85{{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
86 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
87 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
88 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
89 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
90 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
91
92/* . . . x x . . . . . . . . . . . */
93/* . x x . . . . . . . . . . . . . */
94/* . . X . . . . . . . . . . . . . */
95/* . . x x . . . . . . . . . . . . */
96/* . . x x . . . . . . . . . . . . */
97/* . x x . . . . . . . . . . . . . */
98
99{{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
100 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
101 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
102 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
103 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
104 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
105
106/* . . . . x x . . . . . . . . . . */
107/* . . x x . . . . . . . . . . . . */
108/* . . . X . . . . . . . . . . . . */
109/* . . . x x . . . . . . . . . . . */
110/* . . . x x . . . . . . . . . . . */
111/* . . x x . . . . . . . . . . . . */
112
113{{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
114 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
115 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
116 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
117 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
118 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
119
120/* . . . . . x x . . . . . . . . . */
121/* . . . x x . . . . . . . . . . . */
122/* . . . . X . . . . . . . . . . . */
123/* . . . . x x . . . . . . . . . . */
124/* . . . . x x . . . . . . . . . . */
125/* . . . x x . . . . . . . . . . . */
126
127{{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
128 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
129 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
130 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
131 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
132 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
133
134/* . . . . . . x x . . . . . . . . */
135/* . . . . x x . . . . . . . . . . */
136/* . . . . . X . . . . . . . . . . */
137/* . . . . . x x . . . . . . . . . */
138/* . . . . . x x . . . . . . . . . */
139/* . . . . x x . . . . . . . . . . */
140
141{{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
142 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
143 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
144 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
145 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
146 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
147
148/* . . . . . . . x x . . . . . . . */
149/* . . . . . x x . . . . . . . . . */
150/* . . . . . . X . . . . . . . . . */
151/* . . . . . . x x . . . . . . . . */
152/* . . . . . . x x . . . . . . . . */
153/* . . . . . x x . . . . . . . . . */
154
155{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
156 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
157 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
158 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
159 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
160 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
161
162/* . . . . . . . . x x . . . . . . */
163/* . . . . . . x x x . . . . . . . */
164/* . . . . . . . X . . . . . . . . */
165/* . . . . . . . x x . . . . . . . */
166/* . . . . . . . x x . . . . . . . */
167/* . . . . . . x x . . . . . . . . */
168
169{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
170 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
171 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
172 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
173 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
174 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
175
176/* . . . . . . . . x x x . . . . . */
177/* . . . . . . . x x x . . . . . . */
178/* . . . . . . . . X . . . . . . . */
179/* . . . . . . . x x x . . . . . . */
180/* . . . . . . . x x x . . . . . . */
181/* . . . . . . . x x . . . . . . . */
182
183{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
184 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
185 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
186 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
187 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
188 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
189
190/* . . . . . . . . . x x x . . . . */
191/* . . . . . . . . x x x . . . . . */
192/* . . . . . . . . . X . . . . . . */
193/* . . . . . . . . x x x . . . . . */
194/* . . . . . . . . x x x . . . . . */
195/* . . . . . . . . x x . . . . . . */
196
197{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
198 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
199 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
200 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
201 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
202 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
203
204/* . . . . . . . . . . x x x . . . */
205/* . . . . . . . . . x x x . . . . */
206/* . . . . . . . . . . X . . . . . */
207/* . . . . . . . . . x x x . . . . */
208/* . . . . . . . . . x x x . . . . */
209/* . . . . . . . . . x x . . . . . */
210
211{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
212 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
213 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
214 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
215 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
216 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
217
218/* . . . . . . . . . . . x x x . . */
219/* . . . . . . . . . . x x x . . . */
220/* . . . . . . . . . . . X . . . . */
221/* . . . . . . . . . . x x x . . . */
222/* . . . . . . . . . . x x x . . . */
223/* . . . . . . . . . . x x . . . . */
224
225{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
226 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
227 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
228 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
229 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
230 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
231
232/* . . . . . . . . . . . . x x x . */
233/* . . . . . . . . . . . x x x . . */
234/* . . . . . . . . . . . . X . . . */
235/* . . . . . . . . . . . x x x . . */
236/* . . . . . . . . . . . x x x . . */
237/* . . . . . . . . . . . x x . . . */
238
239{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
240 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
241 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
242 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
243 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
244 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
245
246/* . . . . . . . . . . . . . x x x */
247/* . . . . . . . . . . . . x x x . */
248/* . . . . . . . . . . . . . X . . */
249/* . . . . . . . . . . . . x x x . */
250/* . . . . . . . . . . . . x x x . */
251/* . . . . . . . . . . . . x x . . */
252
253{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
254 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
255 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
256 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
257 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
258 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
259
260/* . . . . . . . . . . . . . . x x */
261/* . . . . . . . . . . . . . x x x */
262/* . . . . . . . . . . . . . . X . */
263/* . . . . . . . . . . . . . x x x */
264/* . . . . . . . . . . . . . x x x */
265/* . . . . . . . . . . . . . x x . */
266
267{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
268 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
269 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
270 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
271 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
272 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
273
274/* . . . . . . . . . . . . . . . x */
275/* . . . . . . . . . . . . . . x x */
276/* . . . . . . . . . . . . . . . X */
277/* . . . . . . . . . . . . . . x x */
278/* . . . . . . . . . . . . . . x x */
279/* . . . . . . . . . . . . . . x x */
280
281{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
282 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
283 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
284 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
285 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
286 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
287
288{ /* --- Stack 1 --- */
289
290/* x x x . . . . . . . . . . . . . */
291/* x x . . . . . . . . . . . . . . */
292/* X . . . . . . . . . . . . . . . */
293/* x x . . . . . . . . . . . . . . */
294/* x x . . . . . . . . . . . . . . */
295/* x . . . . . . . . . . . . . . . */
296
297{{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
298 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
299 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
300 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
301 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
302 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
303
304/* . x x x . . . . . . . . . . . . */
305/* x x x . . . . . . . . . . . . . */
306/* . X . . . . . . . . . . . . . . */
307/* x x x . . . . . . . . . . . . . */
308/* x x x . . . . . . . . . . . . . */
309/* x x . . . . . . . . . . . . . . */
310
311{{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
312 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
313 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
314 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
315 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
316 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
317
318/* . . x x x . . . . . . . . . . . */
319/* . x x x . . . . . . . . . . . . */
320/* . . X . . . . . . . . . . . . . */
321/* . x x x . . . . . . . . . . . . */
322/* . x x x . . . . . . . . . . . . */
323/* . x x . . . . . . . . . . . . . */
324
325{{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
326 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
327 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
328 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
329 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
330 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
331
332/* . . . x x x . . . . . . . . . . */
333/* . . x x x . . . . . . . . . . . */
334/* . . . X . . . . . . . . . . . . */
335/* . . x x x . . . . . . . . . . . */
336/* . . x x x . . . . . . . . . . . */
337/* . . x x . . . . . . . . . . . . */
338
339{{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
340 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
341 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
342 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
343 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
344 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
345
346/* . . . . x x x . . . . . . . . . */
347/* . . . x x x . . . . . . . . . . */
348/* . . . . X . . . . . . . . . . . */
349/* . . . x x x . . . . . . . . . . */
350/* . . . x x x . . . . . . . . . . */
351/* . . . x x . . . . . . . . . . . */
352
353{{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
354 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
355 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
356 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
357 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
358 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
359
360/* . . . . . x x x . . . . . . . . */
361/* . . . . x x x . . . . . . . . . */
362/* . . . . . X . . . . . . . . . . */
363/* . . . . x x . . . . . . . . . . */
364/* . . . . x x . . . . . . . . . . */
365/* . . . . x x . . . . . . . . . . */
366
367{{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
368 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
369 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
370 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
371 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
372 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
373
374/* . . . . . . x x x . . . . . . . */
375/* . . . . . . x x . . . . . . . . */
376/* . . . . . . X . . . . . . . . . */
377/* . . . . . x x . . . . . . . . . */
378/* . . . . . x x . . . . . . . . . */
379/* . . . . . x x . . . . . . . . . */
380
381{{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
382 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
383 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
384 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
385 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
386 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
387
388/* . . . . . . . x x . . . . . . . */
389/* . . . . . . . x x . . . . . . . */
390/* . . . . . . . X . . . . . . . . */
391/* . . . . . . x x . . . . . . . . */
392/* . . . . . . x x . . . . . . . . */
393/* . . . . . . x x . . . . . . . . */
394
395{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
396 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
397 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
398 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
399 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
400 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
401
402/* . . . . . . . . x x . . . . . . */
403/* . . . . . . . . x x . . . . . . */
404/* . . . . . . . . X . . . . . . . */
405/* . . . . . . . x x . . . . . . . */
406/* . . . . . . . x x . . . . . . . */
407/* . . . . . . . x x . . . . . . . */
408
409{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
410 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
411 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
412 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
413 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
414 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
415
416/* . . . . . . . . . x x . . . . . */
417/* . . . . . . . . . x x . . . . . */
418/* . . . . . . . . . X . . . . . . */
419/* . . . . . . . . x x . . . . . . */
420/* . . . . . . . . x x . . . . . . */
421/* . . . . . . . . x x . . . . . . */
422
423{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
424 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
425 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
426 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
427 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
428 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
429
430/* . . . . . . . . . . x x . . . . */
431/* . . . . . . . . . . x x . . . . */
432/* . . . . . . . . . . X . . . . . */
433/* . . . . . . . . . x x . . . . . */
434/* . . . . . . . . . x x . . . . . */
435/* . . . . . . . . . x x . . . . . */
436
437{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
438 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
439 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
440 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
441 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
442 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
443
444/* . . . . . . . . . . . x x . . . */
445/* . . . . . . . . . . . x x . . . */
446/* . . . . . . . . . . . X . . . . */
447/* . . . . . . . . . . x x . . . . */
448/* . . . . . . . . . . x x . . . . */
449/* . . . . . . . . . . x x . . . . */
450
451{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
452 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
453 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
454 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
455 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
456 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
457
458/* . . . . . . . . . . . . x x . . */
459/* . . . . . . . . . . . . x x . . */
460/* . . . . . . . . . . . . X . . . */
461/* . . . . . . . . . . . x x . . . */
462/* . . . . . . . . . . . x x . . . */
463/* . . . . . . . . . . . x x . . . */
464
465{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
466 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
467 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
468 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
469 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
470 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
471
472/* . . . . . . . . . . . . . x x . */
473/* . . . . . . . . . . . . . x x . */
474/* . . . . . . . . . . . . . X . . */
475/* . . . . . . . . . . . . x x . . */
476/* . . . . . . . . . . . . x x . . */
477/* . . . . . . . . . . . . x x . . */
478
479{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
480 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
481 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
482 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
483 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
484 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
485
486/* . . . . . . . . . . . . . . x x */
487/* . . . . . . . . . . . . . . x x */
488/* . . . . . . . . . . . . . . X . */
489/* . . . . . . . . . . . . . x x . */
490/* . . . . . . . . . . . . . x x . */
491/* . . . . . . . . . . . . . x x . */
492
493{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
494 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
495 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
496 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
497 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
498 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
499
500/* . . . . . . . . . . . . . . . x */
501/* . . . . . . . . . . . . . . . x */
502/* . . . . . . . . . . . . . . . X */
503/* . . . . . . . . . . . . . . x x */
504/* . . . . . . . . . . . . . . x x */
505/* . . . . . . . . . . . . . . x x */
506
507{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
508 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
509 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
510 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
511 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
512 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
513
514{ /* --- Stack 2 --- */
515
516/* x x . . . . . . . . . . */
517/* x x . . . . . . . . . . */
518/* X . . . . . . . . . . . */
519/* x . . . . . . . . . . . */
520/* x . . . . . . . . . . . */
521/* x . . . . . . . . . . . */
522
523{{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
524 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
525 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
526 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
527 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
528 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
529
530/* . x x . . . . . . . . . */
531/* . x x . . . . . . . . . */
532/* . X . . . . . . . . . . */
533/* x x . . . . . . . . . . */
534/* x x . . . . . . . . . . */
535/* x x . . . . . . . . . . */
536
537{{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
538 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
539 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
540 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
541 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
542 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
543
544/* . . x x . . . . . . . . */
545/* . . x x . . . . . . . . */
546/* . . X . . . . . . . . . */
547/* . x x . . . . . . . . . */
548/* . x x . . . . . . . . . */
549/* . x x . . . . . . . . . */
550
551{{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
552 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
553 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
554 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
555 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
556 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
557
558/* . . . x x . . . . . . . */
559/* . . . x x . . . . . . . */
560/* . . . X . . . . . . . . */
561/* . . x x x . . . . . . . */
562/* . . x x x . . . . . . . */
563/* . . x x x . . . . . . . */
564
565{{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
566 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
567 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
568 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
569 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
570 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
571
572/* . . . x x x . . . . . . */
573/* . . . x x x . . . . . . */
574/* . . . . X . . . . . . . */
575/* . . . x x x . . . . . . */
576/* . . . x x x . . . . . . */
577/* . . . x x x . . . . . . */
578
579{{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
580 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
581 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
582 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
583 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
584 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
585
586/* . . . . x x x . . . . . */
587/* . . . . x x x . . . . . */
588/* . . . . . X . . . . . . */
589/* . . . . x x x . . . . . */
590/* . . . . x x x . . . . . */
591/* . . . . x x x . . . . . */
592
593{{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
594 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
595 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
596 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
597 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
598 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
599
600/* . . . . . x x x . . . . */
601/* . . . . . x x x . . . . */
602/* . . . . . . X . . . . . */
603/* . . . . . x x x . . . . */
604/* . . . . . x x x . . . . */
605/* . . . . . x x x . . . . */
606
607{{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
608 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
609 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
610 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
611 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
612 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
613
614/* . . . . . . x x x . . . */
615/* . . . . . . x x x . . . */
616/* . . . . . . . X . . . . */
617/* . . . . . . x x x . . . */
618/* . . . . . . x x x . . . */
619/* . . . . . . x x x . . . */
620
621{{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
622 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
623 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
624 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
625 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
626 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
627
628/* . . . . . . . x x . . . */
629/* . . . . . . . x x . . . */
630/* . . . . . . . . X . . . */
631/* . . . . . . . x x x . . */
632/* . . . . . . . x x x . . */
633/* . . . . . . . x x x . . */
634
635{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
636 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
637 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
638 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
639 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
640 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}},
641
642/* . . . . . . . . x x . . */
643/* . . . . . . . . x x . . */
644/* . . . . . . . . . X . . */
645/* . . . . . . . . . x x . */
646/* . . . . . . . . . x x . */
647/* . . . . . . . . . x x . */
648
649{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
650 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
651 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
652 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
653 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
654 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
655
656/* . . . . . . . . . x x . */
657/* . . . . . . . . . x x . */
658/* . . . . . . . . . . X . */
659/* . . . . . . . . . . x x */
660/* . . . . . . . . . . x x */
661/* . . . . . . . . . . x x */
662
663{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
664 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
665 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
666 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
667 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
668 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
669
670/* . . . . . . . . . . x x */
671/* . . . . . . . . . . x x */
672/* . . . . . . . . . . . X */
673/* . . . . . . . . . . . x */
674/* . . . . . . . . . . . x */
675/* . . . . . . . . . . . x */
676
677{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
678 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
679 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
680 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
681 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
682 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
683
684/* . . . . . . . . . . . . */
685/* . . . . . . . . . . . . */
686/* . . . . . . . . . . . . */
687/* . . . . . . . . . . . . */
688/* . . . . . . . . . . . . */
689/* . . . . . . . . . . . . */
690
691{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
692 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
693 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
694 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
695 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
696 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
697
698/* . . . . . . . . . . . . */
699/* . . . . . . . . . . . . */
700/* . . . . . . . . . . . . */
701/* . . . . . . . . . . . . */
702/* . . . . . . . . . . . . */
703/* . . . . . . . . . . . . */
704
705{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
706 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
707 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
708 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
709 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
710 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
711
712/* . . . . . . . . . . . . */
713/* . . . . . . . . . . . . */
714/* . . . . . . . . . . . . */
715/* . . . . . . . . . . . . */
716/* . . . . . . . . . . . . */
717/* . . . . . . . . . . . . */
718
719{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
720 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
721 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
722 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
723 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
724 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
725
726/* . . . . . . . . . . . . */
727/* . . . . . . . . . . . . */
728/* . . . . . . . . . . . . */
729/* . . . . . . . . . . . . */
730/* . . . . . . . . . . . . */
731/* . . . . . . . . . . . . */
732
733{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
734 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
735 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
736 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
737 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
738 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}},
739
740{ /* --- Stack 3 --- */
741
742/* x . . . . . . . . . . . . . . . */
743/* x . . . . . . . . . . . . . . . */
744/* X . . . . . . . . . . . . . . . */
745/* x x . . . . . . . . . . . . . . */
746/* x x . . . . . . . . . . . . . . */
747/* x x . . . . . . . . . . . . . . */
748
749{{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
750 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
751 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
752 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
753 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
754 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
755
756/* x x . . . . . . . . . . . . . . */
757/* x x . . . . . . . . . . . . . . */
758/* . X . . . . . . . . . . . . . . */
759/* . x x . . . . . . . . . . . . . */
760/* . x x . . . . . . . . . . . . . */
761/* . x x . . . . . . . . . . . . . */
762
763{{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
764 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
765 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
766 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
767 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
768 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
769
770/* . x x . . . . . . . . . . . . . */
771/* . x x . . . . . . . . . . . . . */
772/* . . X . . . . . . . . . . . . . */
773/* . . x x . . . . . . . . . . . . */
774/* . . x x . . . . . . . . . . . . */
775/* . . x x . . . . . . . . . . . . */
776
777{{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
778 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
779 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
780 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
781 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
782 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
783
784/* . . x x . . . . . . . . . . . . */
785/* . . x x . . . . . . . . . . . . */
786/* . . . X . . . . . . . . . . . . */
787/* . . . x x . . . . . . . . . . . */
788/* . . . x x . . . . . . . . . . . */
789/* . . . x x . . . . . . . . . . . */
790
791{{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
792 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
793 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
794 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
795 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
796 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
797
798/* . . . x x . . . . . . . . . . . */
799/* . . . x x . . . . . . . . . . . */
800/* . . . . X . . . . . . . . . . . */
801/* . . . . x x . . . . . . . . . . */
802/* . . . . x x . . . . . . . . . . */
803/* . . . . x x . . . . . . . . . . */
804
805{{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
806 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
807 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
808 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
809 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
810 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
811
812/* . . . . x x . . . . . . . . . . */
813/* . . . . x x . . . . . . . . . . */
814/* . . . . . X . . . . . . . . . . */
815/* . . . . . x x . . . . . . . . . */
816/* . . . . . x x . . . . . . . . . */
817/* . . . . . x x . . . . . . . . . */
818
819{{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
820 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
821 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
822 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
823 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
824 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
825
826/* . . . . . x x . . . . . . . . . */
827/* . . . . . x x . . . . . . . . . */
828/* . . . . . . X . . . . . . . . . */
829/* . . . . . . x x . . . . . . . . */
830/* . . . . . . x x . . . . . . . . */
831/* . . . . . . x x . . . . . . . . */
832
833{{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
834 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
835 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
836 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
837 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
838 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
839
840/* . . . . . . x x . . . . . . . . */
841/* . . . . . . x x . . . . . . . . */
842/* . . . . . . . X . . . . . . . . */
843/* . . . . . . . x x . . . . . . . */
844/* . . . . . . . x x . . . . . . . */
845/* . . . . . . . x x . . . . . . . */
846
847{{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
848 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
849 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
850 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
851 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
852 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
853
854/* . . . . . . . x x . . . . . . . */
855/* . . . . . . . x x . . . . . . . */
856/* . . . . . . . . X . . . . . . . */
857/* . . . . . . . . x x . . . . . . */
858/* . . . . . . . . x x . . . . . . */
859/* . . . . . . . . x x . . . . . . */
860
861{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
862 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
863 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
864 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
865 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
866 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
867
868/* . . . . . . . x x x . . . . . . */
869/* . . . . . . . . x x . . . . . . */
870/* . . . . . . . . . X . . . . . . */
871/* . . . . . . . . . x x . . . . . */
872/* . . . . . . . . . x x . . . . . */
873/* . . . . . . . . . x x . . . . . */
874
875{{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
876 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
877 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
878 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
879 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
880 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
881
882/* . . . . . . . . x x x . . . . . */
883/* . . . . . . . . . x x x . . . . */
884/* . . . . . . . . . . X . . . . . */
885/* . . . . . . . . . . x x . . . . */
886/* . . . . . . . . . . x x . . . . */
887/* . . . . . . . . . . x x . . . . */
888
889{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
890 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
891 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
892 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
893 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
894 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
895
896/* . . . . . . . . . x x x . . . . */
897/* . . . . . . . . . . x x x . . . */
898/* . . . . . . . . . . . X . . . . */
899/* . . . . . . . . . . x x x . . . */
900/* . . . . . . . . . . x x x . . . */
901/* . . . . . . . . . . . x x . . . */
902
903{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
904 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
905 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
906 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
907 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
908 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
909
910/* . . . . . . . . . . x x x . . . */
911/* . . . . . . . . . . . x x x . . */
912/* . . . . . . . . . . . . X . . . */
913/* . . . . . . . . . . . x x x . . */
914/* . . . . . . . . . . . x x x . . */
915/* . . . . . . . . . . . . x x . . */
916
917{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
918 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
919 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
920 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
921 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
922 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
923
924/* . . . . . . . . . . . x x x . . */
925/* . . . . . . . . . . . . x x x . */
926/* . . . . . . . . . . . . . X . . */
927/* . . . . . . . . . . . . x x x . */
928/* . . . . . . . . . . . . x x x . */
929/* . . . . . . . . . . . . . x x . */
930
931{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
932 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
933 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
934 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
935 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
936 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
937
938/* . . . . . . . . . . . . x x x . */
939/* . . . . . . . . . . . . . x x x */
940/* . . . . . . . . . . . . . . X . */
941/* . . . . . . . . . . . . . x x x */
942/* . . . . . . . . . . . . . x x x */
943/* . . . . . . . . . . . . . . x x */
944
945{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
946 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
947 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
948 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
949 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
950 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
951
952/* . . . . . . . . . . . . . x x x */
953/* . . . . . . . . . . . . . . x x */
954/* . . . . . . . . . . . . . . . X */
955/* . . . . . . . . . . . . . . x x */
956/* . . . . . . . . . . . . . . x x */
957/* . . . . . . . . . . . . . . . x */
958
959{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
960 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
961 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
962 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
963 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
964 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}},
965
966{ /* --- Stack 4 --- */
967
968/* x . . . . . . . . . . . . . . . */
969/* x x . . . . . . . . . . . . . . */
970/* X . . . . . . . . . . . . . . . */
971/* x x . . . . . . . . . . . . . . */
972/* x x . . . . . . . . . . . . . . */
973/* x x . . . . . . . . . . . . . . */
974
975{{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
976 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
977 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
978 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
979 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
980 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
981
982/* x x . . . . . . . . . . . . . . */
983/* x x x . . . . . . . . . . . . . */
984/* . X . . . . . . . . . . . . . . */
985/* x x x . . . . . . . . . . . . . */
986/* x x x . . . . . . . . . . . . . */
987/* . x x . . . . . . . . . . . . . */
988
989{{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
990 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
991 {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
992 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
993 {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
994 {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
995
996/* x x x . . . . . . . . . . . . . */
997/* . x x x . . . . . . . . . . . . */
998/* . . X . . . . . . . . . . . . . */
999/* . x x x . . . . . . . . . . . . */
1000/* . x x x . . . . . . . . . . . . */
1001/* . . x x . . . . . . . . . . . . */
1002
1003{{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1004 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1005 {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1006 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1007 {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1008 {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1009
1010/* . x x x . . . . . . . . . . . . */
1011/* . . x x x . . . . . . . . . . . */
1012/* . . . X . . . . . . . . . . . . */
1013/* . . x x x . . . . . . . . . . . */
1014/* . . x x x . . . . . . . . . . . */
1015/* . . . x x . . . . . . . . . . . */
1016
1017{{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1018 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1019 {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1020 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1021 {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1022 {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1023
1024/* . . x x x . . . . . . . . . . . */
1025/* . . . x x x . . . . . . . . . . */
1026/* . . . . X . . . . . . . . . . . */
1027/* . . . x x x . . . . . . . . . . */
1028/* . . . x x x . . . . . . . . . . */
1029/* . . . . x x . . . . . . . . . . */
1030
1031{{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1032 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1033 {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1034 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1035 {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1036 {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1037
1038/* . . . x x x . . . . . . . . . . */
1039/* . . . . x x x . . . . . . . . . */
1040/* . . . . . X . . . . . . . . . . */
1041/* . . . . x x x . . . . . . . . . */
1042/* . . . . x x x . . . . . . . . . */
1043/* . . . . . x x . . . . . . . . . */
1044
1045{{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1046 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1047 {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1048 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1049 {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1050 {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
1051
1052/* . . . . x x x . . . . . . . . . */
1053/* . . . . . x x x . . . . . . . . */
1054/* . . . . . . X . . . . . . . . . */
1055/* . . . . . x x x . . . . . . . . */
1056/* . . . . . x x x . . . . . . . . */
1057/* . . . . . . x x . . . . . . . . */
1058
1059{{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1060 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1061 {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1062 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1063 {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1064 {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
1065
1066/* . . . . . x x x . . . . . . . . */
1067/* . . . . . . x x x . . . . . . . */
1068/* . . . . . . . X . . . . . . . . */
1069/* . . . . . . x x x . . . . . . . */
1070/* . . . . . . x x x . . . . . . . */
1071/* . . . . . . . x x . . . . . . . */
1072
1073{{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1074 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1075 {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1076 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1077 {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1078 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
1079
1080/* . . . . . . x x . . . . . . . . */
1081/* . . . . . . . x x x . . . . . . */
1082/* . . . . . . . . X . . . . . . . */
1083/* . . . . . . . x x . . . . . . . */
1084/* . . . . . . . x x . . . . . . . */
1085/* . . . . . . . . x x . . . . . . */
1086
1087{{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
1088 {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
1089 {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
1090 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1091 {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1092 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
1093
1094/* . . . . . . . x x . . . . . . . */
1095/* . . . . . . . . . x x . . . . . */
1096/* . . . . . . . . . X . . . . . . */
1097/* . . . . . . . . x x . . . . . . */
1098/* . . . . . . . . x x . . . . . . */
1099/* . . . . . . . . . x x . . . . . */
1100
1101{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
1102 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1103 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
1104 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1105 {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1106 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
1107
1108/* . . . . . . . . x x . . . . . . */
1109/* . . . . . . . . . . x x . . . . */
1110/* . . . . . . . . . . X . . . . . */
1111/* . . . . . . . . . x x . . . . . */
1112/* . . . . . . . . . x x . . . . . */
1113/* . . . . . . . . . . x x . . . . */
1114
1115{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
1116 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1117 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
1118 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1119 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1120 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
1121
1122/* . . . . . . . . . x x . . . . . */
1123/* . . . . . . . . . . . x x . . . */
1124/* . . . . . . . . . . . X . . . . */
1125/* . . . . . . . . . . x x . . . . */
1126/* . . . . . . . . . . x x . . . . */
1127/* . . . . . . . . . . . x x . . . */
1128
1129{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
1130 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1131 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
1132 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1133 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1134 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
1135
1136/* . . . . . . . . . . x x . . . . */
1137/* . . . . . . . . . . . . x x . . */
1138/* . . . . . . . . . . . . X . . . */
1139/* . . . . . . . . . . . x x . . . */
1140/* . . . . . . . . . . . x x . . . */
1141/* . . . . . . . . . . . . x x . . */
1142
1143{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
1144 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1145 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
1146 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1147 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1148 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
1149
1150/* . . . . . . . . . . . x x . . . */
1151/* . . . . . . . . . . . . . x x . */
1152/* . . . . . . . . . . . . . X . . */
1153/* . . . . . . . . . . . . x x . . */
1154/* . . . . . . . . . . . . x x . . */
1155/* . . . . . . . . . . . . . x x . */
1156
1157{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
1158 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1159 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
1160 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1161 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1162 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
1163
1164/* . . . . . . . . . . . . x x . . */
1165/* . . . . . . . . . . . . . . x x */
1166/* . . . . . . . . . . . . . . X . */
1167/* . . . . . . . . . . . . . x x . */
1168/* . . . . . . . . . . . . . x x . */
1169/* . . . . . . . . . . . . . . x x */
1170
1171{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
1172 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1173 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
1174 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1175 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1176 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
1177
1178/* . . . . . . . . . . . . . x x . */
1179/* . . . . . . . . . . . . . . . x */
1180/* . . . . . . . . . . . . . . . X */
1181/* . . . . . . . . . . . . . . x x */
1182/* . . . . . . . . . . . . . . x x */
1183/* . . . . . . . . . . . . . . . x */
1184
1185{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
1186 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1187 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
1188 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1189 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
1190 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}}
1191
1192};
52c19022 1193
1194AliTRDgtuParam::AliTRDgtuParam() :
1195 fVertexSize(20.0),
1196 fCurrTrackletMask(0),
1197 fRefLayers(0x0),
b491d23b 1198 fMagField(0.5),
52c19022 1199 fGeo(0x0)
1200{
1201 // default ctor
1202 fGeo = new AliTRDgeometry();
1203 fRefLayers = new Int_t[fgkNRefLayers];
1204 fRefLayers[0] = 3;
1205 fRefLayers[1] = 2;
1206 fRefLayers[2] = 1;
637666cd 1207 for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
1208 fAki[iLayer] = 0.;
1209 fBki[iLayer] = 0.;
1210 fCki[iLayer] = 0.;
1211 }
1212
5f006bd7 1213 GenerateZChannelMap();
52c19022 1214}
1215
5f006bd7 1216AliTRDgtuParam::~AliTRDgtuParam()
52c19022 1217{
1218 // dtor
1219
1220 delete fGeo;
1221 delete [] fRefLayers;
1222}
1223
5f006bd7 1224AliTRDgtuParam* AliTRDgtuParam::Instance()
52c19022 1225{
1226 // get (or create) the single instance
1227
5f006bd7 1228 if (fgInstance == 0)
52c19022 1229 fgInstance = new AliTRDgtuParam();
1230
1231 return fgInstance;
1232}
1233
5f006bd7 1234void AliTRDgtuParam::Terminate()
52c19022 1235{
1236 // destruct the instance
1237
1238 if (fgInstance != 0) {
1239 delete fgInstance;
1240 fgInstance = 0x0;
1241 }
1242}
1243
5f006bd7 1244Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
52c19022 1245{
1246 return (fZSubChannel[stack][zchannel][layer][zpos] != 0);
1247}
1248
1249Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
1250{
1251 return fZSubChannel[stack][zchannel][layer][zpos];
1252}
1253
5f006bd7 1254Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx) const
52c19022 1255{
36dc3337 1256 // returns the reference layer indexed by refLayerIdx
1257
52c19022 1258 if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers)
1259 return fRefLayers[refLayerIdx];
5f006bd7 1260 else
52c19022 1261 return -1;
1262}
1263
5f006bd7 1264Int_t AliTRDgtuParam::GenerateZChannelMap()
52c19022 1265{
1266 // generate the z-channel map
5f006bd7 1267 // assuming that the tracks come from the vertex
52c19022 1268 // +/- fVertexSize in z-direction
1269
44eafcf2 1270 if (fgUseGTUconst) {
1271 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1272 for (Int_t iChannel = 0; iChannel < fGeo->GetRowMax(fgkFixLayer, iStack, 0); iChannel++) {
1273 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1274 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1275 if (fgZChannelMap[iStack][iChannel][iLayer][iRow] != 0) {
1276 fZChannelMap[iStack][iChannel][iLayer][iRow] = 1;
1277 fZSubChannel[iStack][iChannel % fgkNZChannels][iLayer][iRow] = iChannel / fgkNZChannels + 1;
1278 }
1279 }
1280 }
1281 }
1282 }
52c19022 1283
44eafcf2 1284 return kTRUE;
1285 }
1286 else {
1287 Int_t iSec = 0; // sector is irrelevant
1288 Bool_t collision = kFALSE;
52c19022 1289
44eafcf2 1290 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
5f006bd7 1291
44eafcf2 1292 Float_t x[6] = { 0 };
1293 Float_t z[6][16] = {{ 0 }};
1294 Float_t dZ[6][16] = {{ 0 }};
1295
1296 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1297 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1298 x[iLayer] = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ???
1299 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1300 z[iLayer][iRow] = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad
1301 dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction
1302 for (Int_t i = 0; i < fgkNZChannels; i++)
52c19022 1303 fZSubChannel[iStack][i][iLayer][iRow] = 0;
44eafcf2 1304 }
52c19022 1305 }
52c19022 1306
44eafcf2 1307 for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
5f006bd7 1308
44eafcf2 1309 Double_t fixZmin = z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow];
1310 Double_t fixZmax = z[fgkFixLayer][fixRow];
1311 Double_t fixX = x[fgkFixLayer] + 1.5; // ??? 1.5 from where?
52c19022 1312
44eafcf2 1313 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1314 Double_t leftZ, rightZ;
5f006bd7 1315
44eafcf2 1316 if (iLayer <= fgkFixLayer) {
1317 leftZ = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1318 rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1319 }
1320 else {
1321 leftZ = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
1322 rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
1323 }
5f006bd7 1324
44eafcf2 1325 Double_t epsilon = 0.001;
1326 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
1327 if ( (z[iLayer][iRow] ) > (leftZ + epsilon) &&
1328 (z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) {
1329 fZChannelMap[iStack][fixRow][iLayer][iRow] = 1;
1330 if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) {
1331 AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!");
1332 collision = kTRUE;
1333 }
1334 else
1335 fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1;
52c19022 1336 }
52c19022 1337
44eafcf2 1338 }
52c19022 1339 }
1340 }
1341 }
52c19022 1342
44eafcf2 1343 return ~collision;
1344 }
52c19022 1345}
1346
5f006bd7 1347Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const
52c19022 1348{
5f006bd7 1349 // display the z-channel map
52c19022 1350
637666cd 1351 if (zchannel >= fgkNZChannels) {
52c19022 1352 AliError("Invalid Z channel!");
1353 return kFALSE;
1354 }
1355
1356 Int_t zchmin = zchannel >= 0 ? zchannel : 0;
1357 Int_t zchmax = zchannel >= 0 ? zchannel + 1 : fgkNZChannels;
1358 Int_t i = 0;
1359 Int_t j = 0;
1360 TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping");
1361 c->cd();
1362 TGraph **graphz = new TGraph*[fgkNZChannels];
5f006bd7 1363 for (Int_t zch = zchmin; zch < zchmax; zch++)
52c19022 1364 graphz[zch] = new TGraph;
1365 TGraphAsymmErrors *graph = new TGraphAsymmErrors();
1366 graph->SetTitle("Z-Channel Map");
1367 graph->SetPoint(i, 0, 0); // vertex
1368 graph->SetPointError(i++, 20, 20, 0, 0);
1369 // graph->SetRange //????
1370 for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
1371 for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
1372 AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
1373 for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
1374 graph->SetPoint(i, pp->GetRowPos(iRow), fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1375 graph->SetPointError(i++, pp->GetRowSize(iRow), 0, 0, 0);
1376 for (Int_t zch = zchmin; zch < zchmax; zch++)
1377 if (fZSubChannel[iStack][zch][iLayer][iRow] != 0)
1378 if (subchannel == 0 || fZSubChannel[iStack][zch][iLayer][iRow] == subchannel)
1379 graphz[zch]->SetPoint(j++, pp->GetRowPos(iRow) - pp->GetRowSize(iRow)/2, fGeo->GetTime0(iLayer) - fGeo->CdrHght());
1380 }
1381 }
1382 }
1383 graph->SetMarkerStyle(kDot);
1384 graph->Draw("AP");
637666cd 1385 gROOT->Add(graph);
52c19022 1386 for (Int_t zch = zchmin; zch < zchmax; zch++) {
1387 graphz[zch]->SetMarkerStyle(kCircle);
1388 graphz[zch]->SetMarkerColor(zch+2);
1389 graphz[zch]->SetMarkerSize(0.3 + zch*0.2);
1390 graphz[zch]->Draw("P");
637666cd 1391 gROOT->Add(graphz[zch]);
52c19022 1392 }
54d34aac 1393 delete [] graphz;
52c19022 1394 return kTRUE;
1395}
1396
5f006bd7 1397Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const
52c19022 1398{
1399 // get the constant for the calculation of alpha
1400
44eafcf2 1401 Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
36dc3337 1402 return ci;
52c19022 1403}
1404
5f006bd7 1405Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const
52c19022 1406{
1407 // get the constant for the calculation of y_proj
1408
5f006bd7 1409 Float_t xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.;
44eafcf2 1410 Int_t ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) );
36dc3337 1411 return ci;
52c19022 1412}
1413
1414Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const
1415{
5f006bd7 1416 return (Int_t) (- ( (layer % 2 ? 1 : -1) *
1417 (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2) *
52c19022 1418 TMath::Tan(- 2.0 / 180.0 * TMath::Pi()) ) / 0.016 );
1419}
1420
5f006bd7 1421Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask)
52c19022 1422{
5f006bd7 1423 // calculate the coefficients for the straight line fit
36dc3337 1424 // depending on the mask of contributing tracklets
1425
52c19022 1426 fCurrTrackletMask = trackletMask;
1427
1428 TMatrix a(GetNLayers(), 3);
1429 TMatrix b(3, GetNLayers());
1430 TMatrix c(3, 3);
1431
1432 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1433 if ( (trackletMask & (1 << layer)) == 0) {
1434 a(layer, 0) = 0;
1435 a(layer, 1) = 0;
1436 a(layer, 2) = 0;
5f006bd7 1437 }
52c19022 1438 else {
1439 a(layer, 0) = 1;
1440 a(layer, 1) = fGeo->GetTime0(layer);
1441 a(layer, 2) = (layer % 2 ? 1 : -1) * fGeo->GetTime0(layer);
1442 }
1443 }
1444
1445 b.Transpose(a);
1446 c = b * a;
1447 c.InvertFast();
1448 b = c * b;
1449
1450 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1451 fAki[layer] = b.GetMatrixArray()[layer];
1452 fBki[layer] = b.GetMatrixArray()[GetNLayers() + layer];
1453 fCki[layer] = b.GetMatrixArray()[2 * GetNLayers() + layer];
1454 }
1455 return kTRUE;
1456}
1457
5f006bd7 1458Float_t AliTRDgtuParam::GetAki(Int_t k, Int_t i)
52c19022 1459{
1460 // get A_ki for the calculation of the tracking parameters
1461 if (fCurrTrackletMask != k)
1462 GenerateRecoCoefficients(k);
1463
1464 return fAki[i];
1465}
1466
5f006bd7 1467Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i)
52c19022 1468{
1469 // get B_ki for the calculation of the tracking parameters
1470
1471 if (fCurrTrackletMask != k)
1472 GenerateRecoCoefficients(k);
1473
1474 return fBki[i];
1475}
1476
5f006bd7 1477Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i)
52c19022 1478{
1479 // get B_ki for the calculation of the tracking parameters
1480
1481 if (fCurrTrackletMask != k)
1482 GenerateRecoCoefficients(k);
1483
1484 return fCki[i];
1485}
1486
1487/*
5f006bd7 1488Float_t AliTRDgtuParam::GetD(Int_t k) const
52c19022 1489{
1490 // get the determinant for the calculation of the tracking parameters
1491
1492 TMatrix t(3, 3);
1493 for (Int_t i = 0; i < GetNLayers(); i++) {
1494 if ( !((k >> i) & 0x1) )
1495 continue;
1496 Float_t xi = fGeo->GetTime0(i);
1497 t(0,0) += 1;
1498 t(1,0) += xi;
1499 t(2,0) += TMath::Power(-1, i) * xi;
1500 t(0,1) += xi;
1501 t(1,1) += TMath::Power(xi, 2);
1502 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1503 t(0,2) += TMath::Power(-1, i) * xi;
1504 t(1,2) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1505 t(2,2) += TMath::Power(xi, 2);
1506 }
1507 return t.Determinant();
1508}
1509
5f006bd7 1510Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k)
52c19022 1511{
1512 // calculate the fitting parameters
1513 // will be changed!
1514
1515 TMatrix t(3,3);
1516 for (Int_t i = 0; i < GetNLayers(); i++) {
1517 if ( !((k >> i) & 0x1) )
1518 continue;
1519 Float_t xi = fGeo->GetTime0(i);
1520 t(0,0) += 1;
1521 t(1,0) += xi;
1522 t(2,0) += TMath::Power(-1, i) * xi;
1523 t(0,1) += xi;
1524 t(1,1) += TMath::Power(xi, 2);
1525 t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
1526 t(0,2) -= TMath::Power(-1, i) * xi;
1527 t(1,2) -= TMath::Power(-1, i) * TMath::Power(xi, 2);
1528 t(2,2) -= TMath::Power(xi, 2);
1529 }
1530 TDecompLU lr(t);
1531 lr.Solve(rhs);
1532 return lr.Decompose();
1533}
1534*/
1535
5f006bd7 1536Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2)
52c19022 1537{
1538 // get the x-coord. of the assumed circle/straight line intersection points
1539
1540 Int_t l1 = -1;
1541 Int_t l2 = -1;
1542 Int_t nHits = 0;
1543 for (Int_t layer = 0; layer < GetNLayers(); layer++) {
1544 if ( (k >> layer) & 0x1 ) {
5f006bd7 1545 if (l1 < 0)
52c19022 1546 l1 = layer;
1547 l2 = layer;
1548 nHits++;
1549 }
1550 }
1551
637666cd 1552 if ( (l1 >= 0) && (l2 >= 0) ) {
1553 x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1);
1554 x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1);
1555 return kTRUE;
1556 }
1557 else
1558 return kFALSE;
52c19022 1559}
1560
44eafcf2 1561Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2) const
52c19022 1562{
b491d23b 1563 // returns 0.3 * B * 1/a (1/128 GeV/c)
1564 // a : offset, b : slope (not used)
1565
44eafcf2 1566 if (fgUseGTUconst) {
1567 //----- calculation as in the GTU ----
1568 const Int_t maskIdLut[64] = {
1569 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
1570 -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5,
1571 -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10,
1572 -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
1573 };
1574
1575 const Int_t c1Lut[32] = {
1576 -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
1577 -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
1578 -2670, -2557, -2763, -2557, -2644, -2523, -1, -1,
1579 -1, -1, -1, -1, -1, -1, -1, -1
1580 };
1581
1582 Int_t layerMaskId = maskIdLut[layerMask];
1583 Int_t c1 = c1Lut[layerMaskId];
1584 Int_t c1Ext = c1 << 8;
1585 Int_t ptRawStage4 = c1Ext / a;
1586 Int_t ptRawComb4 = ptRawStage4;
1587 Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
1588
1589 return ((Int_t) ptExtComb4/2);
1590 }
1591 else {
1592 //----- simple calculation -----
1593 Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
1594 Float_t r = 0;
1595 if ( (a >> 1) != 0)
1596 r = (0.3 * fMagField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
1597
1598 Int_t pt = (Int_t) (2 * r);
1599 if (pt >= 0)
1600 pt += 32;
1601 else
1602 pt -= 29;
1603 pt /= 2;
1604 return pt;
1605 }
52c19022 1606}