source: trunk/MagicSoft/Simulation/Detector/include-CORSIKA/COREventHeader.hxx@ 421

Last change on this file since 421 was 421, checked in by harald, 24 years ago
One member function more to get the height of first interaction.
File size: 6.6 KB
Line 
1/////////////////////////////////////////////////////////////////
2//
3// COREventHeader
4//
5// Created: Tue Apr 28 16:27:14 1998
6// Author: Jose Carlos Gonzales
7// Purpose: Base class for EventHeader-classes
8// Notes:
9//
10/////////////////////////////////////////////////////////////////
11
12// @T \newpage
13
14// @section Source code of {\tt COREventHeader.hxx}
15
16/* @text
17This section shows the include file {\tt COREventHeader.hxx}
18@endtext */
19
20#ifndef COREventHeader_Class
21#define COREventHeader_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// @endcode
39
40// @subsection Class {\em COREventHeader}: Definition
41
42// @code
43class COREventHeader {
44
45public:
46 char EVTH[4];
47 Float_t EvtNumber;
48 Float_t PrimaryID;
49 Float_t Etotal;
50 Float_t Thick0;
51 Float_t FirstTarget;
52 Float_t zFirstInt;
53 Float_t p[3];
54 Float_t Theta;
55 Float_t Phi;
56
57 Float_t NumRndSeq;
58 Float_t RndData[10][3];
59
60 Float_t RunNumber;
61 Float_t DateRun;
62 Float_t VersionPGM;
63
64 Float_t NumObsLev;
65 Float_t HeightLev[10];
66
67 Float_t SlopeSpec;
68 Float_t ELowLim;
69 Float_t EUppLim;
70
71 Float_t Ecutoffh;
72 Float_t Ecutoffm;
73 Float_t Ecutoffe;
74 Float_t Ecutoffg;
75
76 Float_t NFLAIN;
77 Float_t NFLDIF;
78 Float_t NFLPI0;
79 Float_t NFLPIF;
80 Float_t NFLCHE;
81 Float_t NFRAGM;
82
83 Float_t Bx;
84 Float_t By;
85
86 Float_t EGS4yn;
87 Float_t NKGyn;
88 Float_t GHEISHAyn;
89 Float_t VENUSyn;
90 Float_t CERENKOVyn;
91 Float_t NEUTRINOyn;
92 Float_t HORIZONTyn;
93 Float_t COMPUTER;
94
95 Float_t ThetaMin;
96 Float_t ThetaMax;
97 Float_t PhiMin;
98 Float_t PhiMax;
99
100 Float_t CBunchSize;
101 Float_t CDetInX,CDetInY;
102 Float_t CSpacInX,CSpacInY;
103 Float_t CLenInX,CLenInY;
104 Float_t COutput;
105
106 Float_t AngleNorthX;
107 Float_t MuonInfo;
108
109 Float_t StepLength;
110 Float_t CWaveLower;
111 Float_t CWaveUpper;
112 Float_t Multipl;
113 Float_t CorePos[2][20];
114
115 Float_t dmmy1;
116 Float_t SpinTheta;
117 Float_t SpinPhi;
118 Float_t dmmy2[132];
119
120public:
121 COREventHeader(void) {} // default constructor
122
123 virtual ~COREventHeader(void) {} // default destructor
124
125 // reads EventHeader from binary input stream
126 Int_t read ( ifstream &is ) {
127 is.read ( (char *)this, sizeof( float ) * 273 );
128 return is.gcount();
129 }
130
131 // writes EventHeader to binary output stream
132 Int_t write ( ofstream &os ) {
133 os.write ( (char *)this, sizeof( float ) * 273 );
134 return 0;
135 }
136
137 // get information about the EventHeader
138
139 // print-out of the EVTH
140 void print(void);
141
142 // get the primary type (GEANT code)
143 inline Float_t get_primary ( void ) { return ( PrimaryID ); }
144
145 // get the total primary energy
146 inline Float_t get_energy ( void ) { return ( Etotal ); }
147
148 // get the initial zenith angle
149 inline Float_t get_theta ( void ) { return ( Theta ); }
150
151 // get the initial phi angle
152 inline Float_t get_phi ( void ) { return ( Phi ); }
153
154 // get the particle xi angle
155 inline Float_t get_xi ( void ) { return ( SpinTheta ); }
156
157 // get the particle spin-theta angle
158 inline Float_t get_stheta ( void ) { return ( SpinTheta ); }
159
160 // get the particle spin-phi angle
161 inline Float_t get_sphi ( void ) { return ( SpinPhi ); }
162
163 // get the particle real angles of the particle
164 void get_real_direct ( Float_t *theta, Float_t *phi ) {
165 *theta = acos(cos(Theta)*cos(SpinTheta)+
166 sin(Theta)*sin(SpinTheta)*cos(fabs(SpinPhi)));
167 *phi = asin(sin(SpinTheta)*sin(fabs(SpinPhi))/sin(*theta));
168 if (SpinPhi<0.0)
169 *phi = Phi - *phi;
170 else
171 *phi = Phi + *phi;
172 }
173
174 // get the spectrum slope
175 inline Float_t get_slope ( void ) { return ( SlopeSpec ); }
176
177 // get the energy range of this run
178 inline void get_energy_range ( Float_t *elow, Float_t *eup ) {
179 *elow = ELowLim;
180 *eup = EUppLim;
181 }
182
183 // get the core position
184 inline Float_t get_core ( Float_t *x, Float_t *y, Int_t ncore = 0 ) {
185 *x = CorePos[0][ncore];
186 *y = CorePos[1][ncore];
187 return ( (Float_t) sqrt ( (*x)*(*x) + (*y)*(*y) ) );
188 }
189
190 // get the core position
191 inline Float_t get_core ( Int_t ncore = 0 ) {
192 return ( (Float_t) sqrt ( ((CorePos[0][ncore])*(CorePos[0][ncore]))+
193 ((CorePos[1][ncore])*(CorePos[1][ncore])) ) );
194 }
195
196 // get the coreX position
197 inline Float_t get_coreX ( Int_t ncore = 0 ) {
198 return ( CorePos[0][ncore] ) ;
199 }
200
201 // get the coreY position
202 inline Float_t get_coreY ( Int_t ncore = 0 ) {
203 return ( CorePos[1][ncore] ) ;
204 }
205
206 // get the zFirstInteraction position
207 inline Float_t get_firstInt () {
208 return ( zFirstInt ) ;
209 }
210
211 // show the seeds in the console
212 inline void print_seeds ( void ) {
213 Int_t i;
214 cout << "Seeds status at the beginning of this shower:"
215 << setiosflags(ios::left) << setw(10) << endl;
216 for (i=0; i<NumRndSeq; ++i) {
217 cout << "SEED "
218 << RndData[i][0]
219 << RndData[i][1]
220 << RndData[i][2] << endl;
221 }
222 cout << resetiosflags(ios::left);
223 }
224
225 // fill essential information
226 inline void fill ( Float_t theEvtNumber,
227 Float_t thePrimaryID,
228 Float_t theEtotal,
229 Float_t theFirstTarget,
230 Float_t thezFirstInt,
231 Float_t thepx,
232 Float_t thepy,
233 Float_t thepz,
234 Float_t theTheta,
235 Float_t thePhi,
236 Float_t theX,
237 Float_t theY) {
238
239 strcpy(EVTH,"EVTH");
240 EvtNumber = theEvtNumber;
241 PrimaryID = thePrimaryID;
242 Etotal = theEtotal;
243 FirstTarget = theFirstTarget;
244 zFirstInt = thezFirstInt;
245 p[0] = thepx;
246 p[1] = thepy;
247 p[2] = thepz;
248 Theta = theTheta;
249 Phi = thePhi;
250 Thick0 = 0.0;
251 CorePos[0][0] = theX;
252 CorePos[1][0] = theY;
253
254 return;
255 }
256
257 void Print () {
258 //
259 // Print the important content on the screen
260 //
261
262 cout << endl ;
263 cout << " **********" << endl ;
264 cout << " EventNb: " << EvtNumber << " Particle " << PrimaryID << endl ;
265 cout << " Energy: " << Etotal
266 << " Theta: " << Theta
267 << " Phi: " << Phi
268 << endl ;
269 cout << " Core(x/y): (" << get_coreX() <<"/"<< get_coreY() << ")"
270 << endl ;
271
272 cout << endl ;
273 }
274};
275// @endcode
276
277#endif // not defined COREventHeader_Class
Note: See TracBrowser for help on using the repository browser.