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