X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDgtuParam.cxx;h=7243ff09596cf15b3b0390e094ffd01950e7bf4a;hb=eaa858271b434a3e7a3d0eb1c277ce829550f5c3;hp=9c66775cac3b8ce226e2a807c36377756ff94ff7;hpb=52c1902213afe6d83b1e31c66bb5bb986db0518d;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDgtuParam.cxx b/TRD/AliTRDgtuParam.cxx index 9c66775cac3..7243ff09596 100644 --- a/TRD/AliTRDgtuParam.cxx +++ b/TRD/AliTRDgtuParam.cxx @@ -23,6 +23,7 @@ // // //////////////////////////////////////////////////////////////////////////// +#include "TROOT.h" #include "TMath.h" #include "TMatrix.h" #include "TDecompLU.h" @@ -37,6 +38,13 @@ ClassImp(AliTRDgtuParam) AliTRDgtuParam *AliTRDgtuParam::fgInstance = 0; +Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE; + +// ----- matching windows ----- + Int_t AliTRDgtuParam::fgDeltaY = 19; + Int_t AliTRDgtuParam::fgDeltaAlpha = 21; +// ----- reference layers ----- + Int_t AliTRDgtuParam::fgRefLayers[] = { 3, 2, 1 }; // ----- Bin widths (granularity) ----- const Float_t AliTRDgtuParam::fgkBinWidthY = 160e-4; @@ -44,56 +52,1182 @@ const Float_t AliTRDgtuParam::fgkBinWidthdY = 140e-4; // ----- Bit widths (used for internal representation) ----- const Int_t AliTRDgtuParam::fgkBitWidthY = 13; -const Int_t AliTRDgtuParam::fgkBitWidthdY = 7; +const Int_t AliTRDgtuParam::fgkBitWidthdY = 7; const Int_t AliTRDgtuParam::fgkBitWidthYProj = 10; -const Int_t AliTRDgtuParam::fgkBitExcessY = 4; -const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10; -const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2; +const Int_t AliTRDgtuParam::fgkBitExcessY = 4; +const Int_t AliTRDgtuParam::fgkBitExcessAlpha = 10; +const Int_t AliTRDgtuParam::fgkBitExcessYProj = 2; -// ----- Tracking parameters ----- -/* -const Int_t AliTRDgtuParam::fgkNZChannels = 3; // No. of z-channels -const Int_t AliTRDgtuParam::fgkNLinks = 12; // No. of links -const Int_t AliTRDgtuParam::fgkFixLayer = 2; // which layer is fixed for the generation of the z-channel map -const Int_t AliTRDgtuParam::fgkDeltaY = 39; // accepted deviation in y_proj, default: 9 -const Int_t AliTRDgtuParam::fgkDeltaAlpha = 31; // accepted deviation in alpha, default: 11 -const Int_t AliTRDgtuParam::fgkNRefLayers = 3; // no. of reference layers -*/ +// ----- z-channel tables ----- +const Bool_t AliTRDgtuParam::fgZChannelMap[5][16][6][16] = { + +{ /* --- Stack 0 --- */ + +/* . x x . . . . . . . . . . . . . */ +/* x . . . . . . . . . . . . . . . */ +/* X . . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* x . . . . . . . . . . . . . . . */ + +{{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . x x . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* . X . . . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ + +{{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . x x . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ +/* . . X . . . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ + +{{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . x x . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ +/* . . . X . . . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ + +{{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . x x . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ +/* . . . . X . . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ + +{{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . x x . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ +/* . . . . . X . . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . x x . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ +/* . . . . . . X . . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . x x x . . . . . . . */ +/* . . . . . . . X . . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . x x x . . . . . */ +/* . . . . . . . x x x . . . . . . */ +/* . . . . . . . . X . . . . . . . */ +/* . . . . . . . x x x . . . . . . */ +/* . . . . . . . x x x . . . . . . */ +/* . . . . . . . x x . . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . . x x x . . . . */ +/* . . . . . . . . x x x . . . . . */ +/* . . . . . . . . . X . . . . . . */ +/* . . . . . . . . x x x . . . . . */ +/* . . . . . . . . x x x . . . . . */ +/* . . . . . . . . x x . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . . . x x x . . . */ +/* . . . . . . . . . x x x . . . . */ +/* . . . . . . . . . . X . . . . . */ +/* . . . . . . . . . x x x . . . . */ +/* . . . . . . . . . x x x . . . . */ +/* . . . . . . . . . x x . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . . . . x x x . . */ +/* . . . . . . . . . . x x x . . . */ +/* . . . . . . . . . . . X . . . . */ +/* . . . . . . . . . . x x x . . . */ +/* . . . . . . . . . . x x x . . . */ +/* . . . . . . . . . . x x . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}}, + +/* . . . . . . . . . . . . x x x . */ +/* . . . . . . . . . . . x x x . . */ +/* . . . . . . . . . . . . X . . . */ +/* . . . . . . . . . . . x x x . . */ +/* . . . . . . . . . . . x x x . . */ +/* . . . . . . . . . . . x x . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}}, + +/* . . . . . . . . . . . . . x x x */ +/* . . . . . . . . . . . . x x x . */ +/* . . . . . . . . . . . . . X . . */ +/* . . . . . . . . . . . . x x x . */ +/* . . . . . . . . . . . . x x x . */ +/* . . . . . . . . . . . . x x . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}}, + +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . x x x */ +/* . . . . . . . . . . . . . . X . */ +/* . . . . . . . . . . . . . x x x */ +/* . . . . . . . . . . . . . x x x */ +/* . . . . . . . . . . . . . x x . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}}, + +/* . . . . . . . . . . . . . . . x */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . . X */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . x x */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}}, + +{ /* --- Stack 1 --- */ + +/* x x x . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* X . . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* x . . . . . . . . . . . . . . . */ + +{{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . x x x . . . . . . . . . . . . */ +/* x x x . . . . . . . . . . . . . */ +/* . X . . . . . . . . . . . . . . */ +/* x x x . . . . . . . . . . . . . */ +/* x x x . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ + +{{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . x x x . . . . . . . . . . . */ +/* . x x x . . . . . . . . . . . . */ +/* . . X . . . . . . . . . . . . . */ +/* . x x x . . . . . . . . . . . . */ +/* . x x x . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ + +{{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . x x x . . . . . . . . . . */ +/* . . x x x . . . . . . . . . . . */ +/* . . . X . . . . . . . . . . . . */ +/* . . x x x . . . . . . . . . . . */ +/* . . x x x . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ + +{{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . x x x . . . . . . . . . */ +/* . . . x x x . . . . . . . . . . */ +/* . . . . X . . . . . . . . . . . */ +/* . . . x x x . . . . . . . . . . */ +/* . . . x x x . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ + +{{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . x x x . . . . . . . . */ +/* . . . . x x x . . . . . . . . . */ +/* . . . . . X . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ + +{{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . x x x . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . X . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . X . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . X . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . X . . . . . . */ +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . x x . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . X . . . . . */ +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . x x . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . . . . x x . . . */ +/* . . . . . . . . . . . x x . . . */ +/* . . . . . . . . . . . X . . . . */ +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . x x . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}}, + +/* . . . . . . . . . . . . x x . . */ +/* . . . . . . . . . . . . x x . . */ +/* . . . . . . . . . . . . X . . . */ +/* . . . . . . . . . . . x x . . . */ +/* . . . . . . . . . . . x x . . . */ +/* . . . . . . . . . . . x x . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}}, + +/* . . . . . . . . . . . . . x x . */ +/* . . . . . . . . . . . . . x x . */ +/* . . . . . . . . . . . . . X . . */ +/* . . . . . . . . . . . . x x . . */ +/* . . . . . . . . . . . . x x . . */ +/* . . . . . . . . . . . . x x . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}}, + +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . X . */ +/* . . . . . . . . . . . . . x x . */ +/* . . . . . . . . . . . . . x x . */ +/* . . . . . . . . . . . . . x x . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}}, + +/* . . . . . . . . . . . . . . . x */ +/* . . . . . . . . . . . . . . . x */ +/* . . . . . . . . . . . . . . . X */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . x x */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}}, + +{ /* --- Stack 2 --- */ + +/* x x . . . . . . . . . . */ +/* x x . . . . . . . . . . */ +/* X . . . . . . . . . . . */ +/* x . . . . . . . . . . . */ +/* x . . . . . . . . . . . */ +/* x . . . . . . . . . . . */ + +{{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . x x . . . . . . . . . */ +/* . x x . . . . . . . . . */ +/* . X . . . . . . . . . . */ +/* x x . . . . . . . . . . */ +/* x x . . . . . . . . . . */ +/* x x . . . . . . . . . . */ + +{{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . x x . . . . . . . . */ +/* . . x x . . . . . . . . */ +/* . . X . . . . . . . . . */ +/* . x x . . . . . . . . . */ +/* . x x . . . . . . . . . */ +/* . x x . . . . . . . . . */ + +{{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . x x . . . . . . . */ +/* . . . x x . . . . . . . */ +/* . . . X . . . . . . . . */ +/* . . x x x . . . . . . . */ +/* . . x x x . . . . . . . */ +/* . . x x x . . . . . . . */ + +{{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . x x x . . . . . . */ +/* . . . x x x . . . . . . */ +/* . . . . X . . . . . . . */ +/* . . . x x x . . . . . . */ +/* . . . x x x . . . . . . */ +/* . . . x x x . . . . . . */ + +{{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . x x x . . . . . */ +/* . . . . x x x . . . . . */ +/* . . . . . X . . . . . . */ +/* . . . . x x x . . . . . */ +/* . . . . x x x . . . . . */ +/* . . . . x x x . . . . . */ + +{{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . x x x . . . . */ +/* . . . . . x x x . . . . */ +/* . . . . . . X . . . . . */ +/* . . . . . x x x . . . . */ +/* . . . . . x x x . . . . */ +/* . . . . . x x x . . . . */ + +{{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . x x x . . . */ +/* . . . . . . x x x . . . */ +/* . . . . . . . X . . . . */ +/* . . . . . . x x x . . . */ +/* . . . . . . x x x . . . */ +/* . . . . . . x x x . . . */ + +{{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . x x . . . */ +/* . . . . . . . x x . . . */ +/* . . . . . . . . X . . . */ +/* . . . . . . . x x x . . */ +/* . . . . . . . x x x . . */ +/* . . . . . . . x x x . . */ + +{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . x x . . */ +/* . . . . . . . . x x . . */ +/* . . . . . . . . . X . . */ +/* . . . . . . . . . x x . */ +/* . . . . . . . . . x x . */ +/* . . . . . . . . . x x . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . . x x . */ +/* . . . . . . . . . x x . */ +/* . . . . . . . . . . X . */ +/* . . . . . . . . . . x x */ +/* . . . . . . . . . . x x */ +/* . . . . . . . . . . x x */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}}, + +/* . . . . . . . . . . x x */ +/* . . . . . . . . . . x x */ +/* . . . . . . . . . . . X */ +/* . . . . . . . . . . . x */ +/* . . . . . . . . . . . x */ +/* . . . . . . . . . . . x */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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}}}, + +{ /* --- Stack 3 --- */ + +/* x . . . . . . . . . . . . . . . */ +/* x . . . . . . . . . . . . . . . */ +/* X . . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ + +{{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* x x . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* . X . . . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ + +{{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . x x . . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ +/* . . X . . . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ + +{{0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . x x . . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ +/* . . . X . . . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ + +{{0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . x x . . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ +/* . . . . X . . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ + +{{0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . x x . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ +/* . . . . . X . . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ + +{{0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . x x . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ +/* . . . . . . X . . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ + +{{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . . X . . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . . X . . . . . . . */ +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . x x . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . x x x . . . . . . */ +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . . X . . . . . . */ +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . x x . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . x x x . . . . . */ +/* . . . . . . . . . x x x . . . . */ +/* . . . . . . . . . . X . . . . . */ +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . x x . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}}, + +/* . . . . . . . . . x x x . . . . */ +/* . . . . . . . . . . x x x . . . */ +/* . . . . . . . . . . . X . . . . */ +/* . . . . . . . . . . x x x . . . */ +/* . . . . . . . . . . x x x . . . */ +/* . . . . . . . . . . . x x . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}}, + +/* . . . . . . . . . . x x x . . . */ +/* . . . . . . . . . . . x x x . . */ +/* . . . . . . . . . . . . X . . . */ +/* . . . . . . . . . . . x x x . . */ +/* . . . . . . . . . . . x x x . . */ +/* . . . . . . . . . . . . x x . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}}, + +/* . . . . . . . . . . . x x x . . */ +/* . . . . . . . . . . . . x x x . */ +/* . . . . . . . . . . . . . X . . */ +/* . . . . . . . . . . . . x x x . */ +/* . . . . . . . . . . . . x x x . */ +/* . . . . . . . . . . . . . x x . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}}, + +/* . . . . . . . . . . . . x x x . */ +/* . . . . . . . . . . . . . x x x */ +/* . . . . . . . . . . . . . . X . */ +/* . . . . . . . . . . . . . x x x */ +/* . . . . . . . . . . . . . x x x */ +/* . . . . . . . . . . . . . . x x */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}, + +/* . . . . . . . . . . . . . x x x */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . . X */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . . x */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}}, + +{ /* --- Stack 4 --- */ + +/* x . . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* X . . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ +/* x x . . . . . . . . . . . . . . */ + +{{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* x x . . . . . . . . . . . . . . */ +/* x x x . . . . . . . . . . . . . */ +/* . X . . . . . . . . . . . . . . */ +/* x x x . . . . . . . . . . . . . */ +/* x x x . . . . . . . . . . . . . */ +/* . x x . . . . . . . . . . . . . */ + +{{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* x x x . . . . . . . . . . . . . */ +/* . x x x . . . . . . . . . . . . */ +/* . . X . . . . . . . . . . . . . */ +/* . x x x . . . . . . . . . . . . */ +/* . x x x . . . . . . . . . . . . */ +/* . . x x . . . . . . . . . . . . */ + +{{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . x x x . . . . . . . . . . . . */ +/* . . x x x . . . . . . . . . . . */ +/* . . . X . . . . . . . . . . . . */ +/* . . x x x . . . . . . . . . . . */ +/* . . x x x . . . . . . . . . . . */ +/* . . . x x . . . . . . . . . . . */ + +{{0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . x x x . . . . . . . . . . . */ +/* . . . x x x . . . . . . . . . . */ +/* . . . . X . . . . . . . . . . . */ +/* . . . x x x . . . . . . . . . . */ +/* . . . x x x . . . . . . . . . . */ +/* . . . . x x . . . . . . . . . . */ + +{{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . x x x . . . . . . . . . . */ +/* . . . . x x x . . . . . . . . . */ +/* . . . . . X . . . . . . . . . . */ +/* . . . . x x x . . . . . . . . . */ +/* . . . . x x x . . . . . . . . . */ +/* . . . . . x x . . . . . . . . . */ + +{{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . x x x . . . . . . . . . */ +/* . . . . . x x x . . . . . . . . */ +/* . . . . . . X . . . . . . . . . */ +/* . . . . . x x x . . . . . . . . */ +/* . . . . . x x x . . . . . . . . */ +/* . . . . . . x x . . . . . . . . */ + +{{0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . x x x . . . . . . . . */ +/* . . . . . . x x x . . . . . . . */ +/* . . . . . . . X . . . . . . . . */ +/* . . . . . . x x x . . . . . . . */ +/* . . . . . . x x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ + +{{0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . x x . . . . . . . . */ +/* . . . . . . . x x x . . . . . . */ +/* . . . . . . . . X . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . . x x . . . . . . */ + +{{0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}}, + +/* . . . . . . . x x . . . . . . . */ +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . X . . . . . . */ +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . . x x . . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}}, + +/* . . . . . . . . x x . . . . . . */ +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . X . . . . . */ +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . . x x . . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}}, + +/* . . . . . . . . . x x . . . . . */ +/* . . . . . . . . . . . x x . . . */ +/* . . . . . . . . . . . X . . . . */ +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . . x x . . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}}, + +/* . . . . . . . . . . x x . . . . */ +/* . . . . . . . . . . . . x x . . */ +/* . . . . . . . . . . . . X . . . */ +/* . . . . . . . . . . . x x . . . */ +/* . . . . . . . . . . . x x . . . */ +/* . . . . . . . . . . . . x x . . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}}, + +/* . . . . . . . . . . . x x . . . */ +/* . . . . . . . . . . . . . x x . */ +/* . . . . . . . . . . . . . X . . */ +/* . . . . . . . . . . . . x x . . */ +/* . . . . . . . . . . . . x x . . */ +/* . . . . . . . . . . . . . x x . */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}}, + +/* . . . . . . . . . . . . x x . . */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . X . */ +/* . . . . . . . . . . . . . x x . */ +/* . . . . . . . . . . . . . x x . */ +/* . . . . . . . . . . . . . . x x */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}}, + +/* . . . . . . . . . . . . . x x . */ +/* . . . . . . . . . . . . . . . x */ +/* . . . . . . . . . . . . . . . X */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . x x */ +/* . . . . . . . . . . . . . . . x */ + +{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}}} + +}; AliTRDgtuParam::AliTRDgtuParam() : fVertexSize(20.0), fCurrTrackletMask(0), - fRefLayers(0x0), + fMagField(0.5), fGeo(0x0) { // default ctor fGeo = new AliTRDgeometry(); - fRefLayers = new Int_t[fgkNRefLayers]; - fRefLayers[0] = 3; - fRefLayers[1] = 2; - fRefLayers[2] = 1; - zChannelGen(); + for (Int_t iLayer = 0; iLayer < 6; iLayer++) { + fAki[iLayer] = 0.; + fBki[iLayer] = 0.; + fCki[iLayer] = 0.; + } + + GenerateZChannelMap(); } -AliTRDgtuParam::~AliTRDgtuParam() +AliTRDgtuParam::~AliTRDgtuParam() { // dtor delete fGeo; - delete [] fRefLayers; } -AliTRDgtuParam* AliTRDgtuParam::Instance() +AliTRDgtuParam* AliTRDgtuParam::Instance() { // get (or create) the single instance - if (fgInstance == 0) + if (fgInstance == 0) fgInstance = new AliTRDgtuParam(); return fgInstance; } -void AliTRDgtuParam::Terminate() +void AliTRDgtuParam::Terminate() { // destruct the instance @@ -103,7 +1237,7 @@ void AliTRDgtuParam::Terminate() } } -Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const +Bool_t AliTRDgtuParam::IsInZChannel(Int_t stack, Int_t layer, Int_t zchannel, Int_t zpos) const { return (fZSubChannel[stack][zchannel][layer][zpos] != 0); } @@ -113,84 +1247,104 @@ Int_t AliTRDgtuParam::GetZSubchannel(Int_t stack, Int_t layer, Int_t zchannel, I return fZSubChannel[stack][zchannel][layer][zpos]; } -Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx) const +Int_t AliTRDgtuParam::GetRefLayer(Int_t refLayerIdx) { + // returns the reference layer indexed by refLayerIdx + if (refLayerIdx >= 0 && refLayerIdx < fgkNRefLayers) - return fRefLayers[refLayerIdx]; - else + return fgRefLayers[refLayerIdx]; + else return -1; } -Int_t AliTRDgtuParam::zChannelGen() +Int_t AliTRDgtuParam::GenerateZChannelMap() { // generate the z-channel map - // assuming that the tracks come from the vertex + // assuming that the tracks come from the vertex // +/- fVertexSize in z-direction - Int_t iSec = 0; // sector is irrelevant - Bool_t collision = kFALSE; - - for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) { - - Float_t X[6] = { 0 }; - Float_t Z[6][16] = {{ 0 }}; - Float_t dZ[6][16] = {{ 0 }}; - - for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) { - AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack); - X[iLayer] = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ??? - for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) { - Z[iLayer][iRow] = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad - dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction - for (Int_t i = 0; i < fgkNZChannels; i++) - fZSubChannel[iStack][i][iLayer][iRow] = 0; + if (fgUseGTUconst) { + for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) { + for (Int_t iChannel = 0; iChannel < fGeo->GetRowMax(fgkFixLayer, iStack, 0); iChannel++) { + for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) { + for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, 0); iRow++) { + if (fgZChannelMap[iStack][iChannel][iLayer][iRow] != 0) { + fZChannelMap[iStack][iChannel][iLayer][iRow] = 1; + fZSubChannel[iStack][iChannel % fgkNZChannels][iLayer][iRow] = iChannel / fgkNZChannels + 1; + } + } + } } } - for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) { - - Double_t fixZmin = Z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow]; - Double_t fixZmax = Z[fgkFixLayer][fixRow]; - Double_t fixX = X[fgkFixLayer] + 1.5; // ??? 1.5 from where? + return kTRUE; + } + else { + Int_t iSec = 0; // sector is irrelevant + Bool_t collision = kFALSE; + + for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) { + + Float_t x[6] = { 0 }; + Float_t z[6][16] = {{ 0 }}; + Float_t dZ[6][16] = {{ 0 }}; for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) { - Double_t leftZ, rightZ; - - if (iLayer <= fgkFixLayer) { - leftZ = (fixZmin + fVertexSize) * (X[iLayer] + 1.5) / fixX - fVertexSize; - rightZ = (fixZmax - fVertexSize) * (X[iLayer] + 1.5) / fixX + fVertexSize; - } - else { - leftZ = (fixZmin - fVertexSize) * (X[iLayer] + 1.5) / fixX + fVertexSize; - rightZ = (fixZmax + fVertexSize) * (X[iLayer] + 1.5) / fixX - fVertexSize; - } - - Double_t epsilon = 0.001; + AliTRDpadPlane *pp = fGeo->GetPadPlane(iLayer, iStack); + x[iLayer] = fGeo->GetTime0(iLayer) - fGeo->CdrHght(); // ??? for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) { - if ( (Z[iLayer][iRow] ) > (leftZ + epsilon) && - (Z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) { - fZChannelMap[iStack][fixRow][iLayer][iRow] = 1; - if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) { - AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!"); - collision = kTRUE; - } - else - fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1; + z[iLayer][iRow] = pp->GetRowPos(iRow); // this is the right (pos. z-direction) border of the pad + dZ[iLayer][iRow] = pp->GetRowSize(iRow); // length of the pad in z-direction + for (Int_t i = 0; i < fgkNZChannels; i++) + fZSubChannel[iStack][i][iLayer][iRow] = 0; + } + } + + for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) { + + Double_t fixZmin = z[fgkFixLayer][fixRow] - dZ[fgkFixLayer][fixRow]; + Double_t fixZmax = z[fgkFixLayer][fixRow]; + Double_t fixX = x[fgkFixLayer] + 1.5; // ??? 1.5 from where? + + for (Int_t iLayer = 0; iLayer < fGeo->Nlayer(); iLayer++) { + Double_t leftZ, rightZ; + + if (iLayer <= fgkFixLayer) { + leftZ = (fixZmin + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize; + rightZ = (fixZmax - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize; + } + else { + leftZ = (fixZmin - fVertexSize) * (x[iLayer] + 1.5) / fixX + fVertexSize; + rightZ = (fixZmax + fVertexSize) * (x[iLayer] + 1.5) / fixX - fVertexSize; } + Double_t epsilon = 0.001; + for (Int_t iRow = 0; iRow < fGeo->GetRowMax(iLayer, iStack, iSec); iRow++) { + if ( (z[iLayer][iRow] ) > (leftZ + epsilon) && + (z[iLayer][iRow] - dZ[iLayer][iRow] ) < (rightZ - epsilon) ) { + fZChannelMap[iStack][fixRow][iLayer][iRow] = 1; + if (fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] != 0) { + AliError("Collision in Z-Channel assignment occured! No reliable tracking!!!"); + collision = kTRUE; + } + else + fZSubChannel[iStack][fixRow % fgkNZChannels][iLayer][iRow] = fixRow / fgkNZChannels + 1; + } + + } } } } - } - return ~collision; + return ~collision; + } } -Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const +Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) const { - // display the z-channel map + // display the z-channel map - if (zchannel > fgkNZChannels) { + if (zchannel >= fgkNZChannels) { AliError("Invalid Z channel!"); return kFALSE; } @@ -202,7 +1356,7 @@ Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) cons TCanvas *c = new TCanvas("zchmap", "Z-Chhannel Mapping"); c->cd(); TGraph **graphz = new TGraph*[fgkNZChannels]; - for (Int_t zch = zchmin; zch < zchmax; zch++) + for (Int_t zch = zchmin; zch < zchmax; zch++) graphz[zch] = new TGraph; TGraphAsymmErrors *graph = new TGraphAsymmErrors(); graph->SetTitle("Z-Channel Map"); @@ -224,41 +1378,47 @@ Bool_t AliTRDgtuParam::DisplayZChannelMap(Int_t zchannel, Int_t subchannel) cons } graph->SetMarkerStyle(kDot); graph->Draw("AP"); + gROOT->Add(graph); for (Int_t zch = zchmin; zch < zchmax; zch++) { graphz[zch]->SetMarkerStyle(kCircle); graphz[zch]->SetMarkerColor(zch+2); graphz[zch]->SetMarkerSize(0.3 + zch*0.2); graphz[zch]->Draw("P"); + gROOT->Add(graphz[zch]); } + delete [] graphz; return kTRUE; } -Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const +Int_t AliTRDgtuParam::GetCiAlpha(Int_t layer) const { // get the constant for the calculation of alpha - Int_t Ci = (Int_t) (GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) ); - return Ci; + Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) ); + return ci; } -Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const +Int_t AliTRDgtuParam::GetCiYProj(Int_t layer) const { // get the constant for the calculation of y_proj - Float_t Xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.; - Int_t Ci = (Int_t) (- (fGeo->GetTime0(layer) - Xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) ); - return Ci; + Float_t xmid = (fGeo->GetTime0(0) + fGeo->GetTime0(fGeo->Nlayer()-1)) / 2.; + Int_t ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) ); + return ci; } Int_t AliTRDgtuParam::GetYt(Int_t stack, Int_t layer, Int_t zrow) const { - return (Int_t) (- ( (layer % 2 ? 1 : -1) * - (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2) * + return (Int_t) (- ( (layer % 2 ? 1 : -1) * + (GetGeo()->GetPadPlane(layer, stack)->GetRowPos(zrow) - GetGeo()->GetPadPlane(layer, stack)->GetRowSize(zrow) / 2) * TMath::Tan(- 2.0 / 180.0 * TMath::Pi()) ) / 0.016 ); } -Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask) +Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask) { + // calculate the coefficients for the straight line fit + // depending on the mask of contributing tracklets + fCurrTrackletMask = trackletMask; TMatrix a(GetNLayers(), 3); @@ -270,7 +1430,7 @@ Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask) a(layer, 0) = 0; a(layer, 1) = 0; a(layer, 2) = 0; - } + } else { a(layer, 0) = 1; a(layer, 1) = fGeo->GetTime0(layer); @@ -291,16 +1451,16 @@ Bool_t AliTRDgtuParam::GenerateRecoCoefficients(Int_t trackletMask) return kTRUE; } -Float_t AliTRDgtuParam::GetAki(Int_t k, Int_t i) +Float_t AliTRDgtuParam::GetAki(Int_t k, Int_t i) { // get A_ki for the calculation of the tracking parameters if (fCurrTrackletMask != k) GenerateRecoCoefficients(k); - return fAki[i]; + return -fAki[i]; } -Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i) +Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i) { // get B_ki for the calculation of the tracking parameters @@ -310,7 +1470,7 @@ Float_t AliTRDgtuParam::GetBki(Int_t k, Int_t i) return fBki[i]; } -Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i) +Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i) { // get B_ki for the calculation of the tracking parameters @@ -321,7 +1481,7 @@ Float_t AliTRDgtuParam::GetCki(Int_t k, Int_t i) } /* -Float_t AliTRDgtuParam::GetD(Int_t k) const +Float_t AliTRDgtuParam::GetD(Int_t k) const { // get the determinant for the calculation of the tracking parameters @@ -343,7 +1503,7 @@ Float_t AliTRDgtuParam::GetD(Int_t k) const return t.Determinant(); } -Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k) +Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k) { // calculate the fitting parameters // will be changed! @@ -369,7 +1529,7 @@ Bool_t AliTRDgtuParam::GetFitParams(TVectorD& rhs, Int_t k) } */ -Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2) +Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2) { // get the x-coord. of the assumed circle/straight line intersection points @@ -378,33 +1538,65 @@ Bool_t AliTRDgtuParam::GetIntersectionPoints(Int_t k, Float_t &x1, Float_t &x2) Int_t nHits = 0; for (Int_t layer = 0; layer < GetNLayers(); layer++) { if ( (k >> layer) & 0x1 ) { - if (l1 < 0) + if (l1 < 0) l1 = layer; l2 = layer; nHits++; } } - x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1); - x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1); - - return ( (l1 >= 0) && (l2 >= 0) ); + if ( (l1 >= 0) && (l2 >= 0) ) { + x1 = fGeo->GetTime0(l1) + 10./6 * (nHits -1); + x2 = fGeo->GetTime0(l2) - 10./6 * (nHits -1); + return kTRUE; + } + else + return kFALSE; } -Float_t AliTRDgtuParam::GetRadius(Int_t a, Float_t b, Float_t x1, Float_t x2) +Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2, Float_t magField) { - // get the radius for the track - Float_t d = (1 + b * b /2 ) * (x2 - x1); - Float_t c1 = x1 * x2 / 2; -// Float_t c2 = (x1 + x2) / (x1 * x2); - printf("c1: %f\n", c1); - Float_t r = (375. / 10000.) * c1 * 256 / (a >> 1); - return r; - - Float_t y1 = a + b*x1; - Float_t y2 = a + b*x2; - Float_t alpha = TMath::Abs( TMath::ATan(y2/x2) - TMath::ATan(y1/x1) ); - d = TMath::Sqrt( TMath::Power(x2-x1, 2) + TMath::Power(y2-y1, 2) ); - r = d / 2. / TMath::Sin(alpha); - return r; + // returns 0.3 * B * 1/a (1/128 GeV/c) + // a : offset, b : slope (not used) + + if (fgUseGTUconst) { + //----- calculation as in the GTU ---- + const Int_t maskIdLut[64] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, 2, -1, 3, 4, 5, + -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, 7, -1, 8, 9, 10, + -1, -1, -1, 11, -1, 12, 13, 14, -1, 15, 16, 17, 18, 19, 20, 21 + }; + + const Int_t c1Lut[32] = { + -2371, -2474, -2474, -2474, -2563, -2448, -2578, -2578, + -2578, -2670, -2557, -2578, -2578, -2670, -2557, -2578, + -2670, -2557, -2763, -2557, -2644, -2523, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }; + + Int_t layerMaskId = maskIdLut[layerMask]; + Int_t c1 = c1Lut[layerMaskId]; + Int_t c1Ext = c1 << 8; + Int_t ptRawStage4 = c1Ext / (a >> 2); + Int_t ptRawComb4 = ptRawStage4; + Int_t ptExtComb4 = (ptRawComb4 > 0) ? ptRawComb4 + 33 : ptRawComb4 - 30; + + return ((Int_t) ptExtComb4/2); + } + else { + //----- simple calculation ----- + Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m + Float_t r = 0; + if ( (a >> 1) != 0) + r = (0.3 * magField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a? + + Int_t pt = (Int_t) (2 * r); + if (pt >= 0) + pt += 32; + else + pt -= 29; + pt /= 2; + return pt; + } }