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

Last change on this file since 1573 was 1562, checked in by blanch, 23 years ago
Header file for MCEventHeader_2.cxx
File size: 8.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 178 /* 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 Float_t dummy[10]; /* not used */
167
168public:
169 MCEventHeader_2(void) {} // default constructor
170
171 virtual ~MCEventHeader_2(void) {} // default destructor
172
173 // reads EventHeader from binary input stream
174 Int_t read ( ifstream &is ) {
175 is.read ( (char *)this, mysize() );
176 return is.gcount();
177 }
178
179 // writes EventHeader to binary output stream
180 Int_t write ( ofstream &os ) {
181 os.write ( (char *)this, mysize() );
182 return 0;
183 }
184
185 // get information about the EventHeader
186
187 // get the primary type (GEANT code)
188 inline Float_t get_primary ( void ) { return ( PrimaryID ); }
189
190 // get the total primary energy
191 inline Float_t get_energy ( void ) { return ( Etotal ); }
192
193 // get the initial zenith angle
194 inline Float_t get_theta ( void ) { return ( Theta ); }
195
196 // get the initial phi angle
197 inline Float_t get_phi ( void ) { return ( Phi ); }
198
199 // get the telescope zenith angle
200 inline Float_t get_theta_CT ( void ) { return ( telescopeTheta ); }
201
202 // get the telescope phi angle
203 inline Float_t get_phi_CT ( void ) { return ( telescopePhi ); }
204
205 // get the spectrum slope
206 inline Float_t get_slope ( void ) { return ( SlopeSpec ); }
207
208 // get height of first interaction (in cm)
209 inline Float_t get_height ( void ) { return ( zFirstInt ); }
210
211 // get the energy range of this run
212 inline void get_energy_range ( Float_t *elow, Float_t *eup ) {
213 *elow = ELowLim;
214 *eup = EUppLim;
215 }
216
217 // get the theta range of this run
218 inline void get_theta_range ( Float_t *thlow, Float_t *thup ) {
219 *thlow = ThetaMin;
220 *thup = ThetaMax;
221 }
222
223 // get the energy range of this run
224 inline void get_phi_range ( Float_t *plow, Float_t *pup ) {
225 *plow = PhiMin;
226 *pup = PhiMax;
227 }
228
229 // get the core position
230 inline Float_t get_core ( Float_t *x, Float_t *y, Int_t ncore = 0 ) {
231 *x = CorePos[0][ncore];
232 *y = CorePos[1][ncore];
233 return ( (Float_t) sqrt ( (*x)*(*x) + (*y)*(*y) ) );
234 }
235
236 // get the core position
237 inline Float_t get_core ( Int_t ncore = 0 ) {
238 return ( (Float_t) sqrt ( ((CorePos[0][ncore])*(CorePos[0][ncore]))+
239 ((CorePos[1][ncore])*(CorePos[1][ncore])) ) );
240 }
241
242 // get the core position in X
243 inline Float_t get_coreX ( Int_t ncore = 0 ) {
244 return ( (Float_t) CorePos[0][ncore] );
245 }
246
247 // get the core position in Y
248 inline Float_t get_coreY ( Int_t ncore = 0 ) {
249 return ( (Float_t) CorePos[1][ncore] );
250 }
251
252 //get photons at different stages
253 inline Float_t get_CORSIKA (){ return CORSIKAPhs;}
254
255 inline Float_t get_AtmAbs (){ return AtmAbsPhs;}
256
257 inline Float_t get_MirrAbs (){ return MirrAbsPhs;}
258
259 inline Float_t get_OutOfMirr (){ return OutOfMirrPhs;}
260
261 inline Float_t get_BlackSpot (){ return BlackSpotPhs;}
262
263 inline Float_t get_OutOfCham (){ return OutOfChamPhs;}
264
265 inline Float_t get_CPhotons (){ return CPhotons;}
266
267 inline Float_t get_NumObsLev (){return NumObsLev;}
268
269 inline Float_t get_HeightLev (Int_t i) {return HeightLev[i];}
270
271 inline Float_t get_VersionPGM () {return VersionPGM;}
272
273 inline Float_t get_RunNumber () {return RunNumber;}
274
275 inline Float_t get_DateRun () {return DateRun;}
276
277 inline Float_t get_NumRndSeq () {return NumRndSeq;}
278
279 inline Float_t get_CWaveLower() {return CWaveLower;}
280
281 inline Float_t get_CWaveUpper() {return CWaveUpper;}
282
283 // transport from COREventHeader to MCEventHeader_2
284 void transport ( COREventHeader *e );
285
286 // write extreme times
287 inline void put_times ( Float_t t1, Float_t t2 ) {
288 TimeFirst = t1;
289 TimeLast = t2;
290 }
291
292 // get extreme times
293 inline Float_t get_times ( Float_t *t1, Float_t *t2 ) {
294 *t1 = TimeFirst;
295 *t2 = TimeLast;
296 return ( TimeLast - TimeFirst );
297 }
298
299 inline int mysize(void)
300 { return ( sizeof( float ) * SIZE_OF_MCEVENTHEADER_2 ); }
301
302 // get deviations of the CT from the original shower direction
303 inline Float_t get_deviations ( Float_t *t1, Float_t *t2 ) {
304
305 float ct1,st1,cp1,sp1;
306 float ct2,st2,cp2,sp2;
307 float x1,y1,z1;
308 float x2,y2,z2;
309
310 ct1 = cos(Theta);
311 st1 = sin(Theta);
312 cp1 = cos(Phi);
313 sp1 = sin(Phi);
314
315 ct2 = cos(telescopeTheta);
316 st2 = sin(telescopeTheta);
317 cp2 = cos(telescopePhi);
318 sp2 = sin(telescopePhi);
319
320 x1 = st1*cp1; y1 = st1*sp1; z1 = ct1;
321 x2 = st2*cp2; y2 = st2*sp2; z2 = ct2;
322
323 *t1 = (telescopeTheta-Theta);
324 *t2 = (telescopePhi-Phi);
325
326 return ( acos(x1*x2 + y1*y2 + z1*z2) );
327 }
328
329 inline void print ( void ) {
330 float *ptr = (float *)this;
331 for(int i=0; i<SIZE_OF_MCEVENTHEADER_2; ++i,++ptr)
332 cerr << i << ':' << *ptr << '\n';
333 }
334
335};
336// @endcode
337
338#endif // not defined MCEventHeader_2_Class
Note: See TracBrowser for help on using the repository browser.