[11] | 1 | #ifndef _CAL_TOWER_HH_
|
---|
| 2 | #define _CAL_TOWER_HH_
|
---|
| 3 |
|
---|
[35] | 4 | // Modified by X. Rouby for integration in Delphes
|
---|
[37] | 5 | // !!! the numbering of the towers (iEta, iPhi) is **NOT** following any convention of the corresponding experiment
|
---|
[35] | 6 |
|
---|
[42] | 7 |
|
---|
[11] | 8 | #include <cmath>
|
---|
| 9 |
|
---|
| 10 | #ifndef M_PI
|
---|
| 11 | #define M_PI 3.141592653589793238462643383279502884197
|
---|
| 12 | #endif
|
---|
| 13 |
|
---|
[35] | 14 | const double pi = acos(-1);
|
---|
[11] | 15 |
|
---|
[41] | 16 | /*
|
---|
| 17 | // CDF data : 22 towers. step=2.7° at the beginning, and after, it changes
|
---|
[37] | 18 | const unsigned int ntower = 22;
|
---|
| 19 | const double TOWER_THETA[ntower+1] = {3.000, 5.700, 8.400, 11.100, 13.800, 16.500, 19.200, 21.900, 24.600, 27.300, 30.000,// step=2.7°
|
---|
| 20 | 33.524, 36.822, 40.261, 43.614, 47.436, 51.790, 56.735, 62.310, 68.516, 75.297, 82.526, 90.000 };
|
---|
[41] | 21 | const double tower_eta_edges[ntower+1] = {
|
---|
[37] | 22 | 0.0, 0.130817437415, 0.259479460739, 0.384075299436, 0.503273260393, 0.616250691646, 0.72264587494, 0.822472442947,
|
---|
| 23 | 0.916007799535, 1.00361552815, 1.10000635195, 1.19999982651, 1.31695789692, 1.41531379676, 1.52309848418, 1.64260787639,
|
---|
| 24 | 1.77704423284, 1.93106912741, 2.1118548488, 2.33129451223, 2.61134904017, 3.00008274261, 3.64253335732 };
|
---|
[41] | 25 | const double tower_dphi[ntower] = { // list of the tower size in phi (in degrees)
|
---|
| 26 | 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 15.,
|
---|
| 27 | 15., 15., 15., 15., 15., 7.5, 7.5, 7.5,
|
---|
[37] | 28 | 7.5, 7.5, 7.5, 7.5, 7.5, 7.5 };
|
---|
| 29 | */
|
---|
[35] | 30 |
|
---|
| 31 | // CMS data
|
---|
[41] | 32 | const unsigned int ntower = 40;
|
---|
[37] | 33 | const double tower_eta_edges[ntower+1] = { // list of the edges of each tower, in eta, for eta>0, assuming a symmetric detector in eta<0
|
---|
| 34 | 0., // lower limit of the most central tower
|
---|
| 35 | 0.087, 0.174, 0.261, 0.348, 0.435, 0.522, 0.609, 0.696, 0.783, 0.870, 0.957, 1.044, 1.131, 1.218, 1.305, 1.392, 1.479, 1.566,
|
---|
| 36 | 1.653, 1.740, 1.830, 1.930, 2.043, 2.172, 2.322, 2.500, 2.650, 2.868, 2.950, 3.125, 3.300, 3.475, 3.650, 3.825, 4.000, 4.175,
|
---|
| 37 | 4.350, 4.525,
|
---|
| 38 | 4.700, // lower limit of the most forward tower
|
---|
| 39 | 5.000}; // higher limit of the most forward tower
|
---|
[41] | 40 |
|
---|
[37] | 41 | const double tower_dphi[ntower] = { // list of the tower size in phi (in degrees)
|
---|
[41] | 42 | 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10,
|
---|
| 43 | 10,10,10,10,10, 10,10,10,10,10, 10,10,10,10,10, 10,10,10,20, 20 };
|
---|
[35] | 44 |
|
---|
[37] | 45 |
|
---|
[11] | 46 | class CalTower
|
---|
| 47 | {
|
---|
| 48 | public:
|
---|
| 49 | double Et,eta,phi;
|
---|
| 50 | int iEta,iPhi;
|
---|
| 51 |
|
---|
| 52 | CalTower(): Et(0), eta(0), phi(0), iEta(-1), iPhi(-1) {}
|
---|
[37] | 53 |
|
---|
[35] | 54 | CalTower(const double Et0, const double eta0, const double phi0): Et(Et0), eta(eta0), phi(phi0)
|
---|
[11] | 55 | {
|
---|
[41] | 56 |
|
---|
[37] | 57 | if (fabs(eta) > tower_eta_edges[ntower]) {iEta = -1; iPhi = -1; } // outside the detector
|
---|
| 58 | else {
|
---|
| 59 | const unsigned int nn = ntower*2;
|
---|
| 60 | double all_towers[nn];
|
---|
| 61 | unsigned int i =0;
|
---|
[41] | 62 | for(unsigned int j= ntower-1; i<ntower; j--,i++) { all_towers[i] = -tower_eta_edges[j];}
|
---|
| 63 | for(unsigned int j= 1; j <ntower+1; j++, i++) { all_towers[i] = tower_eta_edges[j]; }
|
---|
| 64 | for(i = 0; i< nn; i++) { if(eta < all_towers[i]) {iEta=i; break;} }
|
---|
[37] | 65 |
|
---|
| 66 | for(unsigned int j=0; j<ntower; j++) {
|
---|
[41] | 67 | int wedge = int(360./tower_dphi[j]);
|
---|
[42] | 68 | iPhi = int(phi/(2.*pi)* wedge)%wedge;
|
---|
[37] | 69 | }
|
---|
| 70 | }
|
---|
[11] | 71 | }
|
---|
[37] | 72 |
|
---|
[35] | 73 | CalTower(const double Et0, const double eta0, const double phi0, const int iEta0, const int iPhi0): Et(Et0), eta(eta0), phi(phi0), iEta(iEta0), iPhi(iPhi0) {}
|
---|
[37] | 74 |
|
---|
[11] | 75 | CalTower(const CalTower& c): Et(c.Et), eta(c.eta), phi(c.phi), iEta(c.iEta), iPhi(c.iPhi) {}
|
---|
[37] | 76 |
|
---|
| 77 | bool isEqual(const CalTower& c) {
|
---|
[11] | 78 | return Et == c.Et && eta == c.eta && phi == c.phi && iEta == c.iEta && iPhi == c.iPhi;
|
---|
| 79 | }
|
---|
[35] | 80 |
|
---|
[41] | 81 | // converts theta angle [degrees] into pseudorapidity
|
---|
[35] | 82 | double pseudorapidity(const double theta) {
|
---|
| 83 | return -log(tan( (theta/2.) * (pi/180.) ));
|
---|
[41] | 84 | }
|
---|
[35] | 85 |
|
---|
[11] | 86 | };
|
---|
| 87 |
|
---|
[35] | 88 | /*****
|
---|
[37] | 89 | e.g. CDF
|
---|
[35] | 90 | iEta==4 si -3.642 < eta < -3.000
|
---|
| 91 | iEta==47 si 3.000 < eta < 3.642
|
---|
| 92 | iEta==-1 si eta < -3.642 ou si eta > 3.642
|
---|
| 93 |
|
---|
| 94 | i theta pseudorapidity iEta
|
---|
| 95 | --------------------------------------
|
---|
| 96 | 0 3.0 -3.00008274261 4
|
---|
| 97 | 1 5.7 -2.61134904017 5
|
---|
| 98 | 2 8.4 -2.33129451223 6
|
---|
| 99 | 3 11.1 -2.1118548488 7
|
---|
| 100 | 4 13.8 -1.93106912741 8
|
---|
| 101 | 5 16.5 -1.77704423284 9
|
---|
| 102 | 6 19.2 -1.64260787639 10
|
---|
| 103 | 7 21.9 -1.52309848418 11
|
---|
| 104 | 8 24.6 -1.41531379676 12
|
---|
| 105 | 9 27.3 -1.31695789692 13
|
---|
| 106 | 10 30.0 -1.19999982651 14
|
---|
| 107 | 11 33.524 -1.10000635195 15
|
---|
| 108 | 12 36.822 -1.00361552815 16
|
---|
| 109 | 13 40.261 -0.916007799535 17
|
---|
| 110 | 14 43.614 -0.822472442947 18
|
---|
| 111 | 15 47.436 -0.72264587494 19
|
---|
| 112 | 16 51.79 -0.616250691646 20
|
---|
| 113 | 17 56.735 -0.503273260393 21
|
---|
| 114 | 18 62.31 -0.384075299436 22
|
---|
| 115 | 19 68.516 -0.259479460739 23
|
---|
| 116 | 20 75.297 -0.130817437415 24
|
---|
| 117 | 21 82.526 1.11022302463e-16 25
|
---|
| 118 |
|
---|
| 119 |
|
---|
| 120 | i theta pseudorapidity iEta
|
---|
| 121 | --------------------------------------
|
---|
[37] | 122 | 0 3.0 3.00008274261 47
|
---|
| 123 | 1 5.7 2.61134904017 46
|
---|
| 124 | 2 8.4 2.33129451223 45
|
---|
| 125 | 3 11.1 2.1118548488 44
|
---|
| 126 | 4 13.8 1.93106912741 43
|
---|
| 127 | 5 16.5 1.77704423284 42
|
---|
| 128 | 6 19.2 1.64260787639 41
|
---|
| 129 | 7 21.9 1.52309848418 40
|
---|
| 130 | 8 24.6 1.41531379676 39
|
---|
| 131 | 9 27.3 1.31695789692 38
|
---|
| 132 | 10 30.0 1.19999982651 37
|
---|
| 133 | 11 33.524 1.10000635195 36
|
---|
| 134 | 12 36.822 1.00361552815 35
|
---|
| 135 | 13 40.261 0.916007799535 34
|
---|
| 136 | 14 43.614 0.822472442947 33
|
---|
| 137 | 15 47.436 0.72264587494 32
|
---|
| 138 | 16 51.79 0.616250691646 31
|
---|
| 139 | 17 56.735 0.503273260393 30
|
---|
| 140 | 18 62.31 0.384075299436 29
|
---|
| 141 | 19 68.516 0.259479460739 28
|
---|
| 142 | 20 75.297 0.130817437415 27
|
---|
| 143 | 21 82.526 1.1102230246e-16 26
|
---|
[35] | 144 | *****/
|
---|
| 145 |
|
---|
[11] | 146 | #endif
|
---|
[35] | 147 |
|
---|