| 1 | /* ======================================================================== *\ | 
|---|
| 2 | ! | 
|---|
| 3 | ! * | 
|---|
| 4 | ! * This file is part of MARS, the MAGIC Analysis and Reconstruction | 
|---|
| 5 | ! * Software. It is distributed to you in the hope that it can be a useful | 
|---|
| 6 | ! * and timesaving tool in analysing Data of imaging Cerenkov telescopes. | 
|---|
| 7 | ! * It is distributed WITHOUT ANY WARRANTY. | 
|---|
| 8 | ! * | 
|---|
| 9 | ! * Permission to use, copy, modify and distribute this software and its | 
|---|
| 10 | ! * documentation for any purpose is hereby granted without fee, | 
|---|
| 11 | ! * provided that the above copyright notice appear in all copies and | 
|---|
| 12 | ! * that both that copyright notice and this permission notice appear | 
|---|
| 13 | ! * in supporting documentation. It is provided "as is" without express | 
|---|
| 14 | ! * or implied warranty. | 
|---|
| 15 | ! * | 
|---|
| 16 | ! | 
|---|
| 17 | ! | 
|---|
| 18 | !   Author(s): Thomas Bretz    12/2000 <mailto:tbretz@astro.uni-wuerzburg.de> | 
|---|
| 19 | !   Author(s): Harald Kornmayer 1/2001 | 
|---|
| 20 | !   Author(s): Wolfgang Wittek 10/2003 <mailto:wittek@mppmu.mpg.de> | 
|---|
| 21 | ! | 
|---|
| 22 | !   Copyright: MAGIC Software Development, 2000-2003 | 
|---|
| 23 | ! | 
|---|
| 24 | ! | 
|---|
| 25 | \* ======================================================================== */ | 
|---|
| 26 |  | 
|---|
| 27 | ///////////////////////////////////////////////////////////////////////////// | 
|---|
| 28 | // | 
|---|
| 29 | // MGeomCamCT1Daniel | 
|---|
| 30 | // | 
|---|
| 31 | // This class stores the geometry information of the CT1 camera. | 
|---|
| 32 | // The next neighbor information comes from a table, the geometry layout | 
|---|
| 33 | // is calculated (for Algorithm see CreateCam | 
|---|
| 34 | // | 
|---|
| 35 | // | 
|---|
| 36 | // The only difference to MGeomCamCT1 is the second argument of MGeomCam | 
|---|
| 37 | // (which is the distance camera-reflector) | 
|---|
| 38 | //        it is        dist = 4.8129 m    (instead of 4.88  m) | 
|---|
| 39 | // | 
|---|
| 40 | // together with the pixel diameter of d = 21 mm this gives | 
|---|
| 41 | // d/dist = 0.0043633 = 0.25 deg    (instead of 0.0043033 = 0.2466 deg) | 
|---|
| 42 | // | 
|---|
| 43 | //////////////////////////////////////////////////////////////////////////// | 
|---|
| 44 | #include "MGeomCamCT1Daniel.h" | 
|---|
| 45 |  | 
|---|
| 46 | #include <math.h>     // floor | 
|---|
| 47 |  | 
|---|
| 48 | #include "MGeomPix.h" | 
|---|
| 49 |  | 
|---|
| 50 | ClassImp(MGeomCamCT1Daniel); | 
|---|
| 51 |  | 
|---|
| 52 | // -------------------------------------------------------------------------- | 
|---|
| 53 | // | 
|---|
| 54 | //  CT1 camera has 127 pixels. For geometry and Next Neighbor info see | 
|---|
| 55 | //  CreateCam and CreateNN | 
|---|
| 56 | // | 
|---|
| 57 | MGeomCamCT1Daniel::MGeomCamCT1Daniel(const char *name) | 
|---|
| 58 | : MGeomCam(127, 4.8129, name, "Geometry information of CT1 camera") | 
|---|
| 59 | { | 
|---|
| 60 | CreateCam(); | 
|---|
| 61 | CreateNN(); | 
|---|
| 62 | InitGeometry(); | 
|---|
| 63 | } | 
|---|
| 64 |  | 
|---|
| 65 | // -------------------------------------------------------------------------- | 
|---|
| 66 | // | 
|---|
| 67 | //  Create Next Neighbors: Fill the NN Info into the pixel objects. | 
|---|
| 68 | // | 
|---|
| 69 | void MGeomCamCT1Daniel::CreateNN() | 
|---|
| 70 | { | 
|---|
| 71 | const Short_t nn[127][6] = {       // Neighbors of # | 
|---|
| 72 | {  1,   2,   3,   4,   5,   6},  // 0 | 
|---|
| 73 | {  0,   2,   6,   7,   8,  18}, | 
|---|
| 74 | {  0,   1,   3,   8,   9,  10}, | 
|---|
| 75 | {  0,   2,   4,  10,  11,  12}, | 
|---|
| 76 | {  0,   3,   5,  12,  13,  14}, | 
|---|
| 77 | {  0,   4,   6,  14,  15,  16}, | 
|---|
| 78 | {  0,   1,   5,  16,  17,  18}, | 
|---|
| 79 | {  1,   8,  18,  19,  20,  36}, | 
|---|
| 80 | {  1,   2,   7,   9,  20,  21}, | 
|---|
| 81 | {  2,   8,  10,  21,  22,  23}, | 
|---|
| 82 | {  2,   3,   9,  11,  23,  24},  // 10 | 
|---|
| 83 | {  3,  10,  12,  24,  25,  26}, | 
|---|
| 84 | {  3,   4,  11,  13,  26,  27}, | 
|---|
| 85 | {  4,  12,  14,  27,  28,  29}, | 
|---|
| 86 | {  4,   5,  13,  15,  29,  30}, | 
|---|
| 87 | {  5,  14,  16,  30,  31,  32}, | 
|---|
| 88 | {  5,   6,  15,  17,  32,  33}, | 
|---|
| 89 | {  6,  16,  18,  33,  34,  35}, | 
|---|
| 90 | {  1,   6,   7,  17,  35,  36}, | 
|---|
| 91 | {  7,  20,  36,  37,  38,  60}, | 
|---|
| 92 | {  7,   8,  19,  21,  38,  39},  // 20 | 
|---|
| 93 | {  8,   9,  20,  22,  39,  40}, | 
|---|
| 94 | {  9,  21,  23,  40,  41,  42}, | 
|---|
| 95 | {  9,  10,  22,  24,  42,  43}, | 
|---|
| 96 | { 10,  11,  23,  25,  43,  44}, | 
|---|
| 97 | { 11,  24,  26,  44,  45,  46}, | 
|---|
| 98 | { 11,  12,  25,  27,  46,  47}, | 
|---|
| 99 | { 12,  13,  26,  28,  47,  48}, | 
|---|
| 100 | { 13,  27,  29,  48,  49,  50}, | 
|---|
| 101 | { 13,  14,  28,  30,  50,  51}, | 
|---|
| 102 | { 14,  15,  29,  31,  51,  52},  // 30 | 
|---|
| 103 | { 15,  30,  32,  52,  53,  54}, | 
|---|
| 104 | { 15,  16,  31,  33,  54,  55}, | 
|---|
| 105 | { 16,  17,  32,  34,  55,  56}, | 
|---|
| 106 | { 17,  33,  35,  56,  57,  58}, | 
|---|
| 107 | { 17,  18,  34,  36,  58,  59}, | 
|---|
| 108 | {  7,  18,  19,  35,  59,  60}, | 
|---|
| 109 | { 19,  38,  60,  61,  62,  90}, | 
|---|
| 110 | { 19,  20,  37,  39,  62,  63}, | 
|---|
| 111 | { 20,  21,  38,  40,  63,  64}, | 
|---|
| 112 | { 21,  22,  39,  41,  64,  65},  // 40 | 
|---|
| 113 | { 22,  40,  42,  65,  66,  67}, | 
|---|
| 114 | { 22,  23,  41,  43,  67,  68}, | 
|---|
| 115 | { 23,  24,  42,  44,  68,  69}, | 
|---|
| 116 | { 24,  25,  43,  45,  69,  70}, | 
|---|
| 117 | { 25,  44,  46,  70,  71,  72}, | 
|---|
| 118 | { 25,  26,  45,  47,  72,  73}, | 
|---|
| 119 | { 26,  27,  46,  48,  73,  74}, | 
|---|
| 120 | { 27,  28,  47,  49,  74,  75}, | 
|---|
| 121 | { 28,  48,  50,  75,  76,  77}, | 
|---|
| 122 | { 28,  29,  49,  51,  77,  78},  // 50 | 
|---|
| 123 | { 29,  30,  50,  52,  78,  79}, | 
|---|
| 124 | { 30,  31,  51,  53,  79,  80}, | 
|---|
| 125 | { 31,  52,  54,  80,  81,  82}, | 
|---|
| 126 | { 31,  32,  53,  55,  82,  83}, | 
|---|
| 127 | { 32,  33,  54,  56,  83,  84}, | 
|---|
| 128 | { 33,  34,  55,  57,  84,  85}, | 
|---|
| 129 | { 34,  56,  58,  85,  86,  87}, | 
|---|
| 130 | { 34,  35,  57,  59,  87,  88}, | 
|---|
| 131 | { 35,  36,  58,  60,  88,  89}, | 
|---|
| 132 | { 19,  36,  37,  59,  89,  90},  // 60 | 
|---|
| 133 | { 37,  62,  90,  91,  92, 126}, | 
|---|
| 134 | { 37,  38,  61,  63,  92,  93}, | 
|---|
| 135 | { 38,  39,  62,  64,  93,  94}, | 
|---|
| 136 | { 39,  40,  63,  65,  94,  95}, | 
|---|
| 137 | { 40,  41,  64,  66,  95,  96}, | 
|---|
| 138 | { 41,  65,  67,  96,  97,  98}, | 
|---|
| 139 | { 41,  42,  66,  68,  98,  99}, | 
|---|
| 140 | { 42,  43,  67,  69,  99, 100}, | 
|---|
| 141 | { 43,  44,  68,  70, 100, 101}, | 
|---|
| 142 | { 44,  45,  69,  71, 101, 102},  // 70 | 
|---|
| 143 | { 45,  70,  72, 102, 103, 104}, | 
|---|
| 144 | { 45,  46,  71,  73, 104, 105}, | 
|---|
| 145 | { 46,  47,  72,  74, 105, 106}, | 
|---|
| 146 | { 47,  48,  73,  75, 106, 107}, | 
|---|
| 147 | { 48,  49,  74,  76, 107, 108}, | 
|---|
| 148 | { 49,  75,  77, 108, 109, 110}, | 
|---|
| 149 | { 49,  50,  76,  78, 110, 111}, | 
|---|
| 150 | { 50,  51,  77,  79, 111, 112}, | 
|---|
| 151 | { 51,  52,  78,  80, 112, 113}, | 
|---|
| 152 | { 52,  53,  79,  81, 113, 114},  // 80 | 
|---|
| 153 | { 53,  80,  82, 114, 115, 116}, | 
|---|
| 154 | { 53,  54,  81,  83, 116, 117}, | 
|---|
| 155 | { 54,  55,  82,  84, 117, 118}, | 
|---|
| 156 | { 55,  56,  83,  85, 118, 119}, | 
|---|
| 157 | { 56,  57,  84,  86, 119, 120}, | 
|---|
| 158 | { 57,  85,  87, 120, 121, 122}, | 
|---|
| 159 | { 57,  58,  86,  88, 122, 123}, | 
|---|
| 160 | { 58,  59,  87,  89, 123, 124}, | 
|---|
| 161 | { 59,  60,  88,  90, 124, 125}, | 
|---|
| 162 | { 37,  60,  61,  89, 125, 126},  // 90 | 
|---|
| 163 | { 61,  92, 126,  -1,  -1,  -1}, | 
|---|
| 164 | { 61,  62,  91,  93,  -1,  -1}, | 
|---|
| 165 | { 62,  63,  92,  94,  -1,  -1}, | 
|---|
| 166 | { 63,  64,  93,  95,  -1,  -1}, | 
|---|
| 167 | { 64,  65,  94,  96,  -1,  -1}, | 
|---|
| 168 | { 65,  66,  95,  97,  -1,  -1}, | 
|---|
| 169 | { 66,  96,  98,  -1,  -1,  -1}, | 
|---|
| 170 | { 66,  67,  97,  99,  -1,  -1}, | 
|---|
| 171 | { 67,  68,  98, 100,  -1,  -1}, | 
|---|
| 172 | { 68,  69,  99, 101,  -1,  -1},  // 100 | 
|---|
| 173 | { 69,  70, 100, 102,  -1,  -1}, | 
|---|
| 174 | { 70,  71, 101, 103,  -1,  -1}, | 
|---|
| 175 | { 71, 102, 104,  -1,  -1,  -1}, | 
|---|
| 176 | { 71,  72, 103, 105,  -1,  -1}, | 
|---|
| 177 | { 72,  73, 104, 106,  -1,  -1}, | 
|---|
| 178 | { 73,  74, 105, 107,  -1,  -1}, | 
|---|
| 179 | { 74,  75, 106, 108,  -1,  -1}, | 
|---|
| 180 | { 75,  76, 107, 109,  -1,  -1}, | 
|---|
| 181 | { 76, 108, 110,  -1,  -1,  -1}, | 
|---|
| 182 | { 76,  77, 109, 111,  -1,  -1},  // 110 | 
|---|
| 183 | { 77,  78, 110, 112,  -1,  -1}, | 
|---|
| 184 | { 78,  79, 111, 113,  -1,  -1}, | 
|---|
| 185 | { 79,  80, 112, 114,  -1,  -1}, | 
|---|
| 186 | { 80,  81, 113, 115,  -1,  -1}, | 
|---|
| 187 | { 81, 114, 116,  -1,  -1,  -1}, | 
|---|
| 188 | { 81,  82, 115, 117,  -1,  -1}, | 
|---|
| 189 | { 82,  83, 116, 118,  -1,  -1}, | 
|---|
| 190 | { 83,  84, 117, 119,  -1,  -1}, | 
|---|
| 191 | { 84,  85, 118, 120,  -1,  -1}, | 
|---|
| 192 | { 85,  86, 119, 121,  -1,  -1},  // 120 | 
|---|
| 193 | { 86, 120, 122,  -1,  -1,  -1}, | 
|---|
| 194 | { 86,  87, 121, 123,  -1,  -1}, | 
|---|
| 195 | { 87,  88, 122, 124,  -1,  -1}, | 
|---|
| 196 | { 88,  89, 123, 125,  -1,  -1}, | 
|---|
| 197 | { 89,  90, 124, 126,  -1,  -1}, | 
|---|
| 198 | { 61,  90,  91, 125,  -1,  -1}   // 126 | 
|---|
| 199 | }; | 
|---|
| 200 |  | 
|---|
| 201 | for (Int_t i=0; i<127; i++) | 
|---|
| 202 | (*this)[i].SetNeighbors(nn[i][0], nn[i][1], nn[i][2], | 
|---|
| 203 | nn[i][3], nn[i][4], nn[i][5]); | 
|---|
| 204 | } | 
|---|
| 205 |  | 
|---|
| 206 | // -------------------------------------------------------------------------- | 
|---|
| 207 | // | 
|---|
| 208 | //  Calculate the geometry information of CT1 and fill this information | 
|---|
| 209 | //  into the pixel objects. | 
|---|
| 210 | // | 
|---|
| 211 | void MGeomCamCT1Daniel::CreateCam() | 
|---|
| 212 | { | 
|---|
| 213 | // | 
|---|
| 214 | // fill the geometry class with the coordinates of the CT1 camera | 
|---|
| 215 | // | 
|---|
| 216 | //*fLog << inf << " Create CT1 geometry " << endl; | 
|---|
| 217 |  | 
|---|
| 218 | // | 
|---|
| 219 | // this algorithm is from Martin Kestel originally | 
|---|
| 220 | // it was punt into a root/C++ context by Harald Kornmayer and Thomas Bretz | 
|---|
| 221 |  | 
|---|
| 222 | const Float_t diameter = 21;    // units are mm | 
|---|
| 223 | const Float_t kS32  = sqrt(3)/2; | 
|---|
| 224 |  | 
|---|
| 225 | // | 
|---|
| 226 | //  add the first pixel to the list | 
|---|
| 227 | // | 
|---|
| 228 | Int_t pixnum = 0; | 
|---|
| 229 |  | 
|---|
| 230 | (*this)[pixnum++].Set(0, 0, diameter); | 
|---|
| 231 |  | 
|---|
| 232 | for (Int_t ring=1; ring<7; ring++) | 
|---|
| 233 | { | 
|---|
| 234 | // | 
|---|
| 235 | // calc. coords for this ring counting from the | 
|---|
| 236 | // starting number to the ending number | 
|---|
| 237 | // | 
|---|
| 238 | for (int i=0; i<ring; i++) | 
|---|
| 239 | (*this)[pixnum++].Set((ring-i*0.5)*diameter, | 
|---|
| 240 | i*kS32*diameter, | 
|---|
| 241 | diameter); | 
|---|
| 242 |  | 
|---|
| 243 | for (int i=0; i<ring; i++) | 
|---|
| 244 | (*this)[pixnum++].Set((ring*0.5-i)*diameter, | 
|---|
| 245 | ring*kS32 * diameter, | 
|---|
| 246 | diameter); | 
|---|
| 247 |  | 
|---|
| 248 | for (int i=0; i<ring; i++) | 
|---|
| 249 | (*this)[pixnum++].Set(-(ring+i)*0.5*diameter, | 
|---|
| 250 | (ring-i)*kS32*diameter, | 
|---|
| 251 | diameter); | 
|---|
| 252 |  | 
|---|
| 253 | for (int i=0; i<ring; i++) | 
|---|
| 254 | (*this)[pixnum++].Set((0.5*i-ring)*diameter, | 
|---|
| 255 | -i*kS32*diameter, | 
|---|
| 256 | diameter); | 
|---|
| 257 |  | 
|---|
| 258 | for (int i=0; i<ring; i++) | 
|---|
| 259 | (*this)[pixnum++].Set((i-ring*0.5)*diameter, | 
|---|
| 260 | -ring*kS32 * diameter, | 
|---|
| 261 | diameter); | 
|---|
| 262 |  | 
|---|
| 263 | for (int i=0; i<ring; i++) | 
|---|
| 264 | (*this)[pixnum++].Set((ring+i)*0.5*diameter, | 
|---|
| 265 | (-ring+i)*kS32*diameter, | 
|---|
| 266 | diameter); | 
|---|
| 267 | } | 
|---|
| 268 | } | 
|---|
| 269 |  | 
|---|