source: branches/start/MagicSoft/Simulation/Detector/Camera/camera.h@ 9223

Last change on this file since 9223 was 308, checked in by harald, 25 years ago
This the starting point for CVS controlled further developments of the camera program. The program was originally written by Jose Carlos. But here you can find a "rootified" version to the program. This means that there is no hbook stuff in it now. Also the output of the program changed to the MagicRawDataFormat. The "rootification" was done by Dirk Petry and Harald Kornmayer. In the following you can see the README file of that version: ================================================== Fri Oct 22 1999 D.P. The MAGIC Monte Carlo System Camera Simulation Programme --------------------------- 1) Description This version is the result of the fusion of H.K.'s root_camera which is described below (section 2) and another version by D.P. which had a few additional useful features. The version compiles under Linux with ROOT 2.22 installed (variable ROOTSYS has to be set). Compile as before simply using "make" in the root_camera directory. All features of H.K.'s root_camera were retained. Additional features of this version are: a) HBOOK is no longer used and all references are removed. b) Instead of HBOOK, the user is given now the possibility of having Diagnostic data in ROOT format as a complement to the ROOT Raw data. This data is written to the file which is determined by the new input parameter "diag_file" in the camera parameter file. All source code file belonging to this part have filenames starting with "MDiag". The user can read the output file using the following commands in an interactive ROOT session: root [0] .L MDiag.so root [1] new TFile("diag.root"); root [2] new TTreeViewer("T"); This brings up a viewer from which all variables of the TTree can be accessed and histogrammed. This example assumes that you have named the file "diag.root", that you are using ROOT version 2.22 or later and that you have the shared object library "MDiag.so" which is produced by the Makefile along with the executable "camera". ! The contents of the so-called diag file is not yet fixed. ! At the moment it is what J.C.G. used to put into the HBOOK ! ntuple. In future versions the moments calculation can be ! removed and the parameter list be modified correspondingly. c) Now concatenated reflector files can be read. This is useful if you have run the reflector with different parameters but you want to continue the analysis with all reflector data going into ONE ROOT outputfile. The previous camera version contained a bug which made reading of two or more concatenated reflector files impossible. d) The reflector output format was changed. It is now version 0.4 . The change solely consists in a shortening of the flag definition in the file include-MC/MCCphoton.hxx ! IF YOU WANT TO READ REFLECTOR FORMAT 0.3, you can easily ! do so by recompiling camera with the previous version of ! include-MC/MCCphoton.hxx. The change was necessary for saving space and better debugging. From now on, this format can be frozen. ! For producing reflector output in the new format, you ! of course have to recompile your reflector with the ! new include-MC/MCCphoton.hxx . e) A first version of the pixelization with the larger outer pixels is implemented. THIS IS NOT YET FULLY TESTED, but first rough tests show that it works at least to a good approximation. The present version implements the camera outline with 18 "gap-pixels" and 595 pixels in total as shown in http://sarastro.ifae.es/internal/home/hardware/camera/numbering.ps This change involved (i) The file pixels.dat is no longer needed. Instead the coordinates are generated by the program itself (takes maybe 1 second). In the file pixel-coords.txt in the same directory as this README, you find a list of the coordinates generated by this new routine. It has the format number i j x y size-factor where i and j are J.C.G.'s so called biaxis hexagonal coordinates (for internal use) and x and y are the coordinates of the pixel centers in the standard camera coordinate system in units of centimeters. The value of "size-factor" determines the linear size of the pixel relative to the central pixels. (ii) The magic.def file has two additional parameters which give the number of central pixels and the number of gap pixels (iii) In camera.h and camera.cxx several changes were necessary, among them the introduction of several new functions The newly suggested outline with asymmetric Winston cones will be implemented in a later version. f) phe files can no longer be read since this contradicts our philosophy that the analysis should be done with other programs like e.g. EVITA and not with "camera" itself. This possibility was removed. g) ROOT is no longer invoked with an interactive interface. In this way, camera can better be run as a batch program and it uses less memory. h) small changes concerning the variable "t_chan" were necessary in order to avoid segmentation faults: The variable is used as an index and it went sometimes outside the limits when camera was reading proton data. This is because the reflector files don't contain the photons in a chronological order and also the timespread can be considerably longer that the foreseen digitisation timespan. Please see the source code of camera.cxx round about line 1090. j) several unused variables were removed, a few warning messages occur when you compile camera.cxx but these can be ignored at the moment. In general the program is of course not finished. It still needs debugging, proper trigger simulation, simulation of the asymmetric version of the outer pixels, proper NSB simulation, adaption of the diag "ntuple" contents to our need and others small improvements. In the directory rfl-files there is now a file in reflector format 0.4 containing a single event produced by the starfiled adder. It has a duration of 30 ns and represents the region around the Crab Nebula. Using the enclosed input parameter file, camera should process this file without problems. 2) The README for the previous version of root_camera README for a preliminary version of the root_camera program. root_camera is based on the program "camera"of Jose Carlos Gonzalez. It was changed in the way that only the pixelisation and the distibution of the phe to the FADCs works in a first version. Using the #undef command most possibilities of the orignal program are switched of. The new parts are signed by - ROOT or __ROOT__ nearly all important codelines for ROOT output are enclosed in structures like #ifdef __ROOT__ code #endif __ROOT__ In same case the new lines are signed by a comment with the word ROOT in it. For timing of the pulse some variable names are changed. (t0, t1, t --> t_ini, t_fin, t_1st, t_chan,...) Look also for this changes. For the new root-file is also a change in readparm-files - __DETAIL_TRIGGER__ This is for the implementation of the current work on trigger studies. Because the class MTrigger is not well documented it isn´t a part of this tar file. Only a dummy File exists. With all files in the archive, the root_camera program should run. A reflector file is in the directory rfl-files ================================================== From now on, use CVS for development!!!!
File size: 8.8 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.1.1.1 $
22//= $Author: harald $
23//= $Date: 1999-11-05 11:59:31 $
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 "lagrange.h"
64
65#include "MCEventHeader.hxx"
66#include "MCCphoton.hxx"
67
68// command line options available
69
70#define COMMAND_LINE_OPTIONS "f:h"
71
72/*@'
73
74 This is C++, but RANLIB routines are written in pure ANSI C.
75 In order to read easily these routines, we must include
76 the following directive
77
78*/
79
80extern "C" {
81#include "ranlib.h"
82}
83
84// version of the reflector program that can read
85
86#define REFL_PROGRAM reflector
87#define REFL_VERSION 0.4
88
89const char REFL_SIGNATURE[] = GLUE_postp( REFL_PROGRAM, REFL_VERSION );
90
91//!@}
92
93//=------------------------------------------------------------
94//!@subsection Macro-definitions, and constants.
95
96//!@{
97
98#define SLICES 100
99#define WIDTH_TIMESLICE 3.3
100
101#define SIN60 0.866025403784439
102#define COS60 0.500000000000000
103
104#define RandomNumber drand48()
105
106#define PIX_ARRAY_SIDE 40
107#define PIX_ARRAY_HALF_SIDE 20
108#define PIXNUM 0
109#define PIXX 1
110#define PIXY 2
111
112#define iMAXNUMPIX 595 // total maximum possible number of pixels in the camera
113
114//@ the trigger threshold up to which the maximum passable threshold is tested
115#define iMAX_THRESHOLD_PHE 50
116
117//@ number of the 1st. pixel of a sector s in a ring r (central pixel: ring=0)
118#define FIRST_PIXEL(r,s) ( ((r)>0) ? (3*(r)*((r)-1) + (r)*(s) + 1) : 0 )
119
120//@ number of the pixels include in a camera of r pixels
121#define NUMBER_PIXELS(r) ( ((r)>0) ? FIRST_PIXEL((r)+1,0) : 1 )
122
123//@ now we define the list CT_ITEM_LIST of possible items in the CT def. file
124#define CT_ITEM_LIST /* LIST OF ITEMS IN THE CT DEFINITION FILE */ \
125T(type), /* type of definition file */ \
126T(focal_distance), /* std(focal distance) */ \
127T(focal_std), /* focal distance */ \
128T(point_spread), /* std(point spread) */ \
129T(point_std), /* point spread */ \
130T(adjustment_dev), /* std of adjustment deviation */ \
131T(black_spot), /* radius of the black spot in center of mirror */ \
132T(n_mirrors), /* number of mirrors */ \
133T(r_mirror), /* radius of one mirror */ \
134T(camera_width), /* camera width */ \
135T(n_pixels), /* total number of pixels in the camera */ \
136T(n_centralpixels), /* number of central pixels in the camera */ \
137T(n_gappixels), /* number of gap pixels in the camera */ \
138T(pixel_width), /* pixel width */ \
139T(define_mirrors) /* this entry is followed by the def. of pixels */
140
141#define T(x) x //@< define T() as the name as it is
142
143enum CT_ITEM_TYPE {
144 CT_ITEM_LIST
145};
146
147#undef T
148
149#define T(x) #x //@< define T() as the string of x
150
151const char *const CT_ITEM_NAMES[] = {
152 CT_ITEM_LIST
153};
154
155#undef T
156
157
158// TYPE=0 (CT1)
159// i s rho theta x y z thetan phin xn yn zn
160//
161// i : number of the mirror
162// s : arc length [cm]
163// rho : polar rho of the position of the center of the mirror [cm]
164// theta : polar angle of the position of the center of the mirror [cm]
165// x : x coordinate of the center of the mirror [cm]
166// y : y coordinate of the center of the mirror [cm]
167// z : z coordinate of the center of the mirror [cm]
168// thetan : polar theta angle of the direction where the mirror points to
169// phin : polar phi angle of the direction where the mirror points to
170// xn : xn coordinate of the normal vector in the center (normalized)
171// yn : yn coordinate of the normal vector in the center (normalized)
172// zn : zn coordinate of the normal vector in the center (normalized)
173//
174// TYPE=1 (MAGIC)
175// i f sx sy x y z thetan phin
176//
177// i : number of the mirror
178// f : focal distance of that mirror
179// sx : curvilinear coordinate of mirror's center in X[cm]
180// sy : curvilinear coordinate of mirror's center in X[cm]
181// x : x coordinate of the center of the mirror [cm]
182// y : y coordinate of the center of the mirror [cm]
183// z : z coordinate of the center of the mirror [cm]
184// thetan : polar theta angle of the direction where the mirror points to
185// phin : polar phi angle of the direction where the mirror points to
186// xn : xn coordinate of the normal vector in the center (normalized)
187// yn : yn coordinate of the normal vector in the center (normalized)
188// zn : zn coordinate of the normal vector in the center (normalized)
189
190#define CT_I 0
191
192#define CT_S 1
193#define CT_RHO 2
194#define CT_THETA 3
195
196#define CT_FOCAL 1
197#define CT_SX 2
198#define CT_SY 3
199
200#define CT_X 4
201#define CT_Y 5
202#define CT_Z 6
203#define CT_THETAN 7
204#define CT_PHIN 8
205#define CT_XN 9
206#define CT_YN 10
207#define CT_ZN 11
208
209#define CT_NDATA 12
210
211//!@}
212
213//=------------------------------------------------------------
214//!@subsection data types
215
216struct camera { /* camera parameters for imaging */
217 int inumpixels;
218 int inumcentralpixels;
219 int inumgappixels;
220 int inumbigpixels;
221 double dpixdiameter_cm; /* diameter of the central and gap pixels in centimeters */
222 double dpixsizefactor[iMAXNUMPIX]; /* size of the pixel relative to dpixdiameter_deg */
223 double dxc[iMAXNUMPIX]; /* Pixel coordinates in camera coordinate system (x points from pixel 1 to 2). */
224 double dyc[iMAXNUMPIX]; /* The numbering of the pixels in these arrays starts at 0! */
225 double dxpointcorr_deg; /* correction of the pixel coordinates; to be added to dxc[] to get correct value */
226 double dypointcorr_deg; /* correction of the pixel coordinates; to be added to dxc[] to get correct value */
227 double di[iMAXNUMPIX]; /* i coordinate in JCs bi-axis hexagonal coordinate system */
228 double dj[iMAXNUMPIX]; /* j coordinate in JCs bi-axis hexagonal coordinate system */
229
230};
231
232
233//=------------------------------------------------------------
234//!@subsection Pre-defined file names.
235
236//!@{
237
238#define QE_FILE "qe.dat"
239
240//!@}
241
242//=------------------------------------------------------------
243//!@subsection Prototypes of functions.
244
245//!@{
246
247//++
248// prototypes
249//--
250
251#define ONoff(x) ((x==TRUE) ? "[ ON ]" : "[ off]")
252
253// Under Linux, the nint function does not exist, so we have to define it.
254#define nint(x) ((int)floor((x)+0.5))
255
256void present(void);
257void usage(void);
258void clean(void);
259void log(const char *funct, char *fmt, ...);
260void error(const char *funct, char *fmt, ...);
261int isA( char * s1, const char * flag );
262void read_ct_file(void);
263int igen_pixel_coordinates(struct camera *cam);
264void read_pixels(struct camera *cam);
265int pixels_are_neig(int pix1, int pix2);
266int bpoint_is_in_pix(double dx, double dy, int ipixnum, struct camera *pcam);
267float dist_r_P(float a, float b, float c,
268 float l, float m, float n,
269 float x, float y, float z);
270
271//!@}
272
273//=------------------------------------------------------------
274//!@subsection Log of this file.
275
276//!@{
277
278/*
279 *$Log: not supported by cvs2svn $
280 *Revision 1.3 1999/10/22 15:32:56 petry
281 *tidied-up version, really sent to H.K. and N.M., 22-10-99
282 *
283 *Revision 1.2 1999/10/22 15:01:28 petry
284 *version sent to H.K. and N.M. on Fri Oct 22 1999
285 *
286 *Revision 1.1.1.1 1999/10/21 16:35:10 petry
287 *first synthesised version
288 *
289 * Revision 1.8 1999/03/15 14:59:06 gonzalez
290 * camera-1_1
291 *
292 * Revision 1.7 1999/03/02 09:56:11 gonzalez
293 * *** empty log message ***
294 *
295 * Revision 1.6 1999/01/14 17:32:40 gonzalez
296 * Added to camera the STDIN input option (data_from_input)
297 *
298 */
299
300//!@}
301//=EOF
302
Note: See TracBrowser for help on using the repository browser.