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