#ifndef coord2tower_hh #define coord2tower_hh #include "Geometry/CdfGeometry.hh" #include "CalorGeometry/MiniplugGeometry.hh" extern "C" { int coord2towerMP(float xCoord, float yCoord, float zCoord) { float const i2mm = 2.49; // the length of hexagon side float const aSide = 0.75*i2mm; float const kt = sqrt(3.); // MINIPLUG "tower" center coords (in cm) float const MINIPLUG_TOWER_CM[84][2] = { //numbering as in 5142 { 10.2712,1.6173}, // 0 { 7.47,6.46921}, // 1 { 15.8738,1.6173}, // 2 { 13.0725,6.46921}, // 3 { 10.2713,11.3211}, // 4 { 21.4762,1.6173}, // 5 { 18.675,6.46921}, // 6 { 15.8737,11.3211}, // 7 { 13.0725,16.173}, // 8 { 27.0788,1.6173}, // 9 { 24.2775,6.46921}, // 10 { 21.4762,11.3211}, // 11 { 18.675,16.173}, // 12 { 15.8738,21.0249}, // 13 { 3.735,9.70381}, // 14 { -1.8675,9.70381}, // 15 { 6.53625,14.5557}, // 16 { 0.93375,14.5557}, // 17 { -4.66875,14.5557}, // 18 { 9.3375,19.4076}, // 19 { 3.735,19.4076}, // 20 { -1.8675,19.4076}, // 21 { -7.47,19.4076}, // 22 { 12.1388,24.2595}, // 23 { 6.53625,24.2595}, // 24 { 0.93375,24.2595}, // 25 { -4.66875,24.2595}, // 26 { -10.2712,24.2595}, // 27 { -6.53625,8.08651}, // 28 { -9.3375,3.2346}, // 29 { -9.3375,12.9384}, // 30 { -12.1388,8.08651}, // 31 { -14.94,3.23461}, // 32 { -12.1388,17.7903}, // 33 { -14.94,12.9384}, // 34 { -17.7412,8.08651}, // 35 { -20.5425,3.2346}, // 36 { -14.94,22.6422}, // 37 { -17.7413,17.7903}, // 38 { -20.5425,12.9384}, // 39 { -23.3438,8.08651}, // 40 { -26.145,3.23461}, // 41 { -10.2712,-1.6173}, // 42 { -7.47,-6.46921}, // 43 { -15.8738,-1.6173}, // 44 { -13.0725,-6.46921}, // 45 { -10.2713,-11.3211}, // 46 { -21.4762,-1.6173}, // 47 { -18.675,-6.46921}, // 48 { -15.8737,-11.3211}, // 49 { -13.0725,-16.173}, // 50 { -27.0788,-1.6173}, // 51 { -24.2775,-6.46921}, // 52 { -21.4762,-11.3211}, // 53 { -18.675,-16.173}, // 54 { -15.8738,-21.0249}, // 55 { -3.735,-9.70381}, // 56 { 1.8675,-9.70381}, // 57 { -6.53625,-14.5557}, // 58 { -0.93375,-14.5557}, // 59 { 4.66875,-14.5557}, // 60 { -9.3375,-19.4076}, // 61 { -3.735,-19.4076}, // 62 { 1.8675,-19.4076}, // 63 { 7.47,-19.4076}, // 64 { -12.1388,-24.2595}, // 65 { -6.53625,-24.2595}, // 66 { -0.93375,-24.2595}, // 67 { 4.66875,-24.2595}, // 68 { 10.2712,-24.2595}, // 69 { 6.53625,-8.08651}, // 70 { 9.3375,-3.2346}, // 71 { 9.3375,-12.9384}, // 72 { 12.1388,-8.08651}, // 73 { 14.94,-3.23461}, // 74 { 12.1388,-17.7903}, // 75 { 14.94,-12.9384}, // 76 { 17.7412,-8.08651}, // 77 { 20.5425,-3.2346}, // 78 { 14.94,-22.6422}, // 79 { 17.7413,-17.7903}, // 80 { 20.5425,-12.9384}, // 81 { 23.3438,-8.08651}, // 82 { 26.145,-3.23461} // 83 }; for (int i = 0; i<84; i++) { float pX = xCoord - MINIPLUG_TOWER_CM[i][0]; float pY = yCoord - MINIPLUG_TOWER_CM[i][1]; if (pX*pX > 4*aSide*aSide) { goto SKIP;} if (pY*pY > kt*kt*aSide*aSide) { goto SKIP;} if ( (i >= 0 && i < 14) || (i >= 28 && i < 42) || (i >= 56 && i < 70) ) { pX = pX; } else { pX = -pX; } if ( ( pX >= -1.5*aSide ) && ( pX <= -1.0*aSide ) && ( pY >= -kt*aSide - kt*pX ) && ( pY <= 2*aSide*kt-kt*pX ) ) { return i; } else if ( ( pX >= -1.5*aSide ) && ( pX <= -1.0*aSide ) && ( pY <= kt*aSide + kt*pX ) && ( pY >= -2*aSide*kt + kt*pX ) ) { return i; } else if ( ( pX >= -aSide ) && ( pX <= 0. ) && ( pY <= kt*aSide ) && ( pY >= -aSide*kt ) ) { return i; } else if ( ( pX >= 0. ) && ( pX <= 0.5*aSide ) && ( pY <= kt*aSide - kt*pX ) && ( pY >= -kt*aSide + kt*pX ) ){ return i; } else if ( ( pX >= 0.5*aSide ) && ( pX <= 1.5*aSide ) && ( pY <= kt*aSide*0.5 ) && ( pY >= -kt*aSide*0.5 ) ){ return i; } else if ( ( pX >= 1.5*aSide ) && ( pX <= 2.0*aSide ) && ( pY <= kt*aSide*2. - kt*pX ) && ( pY >= -kt*aSide*2.+ kt*pX ) ){ return i; } SKIP:; } return -1; } } #endif