ClassImp(AliTRDgtuParam)
AliTRDgtuParam *AliTRDgtuParam::fgInstance = 0;
+Bool_t AliTRDgtuParam::fgUseGTUconst = kTRUE;
// ----- matching windows -----
Int_t AliTRDgtuParam::fgDeltaY = 19;
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),
// assuming that the tracks come from the vertex
// +/- fVertexSize in z-direction
- Int_t iSec = 0; // sector is irrelevant
- Bool_t collision = kFALSE;
+ 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 iStack = 0; iStack < fGeo->Nstack(); iStack++) {
+ return kTRUE;
+ }
+ else {
+ Int_t iSec = 0; // sector is irrelevant
+ Bool_t collision = kFALSE;
- Float_t x[6] = { 0 };
- Float_t z[6][16] = {{ 0 }};
- Float_t dZ[6][16] = {{ 0 }};
+ for (Int_t iStack = 0; iStack < fGeo->Nstack(); iStack++) {
- 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++)
+ 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;
+ }
}
- }
- for (Int_t fixRow = 0; fixRow < fGeo->GetRowMax(fgkFixLayer, iStack, iSec); fixRow++) {
+ 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?
+ 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;
+ 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;
- }
+ 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;
+ 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;
}
- 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
{
// get the constant for the calculation of alpha
- Int_t ci = (Int_t) (GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
+ Int_t ci = TMath::Nint(GetChamberThickness() / fGeo->GetTime0(layer) * GetBinWidthY() / GetBinWidthdY() * (1 << (GetBitExcessAlpha() + GetBitExcessY() + 1)) );
return ci;
}
// 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()) );
+ Int_t ci = TMath::Nint(- (fGeo->GetTime0(layer) - xmid) / GetChamberThickness() * GetBinWidthdY() / GetBinWidthY() * (1 << GetBitExcessYProj()) );
return ci;
}
return kFALSE;
}
-Float_t AliTRDgtuParam::GetPt(Int_t a, Float_t /* b */, Float_t x1, Float_t x2) const
+Int_t AliTRDgtuParam::GetPt(Int_t layerMask, Int_t a, Float_t /* b */, Float_t x1, Float_t x2) const
{
// returns 0.3 * B * 1/a (1/128 GeV/c)
// a : offset, b : slope (not used)
- Float_t c1 = x1 * x2 / 2. / 10000.; // conversion cm to m
- Float_t r = 0;
- if ( (a >> 1) != 0)
- r = (0.3 * fMagField / 2. / (fgkBinWidthY/100.)) * (((Int_t) c1) << 8) / (a >> 1); //??? why shift of a?
- return r;
+ 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;
+ 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 * fMagField / 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;
+ }
}