source: trunk/MagicSoft/Simulation/Detector/include-MC/MCEventHeader_2.hxx@ 2987

Last change on this file since 2987 was 2343, checked in by blanch, 21 years ago
Member function to get view_cone.
File size: 9.4 KB
Line 
1/////////////////////////////////////////////////////////////////
2//
3// MCEventHeader_2
4//
5// Created: Sat Oct 19 12:11:43 CEST 2002
6// Author: Oscar Blanch Bigas
7// Purpose: Base class for reflector 0.6 EventHeader
8// Notes:
9//
10/////////////////////////////////////////////////////////////////
11
12// @T \newpage
13
14// @section Source code of {\tt MCEventHeader_2.hxx}
15
16/* @text
17This section shows the include file {\tt MCEventHeader_2.hxx}
18@endtext */
19
20#ifndef MCEventHeader_2_Class
21#define MCEventHeader_2_Class
22
23// @subsection Include files
24
25// @code
26#ifdef __ROOT__
27#include "TROOT.h"
28#include "TObject.h"
29#else // not __ROOT__
30#include "Rtypes.h"
31#endif
32
33#include <iostream.h>
34#include <iomanip.h>
35#include <fstream.h>
36#include <stdlib.h>
37#include <math.h>
38
39#include "COREventHeader.hxx"
40
41#define SIZE_OF_MCEVENTHEADER_2 181 /* floats */
42
43// @endcode
44
45// @subsection Class {\em MCEventHeader_2}: Definition
46
47// @code
48class MCEventHeader_2 {
49
50protected:
51 Float_t EvtNumber;
52 Float_t PrimaryID;
53 Float_t Etotal;
54 Float_t Thick0;
55 Float_t FirstTarget;
56 Float_t zFirstInt;
57 Float_t p[3];
58 Float_t Theta;
59 Float_t Phi;
60
61 Float_t NumRndSeq;
62 Float_t RndData[10][3];
63
64 Float_t RunNumber;
65 Float_t DateRun;
66 Float_t VersionPGM;
67
68 Float_t NumObsLev;
69 Float_t HeightLev[10];
70
71 Float_t SlopeSpec;
72 Float_t ELowLim;
73 Float_t EUppLim;
74
75 Float_t Ecutoffh;
76 Float_t Ecutoffm;
77 Float_t Ecutoffe;
78 Float_t Ecutoffg;
79
80 Float_t NFLAIN;
81 Float_t NFLDIF;
82 Float_t NFLPI0;
83 Float_t NFLPIF;
84 Float_t NFLCHE;
85 Float_t NFRAGM;
86
87 Float_t Bx;
88 Float_t By;
89
90 Float_t EGS4yn;
91 Float_t NKGyn;
92 Float_t GHEISHAyn;
93 Float_t VENUSyn;
94 Float_t CERENKOVyn;
95 Float_t NEUTRINOyn;
96 Float_t HORIZONTyn;
97 Float_t COMPUTER;
98
99 Float_t ThetaMin;
100 Float_t ThetaMax;
101 Float_t PhiMin;
102 Float_t PhiMax;
103
104 Float_t CBunchSize;
105 Float_t CDetInX,CDetInY;
106 Float_t CSpacInX,CSpacInY;
107 Float_t CLenInX,CLenInY;
108 Float_t COutput;
109
110 Float_t AngleNorthX;
111 Float_t MuonInfo;
112
113 Float_t StepLength;
114 Float_t CWaveLower;
115 Float_t CWaveUpper;
116 Float_t Multipl;
117 Float_t CorePos[2][20];
118 Float_t SIBYLL[2];
119 Float_t QGSJET[2];
120 Float_t DPMJET[2];
121 Float_t VENUS_cross;
122 Float_t mu_mult_scat;
123 Float_t NKG_range;
124 Float_t EFRCTHN[2];
125 Float_t WMAX[2];
126 Float_t rthin_rmax;
127
128 Float_t viewcone_angles[2];
129 /* (degrees) Inner and outer angles in
130 * Corsika's VIEWCONE option. This is
131 * only possible with Corsika>6 versions. In
132 * that case, PhiMin=PhiMax and
133 * ThetaMin=ThetaMax (also in this header)
134 * indicate the axis of this cone.
135 */
136
137 /* ^^^ Up to here, the info from the CORSIKA event header. */
138
139 /* Telescope orientation: */
140 Float_t telescopePhi; /* rad */
141 Float_t telescopeTheta; /* rad */
142
143 /* Time of first and last photon: */
144 Float_t TimeFirst;
145 Float_t TimeLast;
146
147 /* 6 parameters and chi2 of the NKG fit to the longitudinal
148 * particle distribution (see CORSIKA manual for explanation):
149 */
150 Float_t longi_Nmax;
151 Float_t longi_t0;
152 Float_t longi_tmax;
153 Float_t longi_a;
154 Float_t longi_b;
155 Float_t longi_c;
156 Float_t longi_chi2;
157
158 Float_t CORSIKAPhs; // Original photons written by Corsika
159 Float_t AtmAbsPhs; // Photons absorved by the atmosphere
160 Float_t MirrAbsPhs; // Photons absorved by the mirrors
161 Float_t OutOfMirrPhs; // Photons outside the mirror
162 Float_t BlackSpotPhs; // Photons lost in the "black spot"
163 Float_t OutOfChamPhs; // Photons outside the chamber
164 Float_t CPhotons; // Photons reaching the chamber
165
166 /* Now follow the fraction of photons reaching the camera produced by
167 * electrons, muons and other particles respectively:
168 */
169 Float_t elec_cph_fraction;
170 Float_t muon_cph_fraction;
171 Float_t other_cph_fraction;
172
173 Float_t dummy[7]; /* not used */
174
175public:
176 MCEventHeader_2(void) {} // default constructor
177
178 virtual ~MCEventHeader_2(void) {} // default destructor
179
180 // reads EventHeader from binary input stream
181 Int_t read ( ifstream &is ) {
182 is.read ( (char *)this, mysize() );
183 return is.gcount();
184 }
185
186 // writes EventHeader to binary output stream
187 Int_t write ( ofstream &os ) {
188 os.write ( (char *)this, mysize() );
189 return 0;
190 }
191
192 // get information about the EventHeader
193
194 // get the event number
195 inline Float_t get_evt_number (void) {return EvtNumber;}
196
197 // get the primary type (GEANT code)
198 inline Float_t get_primary ( void ) { return ( PrimaryID ); }
199
200 // get the total primary energy
201 inline Float_t get_energy ( void ) { return ( Etotal ); }
202
203 // get Thick0
204 inline Float_t get_thick0 (void) { return Thick0;}
205
206 // get First Target
207 inline Float_t get_first_target (void) {return FirstTarget;}
208
209 // get z first interaction
210 inline Float_t get_z_first_int (void) {return zFirstInt;}
211
212 // get the initial zenith angle
213 inline Float_t get_theta ( void ) { return ( Theta ); }
214
215 // get the initial phi angle
216 inline Float_t get_phi ( void ) { return ( Phi ); }
217
218 // get the telescope zenith angle
219 inline Float_t get_theta_CT ( void ) { return ( telescopeTheta ); }
220
221 // get the telescope phi angle
222 inline Float_t get_phi_CT ( void ) { return ( telescopePhi ); }
223
224 // get the spectrum slope
225 inline Float_t get_slope ( void ) { return ( SlopeSpec ); }
226
227 // get height of first interaction (in cm)
228 inline Float_t get_height ( void ) { return ( zFirstInt ); }
229
230 // get the energy range of this run
231 inline void get_energy_range ( Float_t *elow, Float_t *eup ) {
232 *elow = ELowLim;
233 *eup = EUppLim;
234 }
235
236 // get the theta range of this run
237 inline void get_theta_range ( Float_t *thlow, Float_t *thup ) {
238 *thlow = ThetaMin;
239 *thup = ThetaMax;
240 }
241
242 inline void get_viewcone ( Float_t *rmin, Float_t *rmax){
243 *rmin=viewcone_angles[0];
244 *rmax=viewcone_angles[1];
245}
246
247 // get the energy range of this run
248 inline void get_phi_range ( Float_t *plow, Float_t *pup ) {
249 *plow = PhiMin;
250 *pup = PhiMax;
251 }
252
253 // get the core position
254 inline Float_t get_core ( Float_t *x, Float_t *y, Int_t ncore = 0 ) {
255 *x = CorePos[0][ncore];
256 *y = CorePos[1][ncore];
257 return ( (Float_t) sqrt ( (*x)*(*x) + (*y)*(*y) ) );
258 }
259
260 // get the core position
261 inline Float_t get_core ( Int_t ncore = 0 ) {
262 return ( (Float_t) sqrt ( ((CorePos[0][ncore])*(CorePos[0][ncore]))+
263 ((CorePos[1][ncore])*(CorePos[1][ncore])) ) );
264 }
265
266 // get the core position in X
267 inline Float_t get_coreX ( Int_t ncore = 0 ) {
268 return ( (Float_t) CorePos[0][ncore] );
269 }
270
271 // get the core position in Y
272 inline Float_t get_coreY ( Int_t ncore = 0 ) {
273 return ( (Float_t) CorePos[1][ncore] );
274 }
275
276 //get photons at different stages
277 inline Float_t get_CORSIKA (){ return CORSIKAPhs;}
278
279 inline Float_t get_AtmAbs (){ return AtmAbsPhs;}
280
281 inline Float_t get_MirrAbs (){ return MirrAbsPhs;}
282
283 inline Float_t get_OutOfMirr (){ return OutOfMirrPhs;}
284
285 inline Float_t get_BlackSpot (){ return BlackSpotPhs;}
286
287 inline Float_t get_OutOfCham (){ return OutOfChamPhs;}
288
289 inline Float_t get_CPhotons (){ return CPhotons;}
290
291 inline Float_t get_NumObsLev (){return NumObsLev;}
292
293 inline Float_t get_HeightLev (Int_t i) {return HeightLev[i];}
294
295 inline Float_t get_VersionPGM () {return VersionPGM;}
296
297 inline Float_t get_RunNumber () {return RunNumber;}
298
299 inline Float_t get_DateRun () {return DateRun;}
300
301 inline Float_t get_NumRndSeq () {return NumRndSeq;}
302
303 inline Float_t get_CWaveLower() {return CWaveLower;}
304
305 inline Float_t get_CWaveUpper() {return CWaveUpper;}
306
307 inline Float_t get_ElecFraction() {return elec_cph_fraction;}
308
309 inline Float_t get_MuonFraction() {return muon_cph_fraction;}
310
311 inline Float_t get_OtherFraction() {return other_cph_fraction;}
312
313 // transport from COREventHeader to MCEventHeader_2
314 void transport ( COREventHeader *e );
315
316 // write extreme times
317 inline void put_times ( Float_t t1, Float_t t2 ) {
318 TimeFirst = t1;
319 TimeLast = t2;
320 }
321
322 // get extreme times
323 inline Float_t get_times ( Float_t *t1, Float_t *t2 ) {
324 *t1 = TimeFirst;
325 *t2 = TimeLast;
326 return ( TimeLast - TimeFirst );
327 }
328
329 inline Float_t get_NKGfit(Float_t *Nmax, Float_t *t0, Float_t *tmax,
330 Float_t *a, Float_t *b, Float_t *c){
331 *Nmax=longi_Nmax; *t0=longi_t0; *tmax=longi_tmax;
332 *a=longi_a; *b=longi_b; *c=longi_c;
333
334 return longi_chi2;
335
336 }
337
338 inline int mysize(void)
339 { return ( sizeof( float ) * SIZE_OF_MCEVENTHEADER_2 ); }
340
341 // get deviations of the CT from the original shower direction
342 inline Float_t get_deviations ( Float_t *t1, Float_t *t2 ) {
343
344 float ct1,st1,cp1,sp1;
345 float ct2,st2,cp2,sp2;
346 float x1,y1,z1;
347 float x2,y2,z2;
348
349 ct1 = cos(Theta);
350 st1 = sin(Theta);
351 cp1 = cos(Phi);
352 sp1 = sin(Phi);
353
354 ct2 = cos(telescopeTheta);
355 st2 = sin(telescopeTheta);
356 cp2 = cos(telescopePhi);
357 sp2 = sin(telescopePhi);
358
359 x1 = st1*cp1; y1 = st1*sp1; z1 = ct1;
360 x2 = st2*cp2; y2 = st2*sp2; z2 = ct2;
361
362 *t1 = (telescopeTheta-Theta);
363 *t2 = (telescopePhi-Phi);
364
365 return ( acos(x1*x2 + y1*y2 + z1*z2) );
366 }
367
368 inline void print ( void ) {
369 float *ptr = (float *)this;
370 for(int i=0; i<SIZE_OF_MCEVENTHEADER_2; ++i,++ptr)
371 cerr << i << ':' << *ptr << '\n';
372 }
373
374};
375// @endcode
376
377#endif // not defined MCEventHeader_2_Class
Note: See TracBrowser for help on using the repository browser.