Index: trunk/Utilities/Fastjet/plugins/CDFCones/interface/CalTower.hh
===================================================================
--- trunk/Utilities/Fastjet/plugins/CDFCones/interface/CalTower.hh	(revision 35)
+++ trunk/Utilities/Fastjet/plugins/CDFCones/interface/CalTower.hh	(revision 37)
@@ -3,4 +3,5 @@
 
 // Modified by X. Rouby for integration in Delphes
+// !!! the numbering of the towers (iEta, iPhi) is **NOT** following any convention of the corresponding experiment
 
 #include <cmath>
@@ -12,24 +13,32 @@
 const double pi = acos(-1);
 
-// CDF data : 23 towers. step=2.7Â° at the beginning, and after, it changes
-//const unsigned int ntower = 23;
-//const double TOWER_THETA[ntower] = {  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Â°
-//          33.524,  36.822, 40.261, 43.614, 47.436, 51.790, 56.735, 62.310, 68.516, 75.297, 82.526, 90.000 };
+/* // CDF data : 22 towers. step=2.7Â° at the beginning, and after, it changes
+const unsigned int ntower = 22;
+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Â°
+          33.524,  36.822, 40.261, 43.614, 47.436, 51.790, 56.735, 62.310, 68.516, 75.297, 82.526, 90.000 };
+const couble tower_eta_edges[ntower+1] = {
+    0.0,   0.130817437415,   0.259479460739,   0.384075299436,   0.503273260393,   0.616250691646,   0.72264587494,   0.822472442947,   
+    0.916007799535,   1.00361552815,   1.10000635195,   1.19999982651,   1.31695789692,   1.41531379676,   1.52309848418, 1.64260787639,  
+    1.77704423284,  1.93106912741,  2.1118548488,  2.33129451223,  2.61134904017,  3.00008274261,  3.64253335732 };
+const int tower_dphi[ntower] = { // list of the tower size in phi (in degrees) 
+	7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 7.5, 15, 
+	15,  15,  15,  15,  15,  7.5, 7.5  7.5,
+	7.5, 7.5, 7.5, 7.5, 7.5, 7.5 };
+*/
 
-// CMS HB: 0.087 x 0.087 = 0.087 x 5Â°
-// CMS HF: 0.175 x 0.175 = 0.175 x 10Â°
 // CMS data
-const unsigned int ntower = 40;
-//const double TOWER_ETA[ntower] = {  
-//    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,
-//    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,
-//    4.350, 4.525, 4.700}
-const double TOWER_THETA[ntower] = {
-1.04221324479 ,  1.24151823936 ,  1.4789296564 ,  1.76172836867 ,  2.09858297042 ,  2.49981191976 ,  2.97769357253 ,  3.54683172517 ,  
-4.22458468545 ,  5.03156565222 ,  5.99222070913 ,  6.50323511476 ,  8.08260215014 ,  9.38520669791 ,  11.2029938559 ,  13.0015703243 ,  
-14.7731659079 ,  16.5174067026 ,  18.2267592981 ,  19.9103474053 ,  21.6789816306 ,  23.5965023504 ,  25.6731077732 ,  27.9190341722 ,  
-30.3443463769 ,  32.9586699802 ,  35.7708584993 ,  38.7885912317 ,  42.017901925 ,  45.4626450521 ,  49.1239157061 ,  52.9994507062 ,  
-57.0830516071 ,  61.3640831827 ,  65.8271109013 ,  70.4517445074 ,  75.2127486134 ,  80.0804628398 ,  85.02154355, 90
-};
+const unsigned int ntower = 41;
+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 
+    0., // lower limit of the most central tower
+    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,
+    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,
+    4.350, 4.525, 
+    4.700,  // lower limit of the most forward tower
+    5.000}; // higher limit of the most forward tower
+const double tower_dphi[ntower] = { // list of the tower size in phi (in degrees)
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+    20,20 }; 
+
 
 class CalTower
@@ -40,11 +49,27 @@
 
   CalTower(): Et(0), eta(0), phi(0), iEta(-1), iPhi(-1) {}
+
   CalTower(const double Et0, const double eta0, const double phi0): Et(Et0), eta(eta0), phi(phi0)
   {
-    if(fabs(eta) < pseudorapidity(TOWER_THETA[0])) { // |eta| < 3.64
+	if (fabs(eta) > tower_eta_edges[ntower]) {iEta = -1; iPhi = -1; } // outside the detector
+        else {  
+		const unsigned int nn = ntower*2; 
+		double all_towers[nn];
+		unsigned int i =0;
+		for(unsigned int j= ntower-1; j>=0; j++, i++) all_towers[i] = -tower_eta_edges[j];
+		for(unsigned int j= 1; j <ntower+1; j++, i++) all_towers[i] =  tower_eta_edges[j];
+		for(i = 0; i< nn; i++) if(eta < all_towers[i]) iEta=i;
+
+		for(unsigned int j=0; j<ntower; j++) {
+			int wedge = int(360./tower_dphi[i]);
+			iPhi = int(phi/(2.*pi)* wedge)%wedge;
+		}
+	}
+
+/*    if(fabs(eta) < pseudorapidity(TOWER_THETA[0])) { // |eta| < 3.64
       if(eta <= 0){ // central particle, but negative eta
 	for(unsigned int i = 0; i < ntower-1; i++)
 	  if(eta < pseudorapidity(180 - TOWER_THETA[i + 1])){ // eta < -3 ; -2.61 ; ... ; 0
-	    iEta = 4 + i;
+	    iEta = 4 + i;   // <-- pourquio on commence Ã   4 ????
 	    break;
 	  }
@@ -53,5 +78,5 @@
 	for(unsigned int i = 0; i < ntower-1; i++)
 	  if(-eta < pseudorapidity(180 - TOWER_THETA[i + 1])){ // eta > 3 ; 2.61 ; ... ; 0
-	    iEta = 47 - i;
+	    iEta = 5+ 2*(ntower-2) - i;     //CDF iEta = 47 - i;
 	    break;
 	  }
@@ -66,21 +91,24 @@
       iPhi = -1;
     }
+*/
   }
+
   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) {}
+
   CalTower(const CalTower& c): Et(c.Et), eta(c.eta), phi(c.phi), iEta(c.iEta), iPhi(c.iPhi) {}
-  bool isEqual(const CalTower& c)
-  {
+
+  bool isEqual(const CalTower& c) {
     return Et == c.Et && eta == c.eta && phi == c.phi && iEta == c.iEta && iPhi == c.iPhi;
   }
 
-// converts theta angle [degrees] into pseudorapidity
+/* // converts theta angle [degrees] into pseudorapidity
  double pseudorapidity(const double theta) {
          return -log(tan( (theta/2.) * (pi/180.) ));
-         }
+ }*/
 
 };
 
 /***** 
- e.g. 
+ e.g.  CDF
   iEta==4  si -3.642 < eta < -3.000
   iEta==47 si  3.000 < eta <  3.642
@@ -115,26 +143,26 @@
  i   theta    pseudorapidity     iEta
 --------------------------------------
- 0   3.0      -3.00008274261      47
- 1   5.7      -2.61134904017      46
- 2   8.4      -2.33129451223      45
- 3   11.1     -2.1118548488       44
- 4   13.8     -1.93106912741      43
- 5   16.5     -1.77704423284      42
- 6   19.2     -1.64260787639      41
- 7   21.9     -1.52309848418      40
- 8   24.6     -1.41531379676      39
- 9   27.3     -1.31695789692      38
-10   30.0     -1.19999982651      37
-11   33.524   -1.10000635195      36
-12   36.822   -1.00361552815      35
-13   40.261   -0.916007799535     34
-14   43.614   -0.822472442947     33
-15   47.436   -0.72264587494      32
-16   51.79    -0.616250691646     31
-17   56.735   -0.503273260393     30
-18   62.31    -0.384075299436     29
-19   68.516   -0.259479460739     28
-20   75.297   -0.130817437415     27
-21   82.526   1.11022302463e-16   26
+ 0   3.0       3.00008274261      47
+ 1   5.7       2.61134904017      46
+ 2   8.4       2.33129451223      45
+ 3   11.1      2.1118548488       44
+ 4   13.8      1.93106912741      43
+ 5   16.5      1.77704423284      42
+ 6   19.2      1.64260787639      41
+ 7   21.9      1.52309848418      40
+ 8   24.6      1.41531379676      39
+ 9   27.3      1.31695789692      38
+10   30.0      1.19999982651      37
+11   33.524    1.10000635195      36
+12   36.822    1.00361552815      35
+13   40.261    0.916007799535     34
+14   43.614    0.822472442947     33
+15   47.436    0.72264587494      32
+16   51.79     0.616250691646     31
+17   56.735    0.503273260393     30
+18   62.31     0.384075299436     29
+19   68.516    0.259479460739     28
+20   75.297    0.130817437415     27
+21   82.526    1.1102230246e-16   26
 *****/
 
