source: trunk/MagicSoft/Simulation/Detector/Camera/camera.h@ 366

Last change on this file since 366 was 366, checked in by petry, 25 years ago
This version includes drastic changes and belongs to camera.cxx 1.5. It is not yet finished and not immediately useful because the trigger simulation is not yet re-implemented. I had to take it out together with some other stuff in order to tidy the whole program up. This is not meant as an insult to anyone. I needed to do this in order to be able to work on it. This version has been put in the repository in order to be able to share the further development with others. If you need something working, wait or take an earlier one. See file README.
File size: 11.3 KB
Line 
1//=//////////////////////////////////////////////////////////////////////
2//=
3//= camera
4//=
5//= @file camera.h
6//= @desc Header file
7//= @author J C Gonzalez
8//= @email gonzalez@mppmu.mpg.de
9//= @date Thu May 7 16:24:22 1998
10//=
11//=----------------------------------------------------------------------
12//=
13//= Created: Thu May 7 16:24:22 1998
14//= Author: Jose Carlos Gonzalez
15//= Purpose: Program for reflector simulation
16//= Notes: See files README for details
17//=
18//=----------------------------------------------------------------------
19//=
20//= $RCSfile: camera.h,v $
21//= $Revision: 1.4 $
22//= $Author: petry $
23//= $Date: 2000-02-18 17:42:39 $
24//=
25//=//////////////////////////////////////////////////////////////////////
26
27// @T \newpage
28
29//!@section Source code of |camera.h|.
30
31/*!@"
32
33 This section shows the include file |camera.h|
34
35 @"*/
36
37//=-----------------------------------------------------------
38//!@subsection Include files.
39
40//!@{
41
42#include <iostream.h>
43#include <fstream.h>
44#include <stdlib.h>
45#include <stdio.h>
46#include <string.h>
47#include <stdarg.h>
48#include <math.h>
49#include <sys/types.h>
50#include <dirent.h>
51#include <unistd.h>
52#include <libgen.h>
53
54#include "camera-v.h"
55
56#include "jcmacros.h"
57#include "jcdebug.h"
58
59#include "creadparam.h"
60#include "atm.h"
61#include "moments.h"
62
63#include "MCEventHeader.hxx"
64#include "MCCphoton.hxx"
65#include "MTrigger.hxx"
66
67// command line options available
68
69#define COMMAND_LINE_OPTIONS "f:h"
70
71/*@'
72
73 This is C++, but RANLIB routines are written in pure ANSI C.
74 In order to read easily these routines, we must include
75 the following directive
76
77*/
78
79extern "C" {
80#include "ranlib.h"
81}
82
83// version of the reflector program that can read
84
85#define REFL_PROGRAM reflector
86#define REFL_VERSION 0.3
87
88const char REFL_SIGNATURE[] = GLUE_postp( REFL_PROGRAM, REFL_VERSION );
89
90//!@}
91
92//=------------------------------------------------------------
93//!@subsection Macro-definitions, and constants.
94
95//!@{
96
97#define SLICES 19
98#define WIDTH_TIMESLICE 3.3
99
100#define NOTIME 999999999
101
102#define SIN60 0.866025403784439
103#define COS60 0.500000000000000
104
105#define RandomNumber drand48()
106
107#define iMAXNUMPIX 595 // total maximum possible number of pixels in the camera
108
109#define iMAXNUMPHE 50000 // maximum total number of photoelectrons in one event
110
111#define iNUMNSBPRODCALLS 1 // in order to average over the QE simulation, call the
112 // phe production function for the NSB iNUMNSBPRODCALLS times
113
114#define iNUMWAVEBANDS 5 // number of wavebands for the NSB simulation
115
116#define WAVEBANDBOUND1 290. // iNUMWAVEBANDS+1 boundaries for waveband definitions (nm)
117#define WAVEBANDBOUND2 310. // for the NSB generation
118#define WAVEBANDBOUND3 400.
119#define WAVEBANDBOUND4 500.
120#define WAVEBANDBOUND5 600.
121#define WAVEBANDBOUND6 800.
122
123#define EXTWAVEBAND1 3.715 // iNUMWAVEBANDS extinction values in magnitudes per airmass
124#define EXTWAVEBAND2 0.642 // - these values were taken from D.L. King, Isaac Newton Group
125#define EXTWAVEBAND3 0.209 // Tech Note No. 31, they are for a clear night at the ORM,
126#define EXTWAVEBAND4 0.107 // La Palma. The values were averaged in the given wavebands
127#define EXTWAVEBAND5 0.053
128
129#define SIMTIMEOFFSET_NS 5 // determines how many ns before the first and after the last
130 // shower photoelectron, there should be NSB photoelectrons
131
132//@ now we define the list CT_ITEM_LIST of possible items in the CT def. file
133#define CT_ITEM_LIST /* LIST OF ITEMS IN THE CT DEFINITION FILE */ \
134T(type), /* type of definition file */ \
135T(focal_distance), /* std(focal distance) */ \
136T(focal_std), /* focal distance */ \
137T(point_spread), /* std(point spread) */ \
138T(point_std), /* point spread */ \
139T(adjustment_dev), /* std of adjustment deviation */ \
140T(black_spot), /* radius of the black spot in center of mirror */ \
141T(n_mirrors), /* number of mirrors */ \
142T(r_mirror), /* radius of one mirror */ \
143T(camera_width), /* camera width */ \
144T(n_pixels), /* total number of pixels in the camera */ \
145T(n_centralpixels), /* number of central pixels in the camera */ \
146T(n_gappixels), /* number of gap pixels in the camera */ \
147T(pixel_width), /* pixel width */ \
148T(define_mirrors) /* this entry is followed by the def. of pixels */
149
150#define T(x) x //@< define T() as the name as it is
151
152enum CT_ITEM_TYPE {
153 CT_ITEM_LIST
154};
155
156#undef T
157
158#define T(x) #x //@< define T() as the string of x
159
160const char *const CT_ITEM_NAMES[] = {
161 CT_ITEM_LIST
162};
163
164#undef T
165
166
167// TYPE=0 (CT1)
168// i s rho theta x y z thetan phin xn yn zn
169//
170// i : number of the mirror
171// s : arc length [cm]
172// rho : polar rho of the position of the center of the mirror [cm]
173// theta : polar angle of the position of the center of the mirror [cm]
174// x : x coordinate of the center of the mirror [cm]
175// y : y coordinate of the center of the mirror [cm]
176// z : z coordinate of the center of the mirror [cm]
177// thetan : polar theta angle of the direction where the mirror points to
178// phin : polar phi angle of the direction where the mirror points to
179// xn : xn coordinate of the normal vector in the center (normalized)
180// yn : yn coordinate of the normal vector in the center (normalized)
181// zn : zn coordinate of the normal vector in the center (normalized)
182//
183// TYPE=1 (MAGIC)
184// i f sx sy x y z thetan phin
185//
186// i : number of the mirror
187// f : focal distance of that mirror
188// sx : curvilinear coordinate of mirror's center in X[cm]
189// sy : curvilinear coordinate of mirror's center in X[cm]
190// x : x coordinate of the center of the mirror [cm]
191// y : y coordinate of the center of the mirror [cm]
192// z : z coordinate of the center of the mirror [cm]
193// thetan : polar theta angle of the direction where the mirror points to
194// phin : polar phi angle of the direction where the mirror points to
195// xn : xn coordinate of the normal vector in the center (normalized)
196// yn : yn coordinate of the normal vector in the center (normalized)
197// zn : zn coordinate of the normal vector in the center (normalized)
198
199#define CT_I 0
200
201#define CT_S 1
202#define CT_RHO 2
203#define CT_THETA 3
204
205#define CT_FOCAL 1
206#define CT_SX 2
207#define CT_SY 3
208
209#define CT_X 4
210#define CT_Y 5
211#define CT_Z 6
212#define CT_THETAN 7
213#define CT_PHIN 8
214#define CT_XN 9
215#define CT_YN 10
216#define CT_ZN 11
217
218#define CT_NDATA 12
219
220//!@}
221
222//=------------------------------------------------------------
223//!@subsection data types
224
225struct camera { /* camera parameters for imaging */
226 int inumpixels;
227 int inumcentralpixels;
228 int inumgappixels;
229 int inumbigpixels;
230 double dpixdiameter_cm; /* diameter of the central and gap pixels in centimeters */
231 double dpixsizefactor[iMAXNUMPIX]; /* size of the pixel relative to dpixdiameter_deg */
232 double dxc[iMAXNUMPIX]; /* Pixel coordinates in camera coordinate system (x points from pixel 1 to 2). */
233 double dyc[iMAXNUMPIX]; /* The numbering of the pixels in these arrays starts at 0! */
234 double dxpointcorr_deg; /* correction of the pixel coordinates; to be added to dxc[] to get correct value */
235 double dypointcorr_deg; /* correction of the pixel coordinates; to be added to dxc[] to get correct value */
236
237};
238
239class Photoelectron{
240 public:
241 int iarrtime_ns; // arrival time taken from the corresponding photon
242 int ipixnum; // pixel in which the phe was evoked (starts at 0)
243
244 Photoelectron(); // constructor (code in camera.cxx)
245
246};
247
248
249//=------------------------------------------------------------
250//!@subsection Pre-defined file names.
251
252//!@{
253
254#define QE_FILE "../Data/qe.dat"
255
256//!@}
257
258//=------------------------------------------------------------
259//!@subsection Prototypes of functions.
260
261//!@{
262
263//++
264// prototypes
265//--
266
267#define ONoff(x) ((x==TRUE) ? "[ ON ]" : "[ off]")
268
269// Under Linux, the nint function does not exist, so we have to define it.
270#define nint(x) ((int)floor((x)+0.5))
271
272void present(void);
273void usage(void);
274void clean(void);
275void log(const char *funct, char *fmt, ...);
276void error(const char *funct, char *fmt, ...);
277int isA( char * s1, const char * flag );
278void read_ct_file(void);
279int igen_pixel_coordinates(struct camera *cam);
280void read_pixels(struct camera *cam);
281int pixels_are_neig(int pix1, int pix2);
282int bpoint_is_in_pix(double dx, double dy, int ipixnum, struct camera *pcam);
283float dist_r_P(float a, float b, float c,
284 float l, float m, float n,
285 float x, float y, float z);
286int check_reflector_file(FILE *infile);
287float lin_interpol(float x1, float y1, float x2, float y2, float x);
288int produce_phes( FILE *sp, // the input file
289 struct camera *cam, // the camera layout
290 float minwl_nm, // the minimum accepted wavelength
291 float maxwl_nm, // the maximum accepted wavelength
292 class Photoelectron phe[iMAXNUMPHE], // the generated phes
293 int *itotnphe, // total number of produced photoelectrons
294 float *nphe, // number of photoelectrons in each pixel
295 int *incph, // total number of cph read
296 float *tmin_ns, // minimum arrival time of all phes
297 float *tmax_ns // maximum arrival time of all phes
298 );
299
300int produce_nsbrates( char *inname,
301 struct camera *cam,
302 class Photoelectron phe[iMAXNUMPHE],
303 float nsbrate[][iNUMWAVEBANDS]
304 );
305
306int produce_nsb_phes( float *atmin_ns,
307 float *atmax_ns,
308 float theta_rad,
309 struct camera *cam,
310 float nsbr_phepns[iMAXNUMPIX][iNUMWAVEBANDS],
311 float dnsb_phepns[iMAXNUMPIX],
312 float extinction[iNUMWAVEBANDS],
313 float fnpx[iMAXNUMPIX],
314 Photoelectron photo[iMAXNUMPHE],
315 int *inphe,
316 float base_mv[iMAXNUMPIX]);
317
318//!@}
319
320//=------------------------------------------------------------
321//!@subsection Log of this file.
322
323//!@{
324
325/*
326 *$Log: not supported by cvs2svn $
327 *Revision 1.3 1999/11/11 20:29:29 harald
328 *Small changes to run the new version on a linux machine.
329 *
330 *Revision 1.2 1999/11/10 07:42:41 harald
331 *Small change to read the right data files in.
332 *
333 *Revision 1.1.1.1 1999/11/05 11:59:31 harald
334 *This the starting point for CVS controlled further developments of the
335 *camera program. The program was originally written by Jose Carlos.
336 *But here you can find a "rootified" version to the program. This means
337 *that there is no hbook stuff in it now. Also the output of the
338 *program changed to the MagicRawDataFormat.
339 *
340 *The "rootification" was done by Dirk Petry and Harald Kornmayer.
341 *
342 *Revision 1.3 1999/10/22 15:32:56 petry
343 *tidied-up version, really sent to H.K. and N.M., 22-10-99
344 *
345 *Revision 1.2 1999/10/22 15:01:28 petry
346 *version sent to H.K. and N.M. on Fri Oct 22 1999
347 *
348 *Revision 1.1.1.1 1999/10/21 16:35:10 petry
349 *first synthesised version
350 *
351 * Revision 1.8 1999/03/15 14:59:06 gonzalez
352 * camera-1_1
353 *
354 * Revision 1.7 1999/03/02 09:56:11 gonzalez
355 * *** empty log message ***
356 *
357 * Revision 1.6 1999/01/14 17:32:40 gonzalez
358 * Added to camera the STDIN input option (data_from_input)
359 *
360 */
361
362//!@}
363//=EOF
364
Note: See TracBrowser for help on using the repository browser.