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

Last change on this file since 373 was 294, checked in by harald, 25 years ago
This is a part of the development of Jose Carlos Gonzales. This directory contains some classes to read in the CORSIKA output of the mmcs program. This directory is needed by the reflector program. Now all is under CVS control and one has to take CVS for further developments.
File size: 5.9 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 // show the seeds in the console
197 inline void print_seeds ( void ) {
198 Int_t i;
199 cout << "Seeds status at the beginning of this shower:"
200 << setiosflags(ios::left) << setw(10) << endl;
201 for (i=0; i<NumRndSeq; ++i) {
202 cout << "SEED "
203 << RndData[i][0]
204 << RndData[i][1]
205 << RndData[i][2] << endl;
206 }
207 cout << resetiosflags(ios::left);
208 }
209
210 // fill essential information
211 inline void fill ( Float_t theEvtNumber,
212 Float_t thePrimaryID,
213 Float_t theEtotal,
214 Float_t theFirstTarget,
215 Float_t thezFirstInt,
216 Float_t thepx,
217 Float_t thepy,
218 Float_t thepz,
219 Float_t theTheta,
220 Float_t thePhi,
221 Float_t theX,
222 Float_t theY) {
223
224 strcpy(EVTH,"EVTH");
225 EvtNumber = theEvtNumber;
226 PrimaryID = thePrimaryID;
227 Etotal = theEtotal;
228 FirstTarget = theFirstTarget;
229 zFirstInt = thezFirstInt;
230 p[0] = thepx;
231 p[1] = thepy;
232 p[2] = thepz;
233 Theta = theTheta;
234 Phi = thePhi;
235 Thick0 = 0.0;
236 CorePos[0][0] = theX;
237 CorePos[1][0] = theY;
238
239 return;
240 }
241
242};
243// @endcode
244
245#endif // not defined COREventHeader_Class
Note: See TracBrowser for help on using the repository browser.