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

Last change on this file since 1725 was 1719, checked in by blanch, 22 years ago
Variable members with inforamtion about elec, muon and other fraction have been introduced as well as member functions to ge them.
File size: 9.3 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 // get the energy range of this run
243 inline void get_phi_range ( Float_t *plow, Float_t *pup ) {
244 *plow = PhiMin;
245 *pup = PhiMax;
246 }
247
248 // get the core position
249 inline Float_t get_core ( Float_t *x, Float_t *y, Int_t ncore = 0 ) {
250 *x = CorePos[0][ncore];
251 *y = CorePos[1][ncore];
252 return ( (Float_t) sqrt ( (*x)*(*x) + (*y)*(*y) ) );
253 }
254
255 // get the core position
256 inline Float_t get_core ( Int_t ncore = 0 ) {
257 return ( (Float_t) sqrt ( ((CorePos[0][ncore])*(CorePos[0][ncore]))+
258 ((CorePos[1][ncore])*(CorePos[1][ncore])) ) );
259 }
260
261 // get the core position in X
262 inline Float_t get_coreX ( Int_t ncore = 0 ) {
263 return ( (Float_t) CorePos[0][ncore] );
264 }
265
266 // get the core position in Y
267 inline Float_t get_coreY ( Int_t ncore = 0 ) {
268 return ( (Float_t) CorePos[1][ncore] );
269 }
270
271 //get photons at different stages
272 inline Float_t get_CORSIKA (){ return CORSIKAPhs;}
273
274 inline Float_t get_AtmAbs (){ return AtmAbsPhs;}
275
276 inline Float_t get_MirrAbs (){ return MirrAbsPhs;}
277
278 inline Float_t get_OutOfMirr (){ return OutOfMirrPhs;}
279
280 inline Float_t get_BlackSpot (){ return BlackSpotPhs;}
281
282 inline Float_t get_OutOfCham (){ return OutOfChamPhs;}
283
284 inline Float_t get_CPhotons (){ return CPhotons;}
285
286 inline Float_t get_NumObsLev (){return NumObsLev;}
287
288 inline Float_t get_HeightLev (Int_t i) {return HeightLev[i];}
289
290 inline Float_t get_VersionPGM () {return VersionPGM;}
291
292 inline Float_t get_RunNumber () {return RunNumber;}
293
294 inline Float_t get_DateRun () {return DateRun;}
295
296 inline Float_t get_NumRndSeq () {return NumRndSeq;}
297
298 inline Float_t get_CWaveLower() {return CWaveLower;}
299
300 inline Float_t get_CWaveUpper() {return CWaveUpper;}
301
302 inline Float_t get_ElecFraction() {return elec_cph_fraction;}
303
304 inline Float_t get_MuonFraction() {return muon_cph_fraction;}
305
306 inline Float_t get_OtherFraction() {return other_cph_fraction;}
307
308 // transport from COREventHeader to MCEventHeader_2
309 void transport ( COREventHeader *e );
310
311 // write extreme times
312 inline void put_times ( Float_t t1, Float_t t2 ) {
313 TimeFirst = t1;
314 TimeLast = t2;
315 }
316
317 // get extreme times
318 inline Float_t get_times ( Float_t *t1, Float_t *t2 ) {
319 *t1 = TimeFirst;
320 *t2 = TimeLast;
321 return ( TimeLast - TimeFirst );
322 }
323
324 inline Float_t get_NKGfit(Float_t *Nmax, Float_t *t0, Float_t *tmax,
325 Float_t *a, Float_t *b, Float_t *c){
326 *Nmax=longi_Nmax; *t0=longi_t0; *tmax=longi_tmax;
327 *a=longi_a; *b=longi_b; *c=longi_c;
328
329 return longi_chi2;
330
331 }
332
333 inline int mysize(void)
334 { return ( sizeof( float ) * SIZE_OF_MCEVENTHEADER_2 ); }
335
336 // get deviations of the CT from the original shower direction
337 inline Float_t get_deviations ( Float_t *t1, Float_t *t2 ) {
338
339 float ct1,st1,cp1,sp1;
340 float ct2,st2,cp2,sp2;
341 float x1,y1,z1;
342 float x2,y2,z2;
343
344 ct1 = cos(Theta);
345 st1 = sin(Theta);
346 cp1 = cos(Phi);
347 sp1 = sin(Phi);
348
349 ct2 = cos(telescopeTheta);
350 st2 = sin(telescopeTheta);
351 cp2 = cos(telescopePhi);
352 sp2 = sin(telescopePhi);
353
354 x1 = st1*cp1; y1 = st1*sp1; z1 = ct1;
355 x2 = st2*cp2; y2 = st2*sp2; z2 = ct2;
356
357 *t1 = (telescopeTheta-Theta);
358 *t2 = (telescopePhi-Phi);
359
360 return ( acos(x1*x2 + y1*y2 + z1*z2) );
361 }
362
363 inline void print ( void ) {
364 float *ptr = (float *)this;
365 for(int i=0; i<SIZE_OF_MCEVENTHEADER_2; ++i,++ptr)
366 cerr << i << ':' << *ptr << '\n';
367 }
368
369};
370// @endcode
371
372#endif // not defined MCEventHeader_2_Class
Note: See TracBrowser for help on using the repository browser.