LCOV - code coverage report
Current view: top level - TRD/TRDbase - AliTRDgtuParam.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 202 312 64.7 %
Date: 2016-06-14 17:26:59 Functions: 27 29 93.1 %

          Line data    Source code
       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          48 : ClassImp(AliTRDgtuParam)
      41             : 
      42             : Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE;
      43             : Bool_t AliTRDgtuParam::fgUseGTUmerge = kTRUE;
      44             : Bool_t AliTRDgtuParam::fgLimitNoTracklets = kTRUE;
      45             : Int_t  AliTRDgtuParam::fgMaxNoTracklets = 62;
      46             : 
      47             : // ----- matching windows -----
      48             :       Int_t     AliTRDgtuParam::fgDeltaY     = 19;
      49             :       Int_t     AliTRDgtuParam::fgDeltaAlpha = 21;
      50             : // ----- reference layers -----
      51             :       Int_t     AliTRDgtuParam::fgRefLayers[] = { 3, 2, 1 };
      52             : 
      53             : // ----- Bin widths (granularity) -----
      54             : const Float_t   AliTRDgtuParam::fgkBinWidthY  = 160e-4;
      55             : const Float_t   AliTRDgtuParam::fgkBinWidthdY = 140e-4;
      56             : 
      57             : // ----- Bit widths (used for internal representation) -----
      58             : const Int_t     AliTRDgtuParam::fgkBitWidthY      = 13;
      59             : const Int_t     AliTRDgtuParam::fgkBitWidthdY     = 7;
      60             : const Int_t     AliTRDgtuParam::fgkBitWidthYProj  = 10;
      61             : const Int_t     AliTRDgtuParam::fgkBitExcessY     = 4;
      62             : const Int_t     AliTRDgtuParam::fgkBitExcessAlpha = 10;
      63             : const Int_t     AliTRDgtuParam::fgkBitExcessYProj = 2;
      64             : 
      65             : // pt higher than the one for smallest possible a != 0
      66             : const Int_t    AliTRDgtuParam::fgkPtInfinity      = std::numeric_limits<Int_t>::max();
      67             : 
      68             : // ---- conversion rejection via sagitta method -----
      69             :       Float_t   AliTRDgtuParam::fgInvPtDevCut   = .262144;
      70             :       Float_t   AliTRDgtuParam::fgLayerInvXpos[6] = {0.0033335557, 0.00319918101, 0.003075219878, 0.002960506839, 0.002854044181, 0.002754972726};
      71             :       Float_t   AliTRDgtuParam::fgLayerXpos[6]    = {299.98      , 312.58       , 325.18        , 337.78        , 350.38        , 362.98};
      72             :       Int_t     AliTRDgtuParam::fgShiftLengthNorm = 1e6;
      73             :       Int_t     AliTRDgtuParam::fgCorrectionMode = 0;
      74             :       Bool_t    AliTRDgtuParam::fgWriteSagittaOutputToTrackWordBC = kFALSE;
      75             : 
      76             : // ----- geometry constants used in GTU -----
      77             : const Bool_t    AliTRDgtuParam::fgZChannelMap[5][16][6][16] = {
      78             : 
      79             : {  /* --- Stack 0 --- */
      80             : 
      81             : /*  . x x . . . . . . . . . . . . .  */
      82             : /*  x . . . . . . . . . . . . . . .  */
      83             : /*  X . . . . . . . . . . . . . . .  */
      84             : /*  x x . . . . . . . . . . . . . .  */
      85             : /*  x x . . . . . . . . . . . . . .  */
      86             : /*  x . . . . . . . . . . . . . . .  */
      87             : 
      88             : {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
      89             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
      90             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
      91             :  {1, 1, 0, 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             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
      94             : 
      95             : /*  . . x x . . . . . . . . . . . .  */
      96             : /*  x x . . . . . . . . . . . . . .  */
      97             : /*  . X . . . . . . . . . . . . . .  */
      98             : /*  . x x . . . . . . . . . . . . .  */
      99             : /*  . x x . . . . . . . . . . . . .  */
     100             : /*  x x . . . . . . . . . . . . . .  */
     101             : 
     102             : {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     103             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     104             :  {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     105             :  {0, 1, 1, 0, 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             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     108             : 
     109             : /*  . . . x x . . . . . . . . . . .  */
     110             : /*  . x x . . . . . . . . . . . . .  */
     111             : /*  . . X . . . . . . . . . . . . .  */
     112             : /*  . . x x . . . . . . . . . . . .  */
     113             : /*  . . x x . . . . . . . . . . . .  */
     114             : /*  . x x . . . . . . . . . . . . .  */
     115             : 
     116             : {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     117             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     118             :  {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     119             :  {0, 0, 1, 1, 0, 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             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     122             : 
     123             : /*  . . . . x x . . . . . . . . . .  */
     124             : /*  . . x x . . . . . . . . . . . .  */
     125             : /*  . . . X . . . . . . . . . . . .  */
     126             : /*  . . . x x . . . . . . . . . . .  */
     127             : /*  . . . x x . . . . . . . . . . .  */
     128             : /*  . . x x . . . . . . . . . . . .  */
     129             : 
     130             : {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     131             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     132             :  {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     133             :  {0, 0, 0, 1, 1, 0, 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             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     136             : 
     137             : /*  . . . . . x x . . . . . . . . .  */
     138             : /*  . . . x x . . . . . . . . . . .  */
     139             : /*  . . . . X . . . . . . . . . . .  */
     140             : /*  . . . . x x . . . . . . . . . .  */
     141             : /*  . . . . x x . . . . . . . . . .  */
     142             : /*  . . . x x . . . . . . . . . . .  */
     143             : 
     144             : {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     145             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     146             :  {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     147             :  {0, 0, 0, 0, 1, 1, 0, 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             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     150             : 
     151             : /*  . . . . . . x x . . . . . . . .  */
     152             : /*  . . . . x x . . . . . . . . . .  */
     153             : /*  . . . . . X . . . . . . . . . .  */
     154             : /*  . . . . . x x . . . . . . . . .  */
     155             : /*  . . . . . x x . . . . . . . . .  */
     156             : /*  . . . . x x . . . . . . . . . .  */
     157             : 
     158             : {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     159             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     160             :  {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     161             :  {0, 0, 0, 0, 0, 1, 1, 0, 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             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     164             : 
     165             : /*  . . . . . . . x x . . . . . . .  */
     166             : /*  . . . . . x x . . . . . . . . .  */
     167             : /*  . . . . . . X . . . . . . . . .  */
     168             : /*  . . . . . . x x . . . . . . . .  */
     169             : /*  . . . . . . x x . . . . . . . .  */
     170             : /*  . . . . . x x . . . . . . . . .  */
     171             : 
     172             : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     173             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     174             :  {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     175             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 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             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     178             : 
     179             : /*  . . . . . . . . x x . . . . . .  */
     180             : /*  . . . . . . x x x . . . . . . .  */
     181             : /*  . . . . . . . X . . . . . . . .  */
     182             : /*  . . . . . . . x x . . . . . . .  */
     183             : /*  . . . . . . . x x . . . . . . .  */
     184             : /*  . . . . . . x x . . . . . . . .  */
     185             : 
     186             : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     187             :  {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     188             :  {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     189             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     190             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     191             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
     192             : 
     193             : /*  . . . . . . . . x x x . . . . .  */
     194             : /*  . . . . . . . x x x . . . . . .  */
     195             : /*  . . . . . . . . X . . . . . . .  */
     196             : /*  . . . . . . . x x x . . . . . .  */
     197             : /*  . . . . . . . x x x . . . . . .  */
     198             : /*  . . . . . . . x x . . . . . . .  */
     199             : 
     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, 1, 1, 1, 0, 0, 0, 0, 0, 0},
     202             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
     203             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
     204             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
     205             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
     206             : 
     207             : /*  . . . . . . . . . x x x . . . .  */
     208             : /*  . . . . . . . . x x x . . . . .  */
     209             : /*  . . . . . . . . . X . . . . . .  */
     210             : /*  . . . . . . . . x x x . . . . .  */
     211             : /*  . . . . . . . . x x x . . . . .  */
     212             : /*  . . . . . . . . x x . . . . . .  */
     213             : 
     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, 1, 1, 1, 0, 0, 0, 0, 0},
     216             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
     217             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
     218             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
     219             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
     220             : 
     221             : /*  . . . . . . . . . . x x x . . .  */
     222             : /*  . . . . . . . . . x x x . . . .  */
     223             : /*  . . . . . . . . . . X . . . . .  */
     224             : /*  . . . . . . . . . x x x . . . .  */
     225             : /*  . . . . . . . . . x x x . . . .  */
     226             : /*  . . . . . . . . . x x . . . . .  */
     227             : 
     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, 1, 1, 1, 0, 0, 0, 0},
     230             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
     231             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
     232             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
     233             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
     234             : 
     235             : /*  . . . . . . . . . . . x x x . .  */
     236             : /*  . . . . . . . . . . x x x . . .  */
     237             : /*  . . . . . . . . . . . X . . . .  */
     238             : /*  . . . . . . . . . . x x x . . .  */
     239             : /*  . . . . . . . . . . x x x . . .  */
     240             : /*  . . . . . . . . . . x x . . . .  */
     241             : 
     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, 1, 1, 1, 0, 0, 0},
     244             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
     245             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
     246             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
     247             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
     248             : 
     249             : /*  . . . . . . . . . . . . x x x .  */
     250             : /*  . . . . . . . . . . . x x x . .  */
     251             : /*  . . . . . . . . . . . . X . . .  */
     252             : /*  . . . . . . . . . . . x x x . .  */
     253             : /*  . . . . . . . . . . . x x x . .  */
     254             : /*  . . . . . . . . . . . x x . . .  */
     255             : 
     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, 1, 1, 1, 0, 0},
     258             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
     259             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
     260             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
     261             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
     262             : 
     263             : /*  . . . . . . . . . . . . . x x x  */
     264             : /*  . . . . . . . . . . . . x x x .  */
     265             : /*  . . . . . . . . . . . . . X . .  */
     266             : /*  . . . . . . . . . . . . x x x .  */
     267             : /*  . . . . . . . . . . . . x x x .  */
     268             : /*  . . . . . . . . . . . . x x . .  */
     269             : 
     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, 1, 1, 1, 0},
     272             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
     273             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
     274             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
     275             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
     276             : 
     277             : /*  . . . . . . . . . . . . . . x x  */
     278             : /*  . . . . . . . . . . . . . x x x  */
     279             : /*  . . . . . . . . . . . . . . X .  */
     280             : /*  . . . . . . . . . . . . . x x x  */
     281             : /*  . . . . . . . . . . . . . x x x  */
     282             : /*  . . . . . . . . . . . . . x x .  */
     283             : 
     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, 1, 1, 1},
     286             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
     287             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
     288             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
     289             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
     290             : 
     291             : /*  . . . . . . . . . . . . . . . x  */
     292             : /*  . . . . . . . . . . . . . . x x  */
     293             : /*  . . . . . . . . . . . . . . . X  */
     294             : /*  . . . . . . . . . . . . . . x x  */
     295             : /*  . . . . . . . . . . . . . . x x  */
     296             : /*  . . . . . . . . . . . . . . x x  */
     297             : 
     298             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
     299             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     300             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
     301             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     302             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     303             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
     304             : 
     305             : {  /* --- Stack 1 --- */
     306             : 
     307             : /*  x x x . . . . . . . . . . . . .  */
     308             : /*  x x . . . . . . . . . . . . . .  */
     309             : /*  X . . . . . . . . . . . . . . .  */
     310             : /*  x x . . . . . . . . . . . . . .  */
     311             : /*  x x . . . . . . . . . . . . . .  */
     312             : /*  x . . . . . . . . . . . . . . .  */
     313             : 
     314             : {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     315             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     316             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     317             :  {1, 1, 0, 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             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     320             : 
     321             : /*  . x x x . . . . . . . . . . . .  */
     322             : /*  x x x . . . . . . . . . . . . .  */
     323             : /*  . X . . . . . . . . . . . . . .  */
     324             : /*  x x x . . . . . . . . . . . . .  */
     325             : /*  x x x . . . . . . . . . . . . .  */
     326             : /*  x x . . . . . . . . . . . . . .  */
     327             : 
     328             : {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     329             :  {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     330             :  {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     331             :  {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     332             :  {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     333             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     334             : 
     335             : /*  . . x x x . . . . . . . . . . .  */
     336             : /*  . x x x . . . . . . . . . . . .  */
     337             : /*  . . X . . . . . . . . . . . . .  */
     338             : /*  . x x x . . . . . . . . . . . .  */
     339             : /*  . x x x . . . . . . . . . . . .  */
     340             : /*  . x x . . . . . . . . . . . . .  */
     341             : 
     342             : {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     343             :  {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     344             :  {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     345             :  {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     346             :  {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     347             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     348             : 
     349             : /*  . . . x x x . . . . . . . . . .  */
     350             : /*  . . x x x . . . . . . . . . . .  */
     351             : /*  . . . X . . . . . . . . . . . .  */
     352             : /*  . . x x x . . . . . . . . . . .  */
     353             : /*  . . x x x . . . . . . . . . . .  */
     354             : /*  . . x x . . . . . . . . . . . .  */
     355             : 
     356             : {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     357             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     358             :  {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     359             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     360             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     361             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     362             : 
     363             : /*  . . . . x x x . . . . . . . . .  */
     364             : /*  . . . x x x . . . . . . . . . .  */
     365             : /*  . . . . X . . . . . . . . . . .  */
     366             : /*  . . . x x x . . . . . . . . . .  */
     367             : /*  . . . x x x . . . . . . . . . .  */
     368             : /*  . . . x x . . . . . . . . . . .  */
     369             : 
     370             : {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     371             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     372             :  {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     373             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     374             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     375             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     376             : 
     377             : /*  . . . . . x x x . . . . . . . .  */
     378             : /*  . . . . x x x . . . . . . . . .  */
     379             : /*  . . . . . X . . . . . . . . . .  */
     380             : /*  . . . . x x . . . . . . . . . .  */
     381             : /*  . . . . x x . . . . . . . . . .  */
     382             : /*  . . . . x x . . . . . . . . . .  */
     383             : 
     384             : {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     385             :  {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     386             :  {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     387             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     388             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     389             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     390             : 
     391             : /*  . . . . . . x x x . . . . . . .  */
     392             : /*  . . . . . . x x . . . . . . . .  */
     393             : /*  . . . . . . X . . . . . . . . .  */
     394             : /*  . . . . . x x . . . . . . . . .  */
     395             : /*  . . . . . x x . . . . . . . . .  */
     396             : /*  . . . . . x x . . . . . . . . .  */
     397             : 
     398             : {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     399             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     400             :  {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     401             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     402             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     403             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     404             : 
     405             : /*  . . . . . . . x x . . . . . . .  */
     406             : /*  . . . . . . . x x . . . . . . .  */
     407             : /*  . . . . . . . X . . . . . . . .  */
     408             : /*  . . . . . . x x . . . . . . . .  */
     409             : /*  . . . . . . x x . . . . . . . .  */
     410             : /*  . . . . . . x x . . . . . . . .  */
     411             : 
     412             : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     413             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     414             :  {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     415             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     416             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     417             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
     418             : 
     419             : /*  . . . . . . . . x x . . . . . .  */
     420             : /*  . . . . . . . . x x . . . . . .  */
     421             : /*  . . . . . . . . X . . . . . . .  */
     422             : /*  . . . . . . . x x . . . . . . .  */
     423             : /*  . . . . . . . x x . . . . . . .  */
     424             : /*  . . . . . . . x x . . . . . . .  */
     425             : 
     426             : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     427             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     428             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
     429             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     430             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     431             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
     432             : 
     433             : /*  . . . . . . . . . x x . . . . .  */
     434             : /*  . . . . . . . . . x x . . . . .  */
     435             : /*  . . . . . . . . . X . . . . . .  */
     436             : /*  . . . . . . . . x x . . . . . .  */
     437             : /*  . . . . . . . . x x . . . . . .  */
     438             : /*  . . . . . . . . x x . . . . . .  */
     439             : 
     440             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     441             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     442             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
     443             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     444             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     445             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
     446             : 
     447             : /*  . . . . . . . . . . x x . . . .  */
     448             : /*  . . . . . . . . . . x x . . . .  */
     449             : /*  . . . . . . . . . . X . . . . .  */
     450             : /*  . . . . . . . . . x x . . . . .  */
     451             : /*  . . . . . . . . . x x . . . . .  */
     452             : /*  . . . . . . . . . x x . . . . .  */
     453             : 
     454             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     455             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     456             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
     457             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     458             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     459             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
     460             : 
     461             : /*  . . . . . . . . . . . x x . . .  */
     462             : /*  . . . . . . . . . . . x x . . .  */
     463             : /*  . . . . . . . . . . . X . . . .  */
     464             : /*  . . . . . . . . . . x x . . . .  */
     465             : /*  . . . . . . . . . . x x . . . .  */
     466             : /*  . . . . . . . . . . x x . . . .  */
     467             : 
     468             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
     469             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
     470             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
     471             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     472             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     473             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
     474             : 
     475             : /*  . . . . . . . . . . . . x x . .  */
     476             : /*  . . . . . . . . . . . . x x . .  */
     477             : /*  . . . . . . . . . . . . X . . .  */
     478             : /*  . . . . . . . . . . . x x . . .  */
     479             : /*  . . . . . . . . . . . x x . . .  */
     480             : /*  . . . . . . . . . . . x x . . .  */
     481             : 
     482             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
     483             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
     484             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
     485             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
     486             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
     487             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
     488             : 
     489             : /*  . . . . . . . . . . . . . x x .  */
     490             : /*  . . . . . . . . . . . . . x x .  */
     491             : /*  . . . . . . . . . . . . . X . .  */
     492             : /*  . . . . . . . . . . . . x x . .  */
     493             : /*  . . . . . . . . . . . . x x . .  */
     494             : /*  . . . . . . . . . . . . x x . .  */
     495             : 
     496             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
     497             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
     498             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
     499             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
     500             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
     501             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
     502             : 
     503             : /*  . . . . . . . . . . . . . . x x  */
     504             : /*  . . . . . . . . . . . . . . x x  */
     505             : /*  . . . . . . . . . . . . . . X .  */
     506             : /*  . . . . . . . . . . . . . x x .  */
     507             : /*  . . . . . . . . . . . . . x x .  */
     508             : /*  . . . . . . . . . . . . . x x .  */
     509             : 
     510             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     511             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     512             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
     513             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
     514             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
     515             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
     516             : 
     517             : /*  . . . . . . . . . . . . . . . x  */
     518             : /*  . . . . . . . . . . . . . . . x  */
     519             : /*  . . . . . . . . . . . . . . . X  */
     520             : /*  . . . . . . . . . . . . . . x x  */
     521             : /*  . . . . . . . . . . . . . . x x  */
     522             : /*  . . . . . . . . . . . . . . x x  */
     523             : 
     524             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
     525             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
     526             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
     527             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     528             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     529             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}},
     530             : 
     531             : {  /* --- Stack 2 --- */
     532             : 
     533             : /*  x x . . . . . . . . . .          */
     534             : /*  x x . . . . . . . . . .          */
     535             : /*  X . . . . . . . . . . .          */
     536             : /*  x . . . . . . . . . . .          */
     537             : /*  x . . . . . . . . . . .          */
     538             : /*  x . . . . . . . . . . .          */
     539             : 
     540             : {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     541             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     542             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     543             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     544             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     545             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     546             : 
     547             : /*  . x x . . . . . . . . .          */
     548             : /*  . x x . . . . . . . . .          */
     549             : /*  . X . . . . . . . . . .          */
     550             : /*  x x . . . . . . . . . .          */
     551             : /*  x x . . . . . . . . . .          */
     552             : /*  x x . . . . . . . . . .          */
     553             : 
     554             : {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     555             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     556             :  {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     557             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     558             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     559             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     560             : 
     561             : /*  . . x x . . . . . . . .          */
     562             : /*  . . x x . . . . . . . .          */
     563             : /*  . . X . . . . . . . . .          */
     564             : /*  . x x . . . . . . . . .          */
     565             : /*  . x x . . . . . . . . .          */
     566             : /*  . x x . . . . . . . . .          */
     567             : 
     568             : {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     569             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     570             :  {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     571             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     572             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     573             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     574             : 
     575             : /*  . . . x x . . . . . . .          */
     576             : /*  . . . x x . . . . . . .          */
     577             : /*  . . . X . . . . . . . .          */
     578             : /*  . . x x x . . . . . . .          */
     579             : /*  . . x x x . . . . . . .          */
     580             : /*  . . x x x . . . . . . .          */
     581             : 
     582             : {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     583             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     584             :  {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     585             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     586             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     587             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     588             : 
     589             : /*  . . . x x x . . . . . .          */
     590             : /*  . . . x x x . . . . . .          */
     591             : /*  . . . . X . . . . . . .          */
     592             : /*  . . . x x x . . . . . .          */
     593             : /*  . . . x x x . . . . . .          */
     594             : /*  . . . x x x . . . . . .          */
     595             : 
     596             : {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     597             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     598             :  {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     599             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     600             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     601             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     602             : 
     603             : /*  . . . . x x x . . . . .          */
     604             : /*  . . . . x x x . . . . .          */
     605             : /*  . . . . . X . . . . . .          */
     606             : /*  . . . . x x x . . . . .          */
     607             : /*  . . . . x x x . . . . .          */
     608             : /*  . . . . x x x . . . . .          */
     609             : 
     610             : {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     611             :  {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     612             :  {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     613             :  {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     614             :  {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     615             :  {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     616             : 
     617             : /*  . . . . . x x x . . . .          */
     618             : /*  . . . . . x x x . . . .          */
     619             : /*  . . . . . . X . . . . .          */
     620             : /*  . . . . . x x x . . . .          */
     621             : /*  . . . . . x x x . . . .          */
     622             : /*  . . . . . x x x . . . .          */
     623             : 
     624             : {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     625             :  {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     626             :  {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     627             :  {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     628             :  {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     629             :  {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
     630             : 
     631             : /*  . . . . . . x x x . . .          */
     632             : /*  . . . . . . x x x . . .          */
     633             : /*  . . . . . . . X . . . .          */
     634             : /*  . . . . . . x x x . . .          */
     635             : /*  . . . . . . x x x . . .          */
     636             : /*  . . . . . . x x x . . .          */
     637             : 
     638             : {{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     639             :  {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     640             :  {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     641             :  {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     642             :  {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     643             :  {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
     644             : 
     645             : /*  . . . . . . . x x . . .          */
     646             : /*  . . . . . . . x x . . .          */
     647             : /*  . . . . . . . . X . . .          */
     648             : /*  . . . . . . . x x x . .          */
     649             : /*  . . . . . . . x x x . .          */
     650             : /*  . . . . . . . x x x . .          */
     651             : 
     652             : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     653             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     654             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
     655             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
     656             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
     657             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}},
     658             : 
     659             : /*  . . . . . . . . x x . .          */
     660             : /*  . . . . . . . . x x . .          */
     661             : /*  . . . . . . . . . X . .          */
     662             : /*  . . . . . . . . . x x .          */
     663             : /*  . . . . . . . . . x x .          */
     664             : /*  . . . . . . . . . x x .          */
     665             : 
     666             : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     667             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     668             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
     669             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     670             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     671             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
     672             : 
     673             : /*  . . . . . . . . . x x .          */
     674             : /*  . . . . . . . . . x x .          */
     675             : /*  . . . . . . . . . . X .          */
     676             : /*  . . . . . . . . . . x x          */
     677             : /*  . . . . . . . . . . x x          */
     678             : /*  . . . . . . . . . . x x          */
     679             : 
     680             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     681             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     682             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
     683             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     684             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     685             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
     686             : 
     687             : /*  . . . . . . . . . . x x          */
     688             : /*  . . . . . . . . . . x x          */
     689             : /*  . . . . . . . . . . . X          */
     690             : /*  . . . . . . . . . . . x          */
     691             : /*  . . . . . . . . . . . x          */
     692             : /*  . . . . . . . . . . . x          */
     693             : 
     694             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     695             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     696             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
     697             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
     698             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
     699             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
     700             : 
     701             : /*  . . . . . . . . . . . .          */
     702             : /*  . . . . . . . . . . . .          */
     703             : /*  . . . . . . . . . . . .          */
     704             : /*  . . . . . . . . . . . .          */
     705             : /*  . . . . . . . . . . . .          */
     706             : /*  . . . . . . . . . . . .          */
     707             : 
     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             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     714             : 
     715             : /*  . . . . . . . . . . . .          */
     716             : /*  . . . . . . . . . . . .          */
     717             : /*  . . . . . . . . . . . .          */
     718             : /*  . . . . . . . . . . . .          */
     719             : /*  . . . . . . . . . . . .          */
     720             : /*  . . . . . . . . . . . .          */
     721             : 
     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             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     728             : 
     729             : /*  . . . . . . . . . . . .          */
     730             : /*  . . . . . . . . . . . .          */
     731             : /*  . . . . . . . . . . . .          */
     732             : /*  . . . . . . . . . . . .          */
     733             : /*  . . . . . . . . . . . .          */
     734             : /*  . . . . . . . . . . . .          */
     735             : 
     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             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     742             : 
     743             : /*  . . . . . . . . . . . .          */
     744             : /*  . . . . . . . . . . . .          */
     745             : /*  . . . . . . . . . . . .          */
     746             : /*  . . . . . . . . . . . .          */
     747             : /*  . . . . . . . . . . . .          */
     748             : /*  . . . . . . . . . . . .          */
     749             : 
     750             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     751             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     752             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     753             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     754             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     755             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}},
     756             : 
     757             : {  /* --- Stack 3 --- */
     758             : 
     759             : /*  x . . . . . . . . . . . . . . .  */
     760             : /*  x . . . . . . . . . . . . . . .  */
     761             : /*  X . . . . . . . . . . . . . . .  */
     762             : /*  x x . . . . . . . . . . . . . .  */
     763             : /*  x x . . . . . . . . . . . . . .  */
     764             : /*  x x . . . . . . . . . . . . . .  */
     765             : 
     766             : {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     767             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     768             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     769             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     770             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     771             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     772             : 
     773             : /*  x x . . . . . . . . . . . . . .  */
     774             : /*  x x . . . . . . . . . . . . . .  */
     775             : /*  . X . . . . . . . . . . . . . .  */
     776             : /*  . x x . . . . . . . . . . . . .  */
     777             : /*  . x x . . . . . . . . . . . . .  */
     778             : /*  . x x . . . . . . . . . . . . .  */
     779             : 
     780             : {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     781             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     782             :  {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     783             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     784             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     785             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     786             : 
     787             : /*  . x x . . . . . . . . . . . . .  */
     788             : /*  . x x . . . . . . . . . . . . .  */
     789             : /*  . . X . . . . . . . . . . . . .  */
     790             : /*  . . x x . . . . . . . . . . . .  */
     791             : /*  . . x x . . . . . . . . . . . .  */
     792             : /*  . . x x . . . . . . . . . . . .  */
     793             : 
     794             : {{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     795             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     796             :  {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     797             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     798             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     799             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     800             : 
     801             : /*  . . x x . . . . . . . . . . . .  */
     802             : /*  . . x x . . . . . . . . . . . .  */
     803             : /*  . . . X . . . . . . . . . . . .  */
     804             : /*  . . . x x . . . . . . . . . . .  */
     805             : /*  . . . x x . . . . . . . . . . .  */
     806             : /*  . . . x x . . . . . . . . . . .  */
     807             : 
     808             : {{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     809             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     810             :  {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     811             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     812             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     813             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     814             : 
     815             : /*  . . . x x . . . . . . . . . . .  */
     816             : /*  . . . x x . . . . . . . . . . .  */
     817             : /*  . . . . X . . . . . . . . . . .  */
     818             : /*  . . . . x x . . . . . . . . . .  */
     819             : /*  . . . . x x . . . . . . . . . .  */
     820             : /*  . . . . x x . . . . . . . . . .  */
     821             : 
     822             : {{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     823             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     824             :  {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     825             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     826             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     827             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     828             : 
     829             : /*  . . . . x x . . . . . . . . . .  */
     830             : /*  . . . . x x . . . . . . . . . .  */
     831             : /*  . . . . . X . . . . . . . . . .  */
     832             : /*  . . . . . x x . . . . . . . . .  */
     833             : /*  . . . . . x x . . . . . . . . .  */
     834             : /*  . . . . . x x . . . . . . . . .  */
     835             : 
     836             : {{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     837             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     838             :  {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     839             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     840             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     841             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     842             : 
     843             : /*  . . . . . x x . . . . . . . . .  */
     844             : /*  . . . . . x x . . . . . . . . .  */
     845             : /*  . . . . . . X . . . . . . . . .  */
     846             : /*  . . . . . . x x . . . . . . . .  */
     847             : /*  . . . . . . x x . . . . . . . .  */
     848             : /*  . . . . . . x x . . . . . . . .  */
     849             : 
     850             : {{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     851             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     852             :  {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     853             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     854             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     855             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
     856             : 
     857             : /*  . . . . . . x x . . . . . . . .  */
     858             : /*  . . . . . . x x . . . . . . . .  */
     859             : /*  . . . . . . . X . . . . . . . .  */
     860             : /*  . . . . . . . x x . . . . . . .  */
     861             : /*  . . . . . . . x x . . . . . . .  */
     862             : /*  . . . . . . . x x . . . . . . .  */
     863             : 
     864             : {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     865             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     866             :  {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
     867             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     868             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     869             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
     870             : 
     871             : /*  . . . . . . . x x . . . . . . .  */
     872             : /*  . . . . . . . x x . . . . . . .  */
     873             : /*  . . . . . . . . X . . . . . . .  */
     874             : /*  . . . . . . . . x x . . . . . .  */
     875             : /*  . . . . . . . . x x . . . . . .  */
     876             : /*  . . . . . . . . x x . . . . . .  */
     877             : 
     878             : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     879             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
     880             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
     881             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     882             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     883             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
     884             : 
     885             : /*  . . . . . . . x x x . . . . . .  */
     886             : /*  . . . . . . . . x x . . . . . .  */
     887             : /*  . . . . . . . . . X . . . . . .  */
     888             : /*  . . . . . . . . . x x . . . . .  */
     889             : /*  . . . . . . . . . x x . . . . .  */
     890             : /*  . . . . . . . . . x x . . . . .  */
     891             : 
     892             : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
     893             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
     894             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
     895             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     896             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
     897             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
     898             : 
     899             : /*  . . . . . . . . x x x . . . . .  */
     900             : /*  . . . . . . . . . x x x . . . .  */
     901             : /*  . . . . . . . . . . X . . . . .  */
     902             : /*  . . . . . . . . . . x x . . . .  */
     903             : /*  . . . . . . . . . . x x . . . .  */
     904             : /*  . . . . . . . . . . x x . . . .  */
     905             : 
     906             : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0},
     907             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
     908             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
     909             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     910             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
     911             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
     912             : 
     913             : /*  . . . . . . . . . x x x . . . .  */
     914             : /*  . . . . . . . . . . x x x . . .  */
     915             : /*  . . . . . . . . . . . X . . . .  */
     916             : /*  . . . . . . . . . . x x x . . .  */
     917             : /*  . . . . . . . . . . x x x . . .  */
     918             : /*  . . . . . . . . . . . x x . . .  */
     919             : 
     920             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0},
     921             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
     922             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
     923             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
     924             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
     925             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
     926             : 
     927             : /*  . . . . . . . . . . x x x . . .  */
     928             : /*  . . . . . . . . . . . x x x . .  */
     929             : /*  . . . . . . . . . . . . X . . .  */
     930             : /*  . . . . . . . . . . . x x x . .  */
     931             : /*  . . . . . . . . . . . x x x . .  */
     932             : /*  . . . . . . . . . . . . x x . .  */
     933             : 
     934             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0},
     935             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
     936             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
     937             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
     938             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
     939             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
     940             : 
     941             : /*  . . . . . . . . . . . x x x . .  */
     942             : /*  . . . . . . . . . . . . x x x .  */
     943             : /*  . . . . . . . . . . . . . X . .  */
     944             : /*  . . . . . . . . . . . . x x x .  */
     945             : /*  . . . . . . . . . . . . x x x .  */
     946             : /*  . . . . . . . . . . . . . x x .  */
     947             : 
     948             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0},
     949             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
     950             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
     951             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
     952             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
     953             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
     954             : 
     955             : /*  . . . . . . . . . . . . x x x .  */
     956             : /*  . . . . . . . . . . . . . x x x  */
     957             : /*  . . . . . . . . . . . . . . X .  */
     958             : /*  . . . . . . . . . . . . . x x x  */
     959             : /*  . . . . . . . . . . . . . x x x  */
     960             : /*  . . . . . . . . . . . . . . x x  */
     961             : 
     962             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0},
     963             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
     964             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
     965             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
     966             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
     967             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
     968             : 
     969             : /*  . . . . . . . . . . . . . x x x  */
     970             : /*  . . . . . . . . . . . . . . x x  */
     971             : /*  . . . . . . . . . . . . . . . X  */
     972             : /*  . . . . . . . . . . . . . . x x  */
     973             : /*  . . . . . . . . . . . . . . x x  */
     974             : /*  . . . . . . . . . . . . . . . x  */
     975             : 
     976             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1},
     977             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     978             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
     979             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     980             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
     981             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}},
     982             : 
     983             : {  /* --- Stack 4 --- */
     984             : 
     985             : /*  x . . . . . . . . . . . . . . .  */
     986             : /*  x x . . . . . . . . . . . . . .  */
     987             : /*  X . . . . . . . . . . . . . . .  */
     988             : /*  x x . . . . . . . . . . . . . .  */
     989             : /*  x x . . . . . . . . . . . . . .  */
     990             : /*  x x . . . . . . . . . . . . . .  */
     991             : 
     992             : {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     993             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     994             :  {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     995             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     996             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
     997             :  {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
     998             : 
     999             : /*  x x . . . . . . . . . . . . . .  */
    1000             : /*  x x x . . . . . . . . . . . . .  */
    1001             : /*  . X . . . . . . . . . . . . . .  */
    1002             : /*  x x x . . . . . . . . . . . . .  */
    1003             : /*  x x x . . . . . . . . . . . . .  */
    1004             : /*  . x x . . . . . . . . . . . . .  */
    1005             : 
    1006             : {{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1007             :  {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1008             :  {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1009             :  {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1010             :  {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1011             :  {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
    1012             : 
    1013             : /*  x x x . . . . . . . . . . . . .  */
    1014             : /*  . x x x . . . . . . . . . . . .  */
    1015             : /*  . . X . . . . . . . . . . . . .  */
    1016             : /*  . x x x . . . . . . . . . . . .  */
    1017             : /*  . x x x . . . . . . . . . . . .  */
    1018             : /*  . . x x . . . . . . . . . . . .  */
    1019             : 
    1020             : {{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1021             :  {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1022             :  {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1023             :  {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1024             :  {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1025             :  {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
    1026             : 
    1027             : /*  . x x x . . . . . . . . . . . .  */
    1028             : /*  . . x x x . . . . . . . . . . .  */
    1029             : /*  . . . X . . . . . . . . . . . .  */
    1030             : /*  . . x x x . . . . . . . . . . .  */
    1031             : /*  . . x x x . . . . . . . . . . .  */
    1032             : /*  . . . x x . . . . . . . . . . .  */
    1033             : 
    1034             : {{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1035             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1036             :  {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1037             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1038             :  {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1039             :  {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
    1040             : 
    1041             : /*  . . x x x . . . . . . . . . . .  */
    1042             : /*  . . . x x x . . . . . . . . . .  */
    1043             : /*  . . . . X . . . . . . . . . . .  */
    1044             : /*  . . . x x x . . . . . . . . . .  */
    1045             : /*  . . . x x x . . . . . . . . . .  */
    1046             : /*  . . . . x x . . . . . . . . . .  */
    1047             : 
    1048             : {{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1049             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1050             :  {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1051             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1052             :  {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1053             :  {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
    1054             : 
    1055             : /*  . . . x x x . . . . . . . . . .  */
    1056             : /*  . . . . x x x . . . . . . . . .  */
    1057             : /*  . . . . . X . . . . . . . . . .  */
    1058             : /*  . . . . x x x . . . . . . . . .  */
    1059             : /*  . . . . x x x . . . . . . . . .  */
    1060             : /*  . . . . . x x . . . . . . . . .  */
    1061             : 
    1062             : {{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1063             :  {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1064             :  {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1065             :  {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1066             :  {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1067             :  {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
    1068             : 
    1069             : /*  . . . . x x x . . . . . . . . .  */
    1070             : /*  . . . . . x x x . . . . . . . .  */
    1071             : /*  . . . . . . X . . . . . . . . .  */
    1072             : /*  . . . . . x x x . . . . . . . .  */
    1073             : /*  . . . . . x x x . . . . . . . .  */
    1074             : /*  . . . . . . x x . . . . . . . .  */
    1075             : 
    1076             : {{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1077             :  {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
    1078             :  {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    1079             :  {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
    1080             :  {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
    1081             :  {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}},
    1082             : 
    1083             : /*  . . . . . x x x . . . . . . . .  */
    1084             : /*  . . . . . . x x x . . . . . . .  */
    1085             : /*  . . . . . . . X . . . . . . . .  */
    1086             : /*  . . . . . . x x x . . . . . . .  */
    1087             : /*  . . . . . . x x x . . . . . . .  */
    1088             : /*  . . . . . . . x x . . . . . . .  */
    1089             : 
    1090             : {{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
    1091             :  {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
    1092             :  {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
    1093             :  {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
    1094             :  {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
    1095             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
    1096             : 
    1097             : /*  . . . . . . x x . . . . . . . .  */
    1098             : /*  . . . . . . . x x x . . . . . .  */
    1099             : /*  . . . . . . . . X . . . . . . .  */
    1100             : /*  . . . . . . . x x . . . . . . .  */
    1101             : /*  . . . . . . . x x . . . . . . .  */
    1102             : /*  . . . . . . . . x x . . . . . .  */
    1103             : 
    1104             : {{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
    1105             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0},
    1106             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
    1107             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
    1108             :  {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
    1109             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}},
    1110             : 
    1111             : /*  . . . . . . . x x . . . . . . .  */
    1112             : /*  . . . . . . . . . x x . . . . .  */
    1113             : /*  . . . . . . . . . X . . . . . .  */
    1114             : /*  . . . . . . . . x x . . . . . .  */
    1115             : /*  . . . . . . . . x x . . . . . .  */
    1116             : /*  . . . . . . . . . x x . . . . .  */
    1117             : 
    1118             : {{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
    1119             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
    1120             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
    1121             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
    1122             :  {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
    1123             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}},
    1124             : 
    1125             : /*  . . . . . . . . x x . . . . . .  */
    1126             : /*  . . . . . . . . . . x x . . . .  */
    1127             : /*  . . . . . . . . . . X . . . . .  */
    1128             : /*  . . . . . . . . . x x . . . . .  */
    1129             : /*  . . . . . . . . . x x . . . . .  */
    1130             : /*  . . . . . . . . . . x x . . . .  */
    1131             : 
    1132             : {{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
    1133             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
    1134             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
    1135             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
    1136             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
    1137             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}},
    1138             : 
    1139             : /*  . . . . . . . . . x x . . . . .  */
    1140             : /*  . . . . . . . . . . . x x . . .  */
    1141             : /*  . . . . . . . . . . . X . . . .  */
    1142             : /*  . . . . . . . . . . x x . . . .  */
    1143             : /*  . . . . . . . . . . x x . . . .  */
    1144             : /*  . . . . . . . . . . . x x . . .  */
    1145             : 
    1146             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
    1147             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    1148             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
    1149             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
    1150             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
    1151             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}},
    1152             : 
    1153             : /*  . . . . . . . . . . x x . . . .  */
    1154             : /*  . . . . . . . . . . . . x x . .  */
    1155             : /*  . . . . . . . . . . . . X . . .  */
    1156             : /*  . . . . . . . . . . . x x . . .  */
    1157             : /*  . . . . . . . . . . . x x . . .  */
    1158             : /*  . . . . . . . . . . . . x x . .  */
    1159             : 
    1160             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0},
    1161             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
    1162             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
    1163             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    1164             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    1165             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}},
    1166             : 
    1167             : /*  . . . . . . . . . . . x x . . .  */
    1168             : /*  . . . . . . . . . . . . . x x .  */
    1169             : /*  . . . . . . . . . . . . . X . .  */
    1170             : /*  . . . . . . . . . . . . x x . .  */
    1171             : /*  . . . . . . . . . . . . x x . .  */
    1172             : /*  . . . . . . . . . . . . . x x .  */
    1173             : 
    1174             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    1175             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
    1176             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
    1177             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
    1178             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
    1179             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}},
    1180             : 
    1181             : /*  . . . . . . . . . . . . x x . .  */
    1182             : /*  . . . . . . . . . . . . . . x x  */
    1183             : /*  . . . . . . . . . . . . . . X .  */
    1184             : /*  . . . . . . . . . . . . . x x .  */
    1185             : /*  . . . . . . . . . . . . . x x .  */
    1186             : /*  . . . . . . . . . . . . . . x x  */
    1187             : 
    1188             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0},
    1189             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
    1190             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
    1191             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
    1192             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
    1193             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}},
    1194             : 
    1195             : /*  . . . . . . . . . . . . . x x .  */
    1196             : /*  . . . . . . . . . . . . . . . x  */
    1197             : /*  . . . . . . . . . . . . . . . X  */
    1198             : /*  . . . . . . . . . . . . . . x x  */
    1199             : /*  . . . . . . . . . . . . . . x x  */
    1200             : /*  . . . . . . . . . . . . . . . x  */
    1201             : 
    1202             : {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},
    1203             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
    1204             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
    1205             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
    1206             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
    1207             :  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}}
    1208             : 
    1209             : };
    1210             : const Float_t   AliTRDgtuParam::fgkRadius[6] = { 300.65, 313.25, 325.85, 338.45, 351.05, 363.65 };
    1211             : const Float_t   AliTRDgtuParam::fgkThickness = 3.;
    1212             : const Float_t   AliTRDgtuParam::fgkRow0Pos[6][5] = {
    1213             :   {301, 177, 53, -57, -181},
    1214             :   {301, 177, 53, -57, -181},
    1215             :   {315, 184, 53, -57, -188},
    1216             :   {329, 191, 53, -57, -195},
    1217             :   {343, 198, 53, -57, -202},
    1218             :   {347, 200, 53, -57, -204}
    1219             : };
    1220             : const Float_t   AliTRDgtuParam::fgkInnerPadLength[] = {7.5, 7.5, 8.0, 8.5, 9.0, 9.0};
    1221             : const Float_t   AliTRDgtuParam::fgkOuterPadLength[] = {7.5, 7.5, 7.5, 7.5, 7.5, 8.5};
    1222             : const Float_t   AliTRDgtuParam::fgkAcoeff[32][6] = {
    1223             :   {-3440, -3303,  3174,  3057,     0,     0},
    1224             :   {-3481,     0,  -171,     0,  3140,     0},
    1225             :   {-2850, -1380,     0,  1277,  2441,     0},
    1226             :   {-3481,     0,  -171,     0,  3140,     0},
    1227             :   {    0, -3568, -3431,  3303,  3185,     0},
    1228             :   {-2783, -1378,  -136,  1275,  2510,     0},
    1229             :   {-1500, -2857,  1384,     0,     0,  2461},
    1230             :   {    0, -3609,     0,  -171,     0,  3268},
    1231             :   {-3685,     0,  3400, -3276,     0,  3049},
    1232             :   {    0, -3609,     0,  -171,     0,  3268},
    1233             :   {-1498, -2792,  1382,  -132,     0,  2528},
    1234             :   {-1850, -1777,     0,     0,  1585,  1531},
    1235             :   {-3481,     0,  -171,     0,  3140,     0},
    1236             :   {    0, -2953, -1431,     0,  1328,  2544},
    1237             :   {-1808, -1776,   -89,     0,  1631,  1530},
    1238             :   {-2932,     0,     0, -1314,  2511,  1223},
    1239             :   {    0, -3609,     0,  -171,     0,  3268},
    1240             :   {-1849, -1738,     0,   -82,  1583,  1574},
    1241             :   {    0,     0, -3696, -3559,  3431,  3313},
    1242             :   {-2863,     0,  -140, -1312,  2582,  1221},
    1243             :   {    0, -2886, -1429,  -136,  1327,  2613},
    1244             :   {-1806, -1736,   -89,   -82,  1629,  1572},
    1245             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1246             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1247             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1248             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1249             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1250             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1251             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1252             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1253             :   {   -1,    -1,    -1,    -1,    -1,    -1},
    1254             :   {   -1,    -1,    -1,    -1,    -1,    -1}
    1255             : };
    1256             : const Float_t    AliTRDgtuParam::fgkZposLookupTable[5][6][16] = {
    1257             : {{297.25 ,289.75 ,282.25 ,274.75 ,267.25 ,259.75 ,252.25 ,244.75 ,237.25 ,229.75 ,222.25 ,214.75 ,207.25 ,199.75 ,192.25 ,184.75},
    1258             :  {297.25 ,289.75 ,282.25 ,274.75 ,267.25 ,259.75 ,252.25 ,244.75 ,237.25 ,229.75 ,222.25 ,214.75 ,207.25 ,199.75 ,192.25 ,184.75},
    1259             :  {311.25 ,303.5  ,295.5  ,287.5  ,279.5  ,271.5  ,263.5  ,255.5  ,247.5  ,239.5  ,231.5  ,223.5  ,215.5  ,207.5  ,199.5  ,191.75},
    1260             :  {325.25 ,317.25 ,308.75 ,300.25 ,291.75 ,283.25 ,274.75 ,266.25 ,257.75 ,249.25 ,240.75 ,232.25 ,223.75 ,215.25 ,206.75 ,198.75},
    1261             :  {339.25 ,331    ,322    ,313    ,304    ,295    ,286    ,277    ,268    ,259    ,250    ,241    ,232    ,223    ,214    ,205.75},
    1262             :  {342.75 ,334    ,325    ,316    ,307    ,298    ,289    ,280    ,271    ,262    ,253    ,244    ,235    ,226    ,217    ,208.25}},
    1263             : 
    1264             : {{173.25 ,165.75 ,158.25 ,150.75 ,143.25 ,135.75 ,128.25 ,120.75 ,113.25 ,105.75 ,98.25  ,90.75  ,83.25  ,75.75  ,68.25  ,60.75},
    1265             :  {173.25 ,165.75 ,158.25 ,150.75 ,143.25 ,135.75 ,128.25 ,120.75 ,113.25 ,105.75 ,98.25  ,90.75  ,83.25  ,75.75  ,68.25  ,60.75},
    1266             :  {180.25 ,172.5  ,164.5  ,156.5  ,148.5  ,140.5  ,132.5  ,124.5  ,116.5  ,108.5  ,100.5  ,92.5   ,84.5   ,76.5   ,68.5   ,60.75},
    1267             :  {187.25 ,179.25 ,170.75 ,162.25 ,153.75 ,145.25 ,136.75 ,128.25 ,119.75 ,111.25 ,102.75 ,94.25  ,85.75  ,77.25  ,68.75  ,60.75},
    1268             :  {194.25 ,186    ,177    ,168    ,159    ,150    ,141    ,132    ,123    ,114    ,105    ,96     ,87     ,78     ,69     ,60.75},
    1269             :  {195.75 ,187    ,178    ,169    ,160    ,151    ,142    ,133    ,124    ,115    ,106    ,97     ,88     ,79     ,70     ,61.25}},
    1270             : 
    1271             : {{49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
    1272             :  {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
    1273             :  {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
    1274             :  {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
    1275             :  {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999},
    1276             :  {49 ,40.5 ,31.5 ,22.5 ,13.5 ,4.5 ,-4.5 ,-13.5 ,-22.5 ,-31.5 ,-40.5 ,-49 ,9999 ,9999 ,9999 ,9999}},
    1277             : 
    1278             : {{-60.75 ,-68.25 ,-75.75 ,-83.25 ,-90.75 ,-98.25  ,-105.75 ,-113.25 ,-120.75 ,-128.25 ,-135.75 ,-143.25 ,-150.75 ,-158.25 ,-165.75 ,-173.25},
    1279             :  {-60.75 ,-68.25 ,-75.75 ,-83.25 ,-90.75 ,-98.25  ,-105.75 ,-113.25 ,-120.75 ,-128.25 ,-135.75 ,-143.25 ,-150.75 ,-158.25 ,-165.75 ,-173.25},
    1280             :  {-60.75 ,-68.5  ,-76.5  ,-84.5  ,-92.5  ,-100.5  ,-108.5  ,-116.5  ,-124.5  ,-132.5  ,-140.5  ,-148.5  ,-156.5  ,-164.5  ,-172.5  ,-180.25},
    1281             :  {-60.75 ,-68.75 ,-77.25 ,-85.75 ,-94.25 ,-102.75 ,-111.25 ,-119.75 ,-128.25 ,-136.75 ,-145.25 ,-153.75 ,-162.25 ,-170.75 ,-179.25 ,-187.25},
    1282             :  {-60.75 ,-69    ,-78    ,-87    ,-96    ,-105    ,-114    ,-123    ,-132    ,-141    ,-150    ,-159    ,-168    ,-177    ,-186    ,-194.25},
    1283             :  {-61.25 ,-70    ,-79    ,-88    ,-97    ,-106    ,-115    ,-124    ,-133    ,-142    ,-151    ,-160    ,-169    ,-178    ,-187    ,-195.75}},
    1284             : 
    1285             : {{-184.75  ,-192.25 ,-199.75 ,-207.25 ,-214.75 ,-222.25 ,-229.75 ,-237.25 ,-244.75 ,-252.25 ,-259.75 ,-267.25 ,-274.75 ,-282.25 ,-289.75 ,-297.25},
    1286             :  {-184.75  ,-192.25 ,-199.75 ,-207.25 ,-214.75 ,-222.25 ,-229.75 ,-237.25 ,-244.75 ,-252.25 ,-259.75 ,-267.25 ,-274.75 ,-282.25 ,-289.75 ,-297.25},
    1287             :  {-191.75  ,-199.5  ,-207.5  ,-215.5  ,-223.5  ,-231.5  ,-239.5  ,-247.5  ,-255.5  ,-263.5  ,-271.5  ,-279.5  ,-287.5  ,-295.5  ,-303.5  ,-311.25},
    1288             :  {-198.75  ,-206.75 ,-215.25 ,-223.75 ,-232.25 ,-240.75 ,-249.25 ,-257.75 ,-266.25 ,-274.75 ,-283.25 ,-291.75 ,-300.25 ,-308.75 ,-317.25 ,-325.25},
    1289             :  {-205.75  ,-214    ,-223    ,-232    ,-241    ,-250    ,-259    ,-268    ,-277    ,-286    ,-295    ,-304    ,-313    ,-322    ,-331    ,-339.25},
    1290             :  {-208.25  ,-217    ,-226    ,-235    ,-244    ,-253    ,-262    ,-271    ,-280    ,-289    ,-298    ,-307    ,-316    ,-325    ,-334    ,-342.75}
    1291             : }};
    1292             : const Int_t     AliTRDgtuParam::fgkMaskID[] = {
    1293             :   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  0,
    1294             :   -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  2, -1,  3,  4,  5,
    1295             :   -1, -1, -1, -1, -1, -1, -1,  6, -1, -1, -1,  7, -1,  8,  9, 10,
    1296             :   -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
    1297             : };
    1298             : 
    1299           2 : AliTRDgtuParam::AliTRDgtuParam() :
    1300           2 :   fVertexSize(20.0),
    1301           2 :   fCurrTrackletMask(0),
    1302           2 :   fMagField(0.5),
    1303           2 :   fGeo(0x0)
    1304          10 : {
    1305             :   // default ctor
    1306           6 :   fGeo = new AliTRDgeometry();
    1307          28 :   for (Int_t iLayer = 0; iLayer < 6; iLayer++) {
    1308          12 :     fAki[iLayer] = 0.;
    1309          12 :     fBki[iLayer] = 0.;
    1310          12 :     fCki[iLayer] = 0.;
    1311          12 :     fPki[iLayer] = 0;
    1312             :   }
    1313           2 :   fLengthNorm = 0;
    1314           2 :   fc1Inv = 0;
    1315           2 :   GenerateZChannelMap();
    1316           4 : }
    1317             : 
    1318             : AliTRDgtuParam::~AliTRDgtuParam()
    1319           8 : {
    1320             :   // dtor
    1321             : 
    1322           4 :   delete fGeo;
    1323           4 : }
    1324             : 
    1325             : AliTRDgtuParam* AliTRDgtuParam::Instance()
    1326             : {
    1327             :   // get (or create) the single instance
    1328             : 
    1329        2462 :   static AliTRDgtuParam instance;
    1330        1228 :   return &instance;
    1331           0 : }
    1332             : 
    1333             : Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
    1334             : {
    1335        2160 :   return (fZSubChannel[stack][zchannel][layer][zpos] != 0);
    1336             : }
    1337             : 
    1338             : Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const
    1339             : {
    1340        1542 :   return fZSubChannel[stack][zchannel][layer][zpos];
    1341             : }
    1342             : 
    1343             : Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx)
    1344             : {
    1345             :   // returns the reference layer indexed by refLayerIdx
    1346             : 
    1347         968 :   if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers)
    1348         484 :     return fgRefLayers[refLayerIdx];
    1349             :   else
    1350           0 :     return -1;
    1351         484 : }
    1352             : 
    1353             : Int_t AliTRDgtuParam::GenerateZChannelMap()
    1354             : {
    1355             :   // generate the z-channel map
    1356             :   // assuming that the tracks come from the vertex
    1357             :   // +/- fVertexSize in z-direction
    1358             : 
    1359           4 :   if (fgUseGTUconst) {
    1360          24 :     for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
    1361         324 :       for (Int_t iChannel = 0; iChannel < fGeo->GetRowMax(fgkFixLayer, iStack, 0); iChannel++) {
    1362        2128 :         for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
    1363       29856 :           for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
    1364       14016 :             if (fgZChannelMap[iStack][iChannel][iLayer][iRow] != 0) {
    1365        1880 :               fZChannelMap[iStack][iChannel][iLayer][iRow] = 1;
    1366        1880 :               fZSubChannel[iStack][iChannel % fgkNZChannels][iLayer][iRow] = iChannel / fgkNZChannels + 1;
    1367        1880 :             }
    1368             :           }
    1369             :         }
    1370             :       }
    1371             :     }
    1372             : 
    1373           2 :     return kTRUE;
    1374             :   }
    1375             :   else {
    1376             :     Int_t iSec = 0; // sector is irrelevant
    1377             :     Bool_t collision = kFALSE;
    1378             : 
    1379           0 :     for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
    1380             : 
    1381           0 :       Float_t x[6] = { 0 };
    1382           0 :       Float_t z[6][16] = {{ 0 }};
    1383           0 :       Float_t dZ[6][16] = {{ 0 }};
    1384             : 
    1385           0 :       for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
    1386           0 :         AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
    1387           0 :         x[iLayer]  = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ???
    1388           0 :         for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
    1389           0 :           z[iLayer][iRow]  = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad
    1390           0 :           dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction
    1391           0 :           for (Int_t i = 0; i < fgkNZChannels; i++)
    1392           0 :             fZSubChannel[iStack][i][iLayer][iRow] = 0;
    1393             :         }
    1394             :       }
    1395             : 
    1396           0 :       for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
    1397             : 
    1398           0 :         Double_t fixZmin = z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow];
    1399           0 :         Double_t fixZmax = z[fgkFixLayer][fixRow];
    1400           0 :         Double_t fixX    = x[fgkFixLayer] + 1.5; // ??? 1.5 from where?
    1401             : 
    1402           0 :         for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
    1403             :           Double_t leftZ, rightZ;
    1404             : 
    1405           0 :           if (iLayer <= fgkFixLayer) {
    1406           0 :             leftZ  = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
    1407           0 :             rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
    1408           0 :           }
    1409             :           else {
    1410           0 :             leftZ  = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize;
    1411           0 :             rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize;
    1412             :           }
    1413             : 
    1414             :           Double_t epsilon = 0.001;
    1415           0 :           for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) {
    1416           0 :             if ( (z[iLayer][iRow] )                    > (leftZ  + epsilon) &&
    1417           0 :                  (z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) {
    1418           0 :               fZChannelMap[iStack][fixRow][iLayer][iRow] = 1;
    1419           0 :               if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) {
    1420           0 :                 AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!");
    1421             :                 collision = kTRUE;
    1422           0 :               }
    1423             :               else
    1424           0 :                 fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1;
    1425             :             }
    1426             : 
    1427             :           }
    1428             :         }
    1429             :       }
    1430           0 :     }
    1431             : 
    1432           0 :     return ~collision;
    1433             :   }
    1434           2 : }
    1435             : 
    1436             : Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const
    1437             : {
    1438             :   // display the z-channel map
    1439             : 
    1440           0 :   if (zchannel >= fgkNZChannels) {
    1441           0 :     AliError("Invalid Z channel!");
    1442           0 :     return kFALSE;
    1443             :   }
    1444             : 
    1445           0 :   Int_t zchmin = zchannel >= 0 ? zchannel : 0;
    1446           0 :   Int_t zchmax = zchannel >= 0 ? zchannel + 1 : fgkNZChannels;
    1447             :   Int_t i = 0;
    1448             :   Int_t j = 0;
    1449           0 :   TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping");
    1450           0 :   c->cd();
    1451           0 :   TGraph **graphz = new TGraph*[fgkNZChannels];
    1452           0 :   for (Int_t zch = zchmin; zch < zchmax; zch++)
    1453           0 :     graphz[zch] = new TGraph;
    1454           0 :   TGraphAsymmErrors *graph = new TGraphAsymmErrors();
    1455           0 :   graph->SetTitle("Z-Channel Map");
    1456           0 :   graph->SetPoint(i, 0, 0); // vertex
    1457           0 :   graph->SetPointError(i++, 20, 20, 0, 0);
    1458             :   //  graph->SetRange //????
    1459           0 :   for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) {
    1460           0 :     for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
    1461           0 :       AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack);
    1462           0 :       for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) {
    1463           0 :         graph->SetPoint(i, pp->GetRowPos(iRow), fGeo->GetTime0(iLayer) - fGeo->CdrHght());
    1464           0 :         graph->SetPointError(i++, pp->GetRowSize(iRow), 0, 0, 0);
    1465           0 :         for (Int_t zch = zchmin; zch < zchmax; zch++)
    1466           0 :           if (fZSubChannel[iStack][zch][iLayer][iRow] != 0)
    1467           0 :             if (subchannel == 0 || fZSubChannel[iStack][zch][iLayer][iRow] == subchannel)
    1468           0 :               graphz[zch]->SetPoint(j++, pp->GetRowPos(iRow)  - pp->GetRowSize(iRow)/2, fGeo->GetTime0(iLayer) - fGeo->CdrHght());
    1469             :       }
    1470             :     }
    1471             :   }
    1472           0 :   graph->SetMarkerStyle(kDot);
    1473           0 :   graph->Draw("AP");
    1474           0 :   gROOT->Add(graph);
    1475           0 :   for (Int_t zch = zchmin; zch < zchmax; zch++) {
    1476           0 :     graphz[zch]->SetMarkerStyle(kCircle);
    1477           0 :     graphz[zch]->SetMarkerColor(zch+2);
    1478           0 :     graphz[zch]->SetMarkerSize(0.3 + zch*0.2);
    1479           0 :     graphz[zch]->Draw("P");
    1480           0 :     gROOT->Add(graphz[zch]);
    1481             :   }
    1482           0 :   delete [] graphz;
    1483             :   return kTRUE;
    1484           0 : }
    1485             : 
    1486             : Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const
    1487             : {
    1488             :   // get the constant for the calculation of alpha
    1489             : 
    1490         720 :   Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
    1491         360 :   return ci;
    1492             : }
    1493             : 
    1494             : Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const
    1495             : {
    1496             :   // get the constant for the calculation of y_proj
    1497             : 
    1498             :   Int_t ci = 0;
    1499             : 
    1500         720 :   if (fgUseGTUconst) {
    1501         360 :     Float_t xmid = (fgkRadius[0] + fgkRadius[5]) / 2.;
    1502         360 :     ci = TMath::Nint(- (fgkRadius[layer] - xmid) * fgkBinWidthdY / (fgkBinWidthY * fgkThickness) * (1 << GetBitExcessYProj()));
    1503         360 :   } else {
    1504           0 :     Float_t xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.;
    1505           0 :     ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) );
    1506             :   }
    1507             : 
    1508         360 :   return ci;
    1509             : }
    1510             : 
    1511             : Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const
    1512             : {
    1513             :   // return yt for the calculation of y'
    1514             : 
    1515             :   Int_t yt = 0;
    1516             : 
    1517        1080 :   if (fgUseGTUconst) {
    1518        1080 :     yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
    1519         720 :                           GetZrow(stack, layer, zrow) * TMath::Tan(- 2./180. * TMath::Pi()) / fgkBinWidthY ));
    1520         360 :   } else {
    1521           0 :     yt = TMath::Nint (- ( (layer % 2 ? 1. : -1.) *
    1522           0 :                           (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2.) *
    1523           0 :                           TMath::Tan(- 2./180. * TMath::Pi()) ) / fgkBinWidthY );
    1524             :   }
    1525             : 
    1526         360 :   return yt;
    1527             : }
    1528             : 
    1529             : Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask)
    1530             : {
    1531             :   // calculate the coefficients for the straight line fit
    1532             :   // depending on the mask of contributing tracklets
    1533             : 
    1534          28 :   fCurrTrackletMask = trackletMask;
    1535             : 
    1536          14 :   TMatrix a(GetNLayers(), 3);
    1537          14 :   TMatrix b(3, GetNLayers());
    1538          14 :   TMatrix c(3, 3);
    1539             : 
    1540             :   const Int_t maskIdLut[64] = {
    1541             :     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  0,
    1542             :     -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  2, -1,  3,  4,  5,
    1543             :     -1, -1, -1, -1, -1, -1, -1,  6, -1, -1, -1,  7, -1,  8,  9, 10,
    1544             :     -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
    1545             :   };
    1546             : 
    1547             :   const Int_t c1Lut[32] = {
    1548             :     -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
    1549             :     -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
    1550             :     -2670, -2557, -2763, -2557, -2644, -2523,    -1,    -1,
    1551             :     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
    1552             :   };
    1553             :   /* correction factor for sagitta (not used at the moment)
    1554             :   const Float_t epsCorrLut[32] = {
    1555             :     1.12499, 1.18589, 1.18516, 1.18447, 1.12499, 1.06665, 1.30387, 1.15774,
    1556             :     1.15741, 1.18596, 1.09696, 1.30201, 1.15703, 1.18516, 1.09662, 1.130026,
    1557             :     1.18443, 1.09630, 1.12499, 1.09600, 1.06665, 1.04164,      -1,      -1,
    1558             :     -1,      -1,      -1,      -1,      -1,      -1,      -1,      -1
    1559             :   };*/ 
    1560             : 
    1561          14 :   Int_t layerMaskId = maskIdLut[trackletMask];
    1562          14 :   Int_t c1 = c1Lut[layerMaskId];
    1563             :   //Float_t epsCorr = epsCorrLut[layerMaskId];
    1564             : 
    1565          14 :   fc1Inv = -GetShiftLengthNorm()/c1;
    1566             : 
    1567             :   Int_t firstHitLayer = 0 ,lastHitLayer = 5;
    1568          34 :   while ((trackletMask & (1 << firstHitLayer)) == 0) {
    1569           6 :     firstHitLayer++;
    1570           6 :     if (firstHitLayer >= 3) {
    1571           0 :       AliError(Form("Invalid tracklet mask: %i", trackletMask));
    1572             :       break;
    1573             :     }
    1574             :   }
    1575          19 :   while ((trackletMask & (1 << lastHitLayer)) == 0) {
    1576           5 :     lastHitLayer--;
    1577           5 :     if (lastHitLayer < 3) {
    1578           0 :       AliError(Form("Invalid tracklet mask: %i", trackletMask));
    1579             :       break;
    1580             :     }
    1581             :   }  
    1582          14 :   Float_t dX = fGeo->Cheight() + fGeo->Cspace(); // distance between two consecutive layers
    1583          14 :   fLengthNorm = (Int_t) (-4e3 * dX/ TMath::Power(((lastHitLayer - firstHitLayer) * dX), 3) * GetShiftLengthNorm() * GetBinWidthY());
    1584             :   //fLengthNorm *= epsCorr;
    1585             : 
    1586          14 :   CalculatePrefactors(trackletMask);
    1587             : 
    1588         196 :   for (Int_t layer = 0; layer < GetNLayers(); layer++) {
    1589          84 :       if ( (trackletMask & (1 << layer)) == 0) {
    1590          32 :     a(layer, 0) = 0;
    1591          32 :     a(layer, 1) = 0;
    1592          32 :     a(layer, 2) = 0;
    1593          16 :       }
    1594             :       else {
    1595         136 :           a(layer, 0) = 1;
    1596         136 :           a(layer, 1) = fGeo->GetTime0(layer);
    1597         136 :           a(layer, 2) = (layer % 2 ? 1 : -1) * fGeo->GetTime0(layer);
    1598             :       }
    1599             :   }
    1600             : 
    1601          14 :   b.Transpose(a);
    1602          42 :   c = b * a;
    1603          14 :   c.InvertFast();
    1604          42 :   b = c * b;
    1605             : 
    1606         196 :   for (Int_t layer = 0; layer < GetNLayers(); layer++) {
    1607          84 :       fAki[layer] = b.GetMatrixArray()[layer];
    1608          84 :       fBki[layer] = b.GetMatrixArray()[GetNLayers() + layer];
    1609          84 :       fCki[layer] = b.GetMatrixArray()[2 * GetNLayers() + layer];
    1610             :     }
    1611             :   return kTRUE;
    1612          14 : }
    1613             : 
    1614             : Bool_t AliTRDgtuParam::CalculatePrefactors(Int_t trackletMask)
    1615             : {
    1616          28 :   fPki[0] = -4;
    1617          14 :   fPki[1] =  2;
    1618          14 :   fPki[2] =  2;
    1619          14 :   fPki[3] =  2;
    1620          14 :   fPki[4] =  2;
    1621          14 :   fPki[5] = -4;
    1622             :   Int_t firstHitLayer = 0;
    1623          14 :   Int_t lastHitLayer = GetNLayers()-1;
    1624         196 :   for (Int_t layer = 0; layer <= lastHitLayer; ++layer) {
    1625          84 :       if ( (trackletMask & (1 << layer)) == 0) {
    1626          16 :         fPki[layer] = 0;
    1627          16 :         if (layer == firstHitLayer){
    1628           6 :           fPki[lastHitLayer]++;
    1629           6 :           fPki[layer+1] = fPki[lastHitLayer];
    1630           6 :           firstHitLayer++;
    1631           6 :         }
    1632          10 :         else if (layer == lastHitLayer){
    1633           5 :           fPki[firstHitLayer]++;
    1634           5 :           if (fPki[layer-1] != 0) {
    1635           5 :             fPki[layer-1] = fPki[firstHitLayer];
    1636           5 :             if (fPki[firstHitLayer+1] == 0) {
    1637           0 :               --fPki[layer-1];
    1638           0 :             }
    1639             :           }
    1640           5 :           if (fPki[layer-1] == 0){
    1641           0 :             fPki[firstHitLayer]++; 
    1642           0 :             fPki[layer-2] = fPki[firstHitLayer];
    1643           0 :           }
    1644           5 :           if (fPki[layer-2] == 0) {
    1645           1 :             fPki[layer-1]++;
    1646           1 :           }
    1647             :         }
    1648           5 :         else if (fPki[layer-1] == 0){
    1649           0 :           fPki[layer-2]++;
    1650           0 :           fPki[layer+1] += 2;
    1651           0 :         }
    1652             :         else {
    1653           5 :           fPki[layer-1]++;
    1654           5 :           fPki[layer+1]++;
    1655             :         }
    1656             :     }
    1657             :   }
    1658          14 :   return kTRUE;
    1659             : }
    1660             : 
    1661             : Int_t AliTRDgtuParam::GetAki(Int_t k, Int_t i)
    1662             : {
    1663             :   // get A_ki for the calculation of the tracking parameters
    1664         146 :   if (fgUseGTUconst) {
    1665          73 :     Int_t maskId = fgkMaskID[k];
    1666          73 :     return fgkAcoeff[maskId][i];
    1667             :   } else {
    1668           0 :     if (fCurrTrackletMask != k)
    1669           0 :       GenerateRecoCoefficients(k);
    1670           0 :     return -(((Int_t) fAki[i]) << 9);
    1671             :   }
    1672          73 : }
    1673             : 
    1674             : Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i)
    1675             : {
    1676             :   // get B_ki for the calculation of the tracking parameters
    1677             : 
    1678         146 :   if (fCurrTrackletMask != k)
    1679          14 :     GenerateRecoCoefficients(k);
    1680             : 
    1681          73 :   return fBki[i];
    1682             : }
    1683             : 
    1684             : Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i)
    1685             : {
    1686             :   // get B_ki for the calculation of the tracking parameters
    1687             : 
    1688         146 :   if (fCurrTrackletMask != k)
    1689           0 :     GenerateRecoCoefficients(k);
    1690             : 
    1691          73 :   return fCki[i];
    1692             : }
    1693             : 
    1694             : Int_t AliTRDgtuParam::GetPki(Int_t k, Int_t i)
    1695             : {
    1696             :   // get P_ki for the calculation of the sagitta
    1697         292 :   if (fCurrTrackletMask != k)
    1698           0 :     GenerateRecoCoefficients(k);
    1699         146 :   return fPki[i];
    1700             : }
    1701             : 
    1702             : Int_t AliTRDgtuParam::GetLengthNorm(Int_t k)
    1703             : {
    1704             :   // get length normalization to obtain 1/pt from sagitta
    1705          60 :   if (fCurrTrackletMask != k)
    1706           0 :     GenerateRecoCoefficients(k);
    1707          30 :   return fLengthNorm;
    1708             : }
    1709             : 
    1710             : Int_t AliTRDgtuParam::Getc1Inv(Int_t k)
    1711             : {
    1712             :   // get invers c1 for mask independent cut on pt deviation
    1713          30 :   if (fCurrTrackletMask != k)
    1714           0 :     GenerateRecoCoefficients(k);
    1715          15 :   return fc1Inv;
    1716             : }
    1717             : 
    1718             : /*
    1719             : Float_t AliTRDgtuParam::GetD(Int_t k) const
    1720             : {
    1721             :   // get the determinant for the calculation of the tracking parameters
    1722             : 
    1723             :   TMatrix t(3, 3);
    1724             :   for (Int_t i = 0; i < GetNLayers(); i++) {
    1725             :     if ( !((k >> i) & 0x1) )
    1726             :       continue;
    1727             :     Float_t xi = fGeo->GetTime0(i);
    1728             :     t(0,0) += 1;
    1729             :     t(1,0) += xi;
    1730             :     t(2,0) += TMath::Power(-1, i) * xi;
    1731             :     t(0,1) += xi;
    1732             :     t(1,1) += TMath::Power(xi, 2);
    1733             :     t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
    1734             :     t(0,2) += TMath::Power(-1, i) * xi;
    1735             :     t(1,2) += TMath::Power(-1, i) * TMath::Power(xi, 2);
    1736             :     t(2,2) += TMath::Power(xi, 2);
    1737             :   }
    1738             :   return t.Determinant();
    1739             : }
    1740             : 
    1741             : Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k)
    1742             : {
    1743             :   // calculate the fitting parameters
    1744             :   // will be changed!
    1745             : 
    1746             :   TMatrix t(3,3);
    1747             :   for (Int_t i = 0; i < GetNLayers(); i++) {
    1748             :     if ( !((k >> i) & 0x1) )
    1749             :       continue;
    1750             :     Float_t xi = fGeo->GetTime0(i);
    1751             :     t(0,0) += 1;
    1752             :     t(1,0) += xi;
    1753             :     t(2,0) += TMath::Power(-1, i) * xi;
    1754             :     t(0,1) += xi;
    1755             :     t(1,1) += TMath::Power(xi, 2);
    1756             :     t(2,1) += TMath::Power(-1, i) * TMath::Power(xi, 2);
    1757             :     t(0,2) -= TMath::Power(-1, i) * xi;
    1758             :     t(1,2) -= TMath::Power(-1, i) * TMath::Power(xi, 2);
    1759             :     t(2,2) -= TMath::Power(xi, 2);
    1760             :   }
    1761             :   TDecompLU lr(t);
    1762             :   lr.Solve(rhs);
    1763             :   return lr.Decompose();
    1764             : }
    1765             : */
    1766             : 
    1767             : Int_t AliTRDgtuParam::GetZpos(Int_t stack, Int_t layer, Int_t binZ)
    1768             : {
    1769             : 
    1770         292 :     if ( (layer<0) || (layer>5) )
    1771             :     {
    1772           0 :       AliError(Form("Wrong layer index %i\n", layer));
    1773           0 :       return 9999;
    1774             :     }
    1775         146 :     if ( (stack<0) || (stack>4) )
    1776             :     {
    1777           0 :       AliError(Form("Wrong stack index %i\n", stack));
    1778           0 :       return 9999;
    1779             :     }
    1780         146 :     if ( (binZ<0) || (binZ>15) )  
    1781             :     {
    1782           0 :       AliError(Form("Wrong binZ index %i\n", binZ));
    1783           0 :       return 9999;
    1784             :     }
    1785         146 :     if ( (stack==2) && (binZ>11) )
    1786             :     {
    1787           0 :       AliError(Form("Wrong binZ index %i\n for stack 2", binZ));
    1788           0 :       return 9999;
    1789             :     }
    1790             : 
    1791         146 :     return fgkZposLookupTable[stack][layer][binZ]*10;
    1792         146 : }
    1793             : 
    1794             : Int_t AliTRDgtuParam::GetTanOfTiltingAngle(Int_t layer)
    1795             : {
    1796             :   //Float_t erg = TMath::Tan(2*TMath::DegToRad());
    1797             :   Float_t erg = 0.034920769;
    1798             :   erg *= 1e4;
    1799         146 :   return (layer%2==0)? erg:-1.*erg;
    1800             : }
    1801             : 
    1802             : Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2)
    1803             : {
    1804             :   // get the x-coord. of the assumed circle/straight line intersection points
    1805             : 
    1806             :   Int_t l1 = -1;
    1807             :   Int_t l2 = -1;
    1808             :   Int_t nHits = 0;
    1809         225 :   for (Int_t layer = 0; layer < GetNLayers(); layer++) {
    1810          90 :     if ( (k >> layer) & 0x1 ) {
    1811          73 :       if (l1 < 0)
    1812          15 :         l1 = layer;
    1813             :       l2 = layer;
    1814          73 :       nHits++;
    1815          73 :     }
    1816             :   }
    1817             : 
    1818          15 :   if ( (l1 >= 0) && (l2 >= 0) ) {
    1819          15 :     x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1);
    1820          15 :     x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1);
    1821          15 :     return kTRUE;
    1822             :   }
    1823             :   else
    1824           0 :     return kFALSE;
    1825          15 : }
    1826             : 
    1827             : Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2, Float_t magField)
    1828             : {
    1829             :   // returns 0.3 * B * 1/a (1/128 GeV/c)
    1830             :   // a : offset, b : slope (not used)
    1831             : 
    1832             :   // protect against division by zero, covers both cases
    1833          60 :   if ((a >> 2) == 0)
    1834           0 :     return fgkPtInfinity;
    1835             : 
    1836          30 :   if (fgUseGTUconst) {
    1837             :     //----- calculation as in the GTU ----
    1838             :     const Int_t maskIdLut[64] = {
    1839             :       -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  0,
    1840             :       -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  2, -1,  3,  4,  5,
    1841             :       -1, -1, -1, -1, -1, -1, -1,  6, -1, -1, -1,  7, -1,  8,  9, 10,
    1842             :       -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21
    1843             :     };
    1844             : 
    1845             :     const Int_t c1Lut[32] = {
    1846             :       -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578,
    1847             :       -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578,
    1848             :       -2670, -2557, -2763, -2557, -2644, -2523,    -1,    -1,
    1849             :       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
    1850             :     };
    1851             : 
    1852          30 :     Int_t layerMaskId = maskIdLut[layerMask];
    1853          30 :     Int_t c1 = c1Lut[layerMaskId];
    1854          30 :     Int_t c1Ext = c1 << 8;
    1855          30 :     Int_t ptRawStage4 = c1Ext / (a >> 2);
    1856             :     Int_t ptRawComb4 = ptRawStage4;
    1857          30 :     Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30;
    1858             : 
    1859          30 :     return ((Int_t) ptExtComb4/2);
    1860             :   }
    1861             :   else {
    1862             :     //----- simple calculation -----
    1863           0 :     Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
    1864             :     Float_t r = 0;
    1865           0 :     if ( (a >> 1) != 0)
    1866           0 :       r = (0.3 * magField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
    1867             : 
    1868           0 :     Int_t pt = (Int_t) (2 * r);
    1869           0 :     if (pt >= 0)
    1870           0 :       pt += 32;
    1871             :     else
    1872           0 :       pt -= 29;
    1873           0 :     pt /= 2;
    1874             :     return pt;
    1875             :   }
    1876          30 : }
    1877             : 
    1878             : Double_t AliTRDgtuParam::CorrectYforAlignmentOCDB(Int_t det, Double_t trklZpos)
    1879             : {
    1880         146 :   Double_t shiftCorrFactor=0;
    1881          73 :   Double_t rotationCorrFactor=0;
    1882             : 
    1883          73 :   GetYAlignmentDataOCDB(det, &shiftCorrFactor, &rotationCorrFactor);
    1884         146 :   return (trklZpos*TMath::Tan(rotationCorrFactor)) - shiftCorrFactor; 
    1885          73 : }
    1886             : 
    1887             : void AliTRDgtuParam::GetYAlignmentDataOCDB(Int_t chamber, Double_t *shiftCorrFactor, Double_t *rotationCorrFactor)
    1888             : {
    1889             :   const Double_t sm0AlignYShiftCorr[30]={0.950896, 0.879845, 1.09222, 0.973455, 1.07732, 1.09708, 0.800331, 0.810261, 0.957055, 1.01692, 0.995464, 0.911438, 0.749624, 0.862145, 0.929711, 1.00373, 0.970462, 1.07445, 0.869766, 0.99827, 1.03514, 1.16184, 1.10103, 1.13804, 0.850769, 0.970176, 0.957055, 1.00373, 1.05887, 1.11904};
    1890             :   const Double_t sm0AlignRotationCorr[30]={0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472, 0.000590472};
    1891             :   const Double_t sm1AlignYShiftCorr[30]={1.06036, 1.00293, 1.00074, 1.16708, 1.2733, 1.12067, 0.953733, 0.913071, 0.955806, 0.988405, 1.06255, 0.991189, 0.849538, 0.951239, 0.963683, 0.981054, 1.03524, 0.789439, 0.861432, 0.999114, 0.967925, 1.04253, 1.16334, 1.14535, 0.793966, 0.905693, 0.786929, 0.942292, 1.01108, 1.08596};
    1892             :   const Double_t sm1AlignRotationCorr[30]={-0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439, -0.000106439};
    1893             :   const Double_t sm2AlignYShiftCorr[30]={1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412, 1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412, 1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412, 1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412, 1.1102, 1.0764, 1.0426, 1.0088, 0.975, 0.9412};
    1894             :   const Double_t sm2AlignRotationCorr[30]={6.08449e-17, 6.0845e-17, 6.0959e-17, 6.10827e-17, 6.15405e-17, 6.09767e-17, 6.08287e-17, 6.08287e-17, 6.0964e-17, 6.09122e-17, 6.08748e-17, 6.10829e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.07456e-17, 6.07456e-17, 6.07133e-17, 6.07628e-17, 6.10402e-17, 6.13227e-17, 6.08112e-17, 6.08112e-17, 6.17087e-17, 6.17742e-17, 6.15405e-17, 6.11445e-17};
    1895             :   const Double_t sm3AlignYShiftCorr[30]={1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768, 1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768, 1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768, 1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768, 1.18864, 1.21645, 1.24426, 1.27207, 1.29988, 1.32768};
    1896             :   const Double_t sm3AlignRotationCorr[30]={6.13935e-17, 6.13935e-17, 6.17901e-17, 6.1582e-17, 6.15405e-17, 6.13146e-17, 6.17313e-17, 6.17313e-17, 6.17758e-17, 6.18921e-17, 6.20216e-17, 6.14961e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.11756e-17, 6.08427e-17, 6.08431e-17, 6.09689e-17, 6.09122e-17, 6.0969e-17, 6.04721e-17, 6.08659e-17, 6.08659e-17, 6.10143e-17, 6.12837e-17, 6.10952e-17, 6.10829e-17};
    1897             :   const Double_t sm4AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1898             :   const Double_t sm4AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1899             :   const Double_t sm5AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1900             :   const Double_t sm5AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1901             :   const Double_t sm6AlignYShiftCorr[30]={0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601, 0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601, 0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601, 0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601, 0.00720092, -0.0111113, -0.0294235, -0.0477357, -0.0660479, -0.0843601};
    1902             :   const Double_t sm6AlignRotationCorr[30]={6.12302e-17, 6.12334e-17, 6.12366e-17, 6.12076e-17, 6.12421e-17, 6.12893e-17, 6.12346e-17, 6.12342e-17, 6.12414e-17, 6.12159e-17, 6.12642e-17, 6.12702e-17, 6.12287e-17, 6.12287e-17, 6.12464e-17, 6.12464e-17, 6.12142e-17, 6.12142e-17, 6.12341e-17, 6.12341e-17, 6.12248e-17, 6.12159e-17, 6.1188e-17, 6.13011e-17, 6.12335e-17, 6.12338e-17, 6.12228e-17, 6.12636e-17, 6.12173e-17, 6.13038e-17};
    1903             :   const Double_t sm7AlignYShiftCorr[30]={-0.866054, -0.946888, -0.936051, -1.04962, -0.99742, -1.11695, -0.871263, -0.866588, -0.872928, -0.994759, -0.960582, -1.02686, -0.840704, -0.920968, -0.983293, -0.985986, -1.03693, -0.990354, -0.841495, -0.898174, -0.977235, -0.864823, -0.960582, -1.04184, -0.774481, -0.740641, -0.901039, -0.813138, -0.958083, -0.844561};
    1904             :   const Double_t sm7AlignRotationCorr[30]={0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095, 0.00152095};
    1905             :   const Double_t sm8AlignYShiftCorr[30]={-1.08741, -1.04946, -1.13455, -1.25708, -1.14229, -1.12472, -1.04684, -1.06298, -1.04691, -1.01174, -1.02042, -1.068, -1.12634, -1.13846, -1.14718, -1.23131, -1.1225, -1.13288, -1.03394, -0.997171, -1.09563, -1.06354, -0.954007, -0.918441, -1.00773, -1.04946, -1.03248, -0.914811, -0.912203, -0.827483};
    1906             :   const Double_t sm8AlignRotationCorr[30]={0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878, 0.000844878};
    1907             :   const Double_t sm9AlignYShiftCorr[30]={-0.997909, -1.14595, -1.10428, -1.04842, -1.03343, -1.18205, -1.0511, -1.12617, -1.08041, -1.09323, -1.11159, -1.19614, -1.09481, -1.10916, -1.1128, -1.14028, -1.16596, -1.07021, -1.04761, -1.00465, -1.14669, -1.05859, -1.05879, -1.11359, -0.89919, -0.935687, -1.12952, -0.99086, -1.01247, -0.994654};
    1908             :   const Double_t sm9AlignRotationCorr[30]={0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181, 0.000224181};
    1909             :   const Double_t sm10AlignYShiftCorr[30]={-1.36423, -1.46127, -1.42239, -1.4497, -1.25872, -1.23821, -1.38106, -1.42123, -1.39686, -1.3602, -1.24536, -1.26131, -1.50418, -1.38895, -1.33199, -1.34877, -1.28903, -1.259, -1.41907, -1.30094, -1.3579, -1.21426, -1.21636, -1.06847, -1.44013, -1.21849, -1.32739, -1.20238, -1.21579, -1.06474};
    1910             :   const Double_t sm10AlignRotationCorr[30]={0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463, 0.000120463};
    1911             :   const Double_t sm11AlignYShiftCorr[30]={-1.31965, -1.54112, -1.47852, -1.64944, -4.4449, -1.80533, -1.35592, -1.4903, -1.54163, -1.5559, -1.58468, -1.74079, -1.51473, -1.53837, -1.6997, -1.7125, -1.81951, -1.92436, -1.45354, -1.39703, -1.63136, -1.53742, -1.61779, -1.71032, -1.338, -1.21635, -1.42423, -1.40279, -1.43874, -1.42863};
    1912             :   const Double_t sm11AlignRotationCorr[30]={0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076, 0.000348076};
    1913             :   const Double_t sm12AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1914             :   const Double_t sm12AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1915             :   const Double_t sm13AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1916             :   const Double_t sm13AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1917             :   const Double_t sm14AlignYShiftCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1918             :   const Double_t sm14AlignRotationCorr[30]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    1919             :   const Double_t sm15AlignYShiftCorr[30]={0.0615559, 0.0761089, 0.244263, 0.193727, 0.278576, 0.199347, 0.0354735, -0.007305, 0.087983, 0.0648831, 0.136816, 0.0515244, 0, 0, 0, 0, 0, 0, 0.0602967, 0.0983063, 0.183299, 0.269317, 0.239239, 0.311994, 0.0413288, 0.0937568, 0.164063, 0.263629, 0.220605, 0.314462};
    1920             :   const Double_t sm15AlignRotationCorr[30]={-0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, 0, 0, 0, 0, 0, 0, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365, -0.000268365};
    1921             :   const Double_t sm16AlignYShiftCorr[30]={0.410348, 0.404458, 0.570151, 0.56562, 0.669698, 0.595227, 0.366881, 0.251549, 0.433893, 0.505892, 0.582798, 0.546805, 0.288368, 0.291832, 0.37178, 0.511245, 0.535215, 0.519403, 0.30927, 0.379342, 0.492418, 0.604519, 0.567487, 0.689209, 0.164414, 0.290361, 0.323621, 0.458511, 0.495891, 0.56392};
    1922             :   const Double_t sm16AlignRotationCorr[30]={-0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037, -0.000209037};
    1923             :   const Double_t sm17AlignYShiftCorr[30]={0.924637, 0.830734, 0.851936, 0.925559, 1.05194, 0.644287, 0.861304, 0.773108, 0.837512, 0.851351, 0.898791, 0.833368, 0.797453, 0.769815, 0.851936, 0.917353, 0.898791, 0.853596, 0.771743, 0.805229, 0.855267, 0.989788, 0.898791, 0.922218, 0.634823, 0.792299, 0.806066, 1.01563, 0.970954, 0.922218};
    1924             :   const Double_t sm17AlignRotationCorr[30]={8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05, 8.41898e-05};
    1925             : 
    1926         146 :   const Double_t *alignYShiftCorr[18];
    1927          73 :   const Double_t *alignRotationCorr[18];
    1928          73 :   alignYShiftCorr[0] = sm0AlignYShiftCorr;
    1929          73 :   alignRotationCorr[0] = sm0AlignRotationCorr;
    1930          73 :   alignYShiftCorr[1] = sm1AlignYShiftCorr;
    1931          73 :   alignRotationCorr[1] = sm1AlignRotationCorr;
    1932          73 :   alignYShiftCorr[2] = sm2AlignYShiftCorr;
    1933          73 :   alignRotationCorr[2] = sm2AlignRotationCorr;
    1934          73 :   alignYShiftCorr[3] = sm3AlignYShiftCorr;
    1935          73 :   alignRotationCorr[3] = sm3AlignRotationCorr;
    1936          73 :   alignYShiftCorr[4] = sm4AlignYShiftCorr;
    1937          73 :   alignRotationCorr[4] = sm4AlignRotationCorr;
    1938          73 :   alignYShiftCorr[5] = sm5AlignYShiftCorr;
    1939          73 :   alignRotationCorr[5] = sm5AlignRotationCorr;
    1940          73 :   alignYShiftCorr[6] = sm6AlignYShiftCorr;
    1941          73 :   alignRotationCorr[6] = sm6AlignRotationCorr;
    1942          73 :   alignYShiftCorr[7] = sm7AlignYShiftCorr;
    1943          73 :   alignRotationCorr[7] = sm7AlignRotationCorr;
    1944          73 :   alignYShiftCorr[8] = sm8AlignYShiftCorr;
    1945          73 :   alignRotationCorr[8] = sm8AlignRotationCorr;
    1946          73 :   alignYShiftCorr[9] = sm9AlignYShiftCorr;
    1947          73 :   alignRotationCorr[9] = sm9AlignRotationCorr;
    1948          73 :   alignYShiftCorr[10] = sm10AlignYShiftCorr;
    1949          73 :   alignRotationCorr[10] = sm10AlignRotationCorr;
    1950          73 :   alignYShiftCorr[11] = sm11AlignYShiftCorr;
    1951          73 :   alignRotationCorr[11] = sm11AlignRotationCorr;
    1952          73 :   alignYShiftCorr[12] = sm12AlignYShiftCorr;
    1953          73 :   alignRotationCorr[12] = sm12AlignRotationCorr;
    1954          73 :   alignYShiftCorr[13] = sm13AlignYShiftCorr;
    1955          73 :   alignRotationCorr[13] = sm13AlignRotationCorr;
    1956          73 :   alignYShiftCorr[14] = sm14AlignYShiftCorr;
    1957          73 :   alignRotationCorr[14] = sm14AlignRotationCorr;
    1958          73 :   alignYShiftCorr[15] = sm15AlignYShiftCorr;
    1959          73 :   alignRotationCorr[15] = sm15AlignRotationCorr;
    1960          73 :   alignYShiftCorr[16] = sm16AlignYShiftCorr;
    1961          73 :   alignRotationCorr[16] = sm16AlignRotationCorr;
    1962          73 :   alignYShiftCorr[17] = sm17AlignYShiftCorr;
    1963          73 :   alignRotationCorr[17] = sm17AlignRotationCorr;
    1964             : 
    1965          73 :   Int_t sm=chamber/30;
    1966          73 :   Int_t det=chamber%30;
    1967          73 :   *shiftCorrFactor=alignYShiftCorr[sm][det];
    1968          73 :   *rotationCorrFactor=alignRotationCorr[sm][det];
    1969          73 : }
    1970             : 
    1971             : 

Generated by: LCOV version 1.11