Fork me on GitHub

source: svn/trunk/Utilities/Fastjet/plugins/CDFCones/interface/CalTower.hh@ 41

Last change on this file since 41 was 41, checked in by Xavier Rouby, 16 years ago

bug removed. Now working ok with CMS towers

File size: 5.4 KB
Line 
1#ifndef _CAL_TOWER_HH_
2#define _CAL_TOWER_HH_
3
4// Modified by X. Rouby for integration in Delphes
5// !!! the numbering of the towers (iEta, iPhi) is **NOT** following any convention of the corresponding experiment
6// v3 -- not working
7
8#include <cmath>
9#include <iostream>
10
11#ifndef M_PI
12#define M_PI 3.141592653589793238462643383279502884197
13#endif
14
15const double pi = acos(-1);
16
17static bool einmal=true;
18/*
19 // CDF data : 22 towers. step=2.7° at the beginning, and after, it changes
20const unsigned int ntower = 22;
21const 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°
22 33.524, 36.822, 40.261, 43.614, 47.436, 51.790, 56.735, 62.310, 68.516, 75.297, 82.526, 90.000 };
23const double tower_eta_edges[ntower+1] = {
24 0.0, 0.130817437415, 0.259479460739, 0.384075299436, 0.503273260393, 0.616250691646, 0.72264587494, 0.822472442947,
25 0.916007799535, 1.00361552815, 1.10000635195, 1.19999982651, 1.31695789692, 1.41531379676, 1.52309848418, 1.64260787639,
26 1.77704423284, 1.93106912741, 2.1118548488, 2.33129451223, 2.61134904017, 3.00008274261, 3.64253335732 };
27const double tower_dphi[ntower] = { // list of the tower size in phi (in degrees)
28 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 15.,
29 15., 15., 15., 15., 15., 7.5, 7.5, 7.5,
30 7.5, 7.5, 7.5, 7.5, 7.5, 7.5 };
31*/
32
33// CMS data
34const unsigned int ntower = 40;
35const 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
36 0., // lower limit of the most central tower
37 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,
38 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,
39 4.350, 4.525,
40 4.700, // lower limit of the most forward tower
41 5.000}; // higher limit of the most forward tower
42
43const double tower_dphi[ntower] = { // list of the tower size in phi (in degrees)
44 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10,
45 10,10,10,10,10, 10,10,10,10,10, 10,10,10,10,10, 10,10,10,20, 20 };
46
47
48class CalTower
49{
50 public:
51 double Et,eta,phi;
52 int iEta,iPhi;
53
54 CalTower(): Et(0), eta(0), phi(0), iEta(-1), iPhi(-1) {}
55
56 CalTower(const double Et0, const double eta0, const double phi0): Et(Et0), eta(eta0), phi(phi0)
57 {
58
59 if (fabs(eta) > tower_eta_edges[ntower]) {iEta = -1; iPhi = -1; } // outside the detector
60 else {
61 const unsigned int nn = ntower*2;
62 double all_towers[nn];
63 unsigned int i =0;
64 for(unsigned int j= ntower-1; i<ntower; j--,i++) { all_towers[i] = -tower_eta_edges[j];}
65 for(unsigned int j= 1; j <ntower+1; j++, i++) { all_towers[i] = tower_eta_edges[j]; }
66 for(i = 0; i< nn; i++) { if(eta < all_towers[i]) {iEta=i; break;} }
67
68 for(unsigned int j=0; j<ntower; j++) {
69 int wedge = int(360./tower_dphi[j]);
70 iPhi = 0; int(phi/(2.*pi)* wedge)%wedge;
71 }
72 }
73 }
74
75 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) {}
76
77 CalTower(const CalTower& c): Et(c.Et), eta(c.eta), phi(c.phi), iEta(c.iEta), iPhi(c.iPhi) {}
78
79 bool isEqual(const CalTower& c) {
80 return Et == c.Et && eta == c.eta && phi == c.phi && iEta == c.iEta && iPhi == c.iPhi;
81 }
82
83// converts theta angle [degrees] into pseudorapidity
84 double pseudorapidity(const double theta) {
85 return -log(tan( (theta/2.) * (pi/180.) ));
86 }
87
88};
89
90/*****
91 e.g. CDF
92 iEta==4 si -3.642 < eta < -3.000
93 iEta==47 si 3.000 < eta < 3.642
94 iEta==-1 si eta < -3.642 ou si eta > 3.642
95
96 i theta pseudorapidity iEta
97--------------------------------------
98 0 3.0 -3.00008274261 4
99 1 5.7 -2.61134904017 5
100 2 8.4 -2.33129451223 6
101 3 11.1 -2.1118548488 7
102 4 13.8 -1.93106912741 8
103 5 16.5 -1.77704423284 9
104 6 19.2 -1.64260787639 10
105 7 21.9 -1.52309848418 11
106 8 24.6 -1.41531379676 12
107 9 27.3 -1.31695789692 13
10810 30.0 -1.19999982651 14
10911 33.524 -1.10000635195 15
11012 36.822 -1.00361552815 16
11113 40.261 -0.916007799535 17
11214 43.614 -0.822472442947 18
11315 47.436 -0.72264587494 19
11416 51.79 -0.616250691646 20
11517 56.735 -0.503273260393 21
11618 62.31 -0.384075299436 22
11719 68.516 -0.259479460739 23
11820 75.297 -0.130817437415 24
11921 82.526 1.11022302463e-16 25
120
121
122 i theta pseudorapidity iEta
123--------------------------------------
124 0 3.0 3.00008274261 47
125 1 5.7 2.61134904017 46
126 2 8.4 2.33129451223 45
127 3 11.1 2.1118548488 44
128 4 13.8 1.93106912741 43
129 5 16.5 1.77704423284 42
130 6 19.2 1.64260787639 41
131 7 21.9 1.52309848418 40
132 8 24.6 1.41531379676 39
133 9 27.3 1.31695789692 38
13410 30.0 1.19999982651 37
13511 33.524 1.10000635195 36
13612 36.822 1.00361552815 35
13713 40.261 0.916007799535 34
13814 43.614 0.822472442947 33
13915 47.436 0.72264587494 32
14016 51.79 0.616250691646 31
14117 56.735 0.503273260393 30
14218 62.31 0.384075299436 29
14319 68.516 0.259479460739 28
14420 75.297 0.130817437415 27
14521 82.526 1.1102230246e-16 26
146*****/
147
148#endif
149
Note: See TracBrowser for help on using the repository browser.