source: trunk/MagicSoft/Simulation/Detector/Camera/creadparam.cxx@ 3160

Last change on this file since 3160 was 2965, checked in by blanch, 21 years ago
[Changes done mainly by A. Moralejo] Two new commands of the input card have been added: sigma_xy_cm_spot: to enlarge the point spread function. trigger_delay: to center the FADC signal There is also a check that the Pedestal is an integer, otherwise it becames complex to get a reasonable rms for events without electronic noise.
File size: 45.4 KB
Line 
1//=//////////////////////////////////////////////////////////////////////
2//=
3//= creadparam
4//=
5//= @file creadparam.cxx
6//= @desc Reading of parameters 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: creadparam.cxx,v $
21//= $Revision: 1.26 $
22//= $Author: blanch $
23//= $Date: 2004-01-30 09:58:39 $
24//=
25//=//////////////////////////////////////////////////////////////////////
26
27// @T \newpage
28
29//!@section Source code of |creadparam.cxx|.
30
31/*!@"
32
33 This section describes briefly the source code for the file
34 |creadparam.cxx|. This file is very closely related to the file
35 |readparams.cxx| from the |reflector| program. Actually, this later
36 file was the ancestror of the file you are looking at.
37
38 All the defines it uses are located in the file |creadparam.h|. In
39 the first one we can see the definitions of the commands available
40 for the parameters file. We describe these commands in a later
41 section.
42
43 @"*/
44
45//!@subsection Includes and Global variables definition.
46
47/*!@"
48
49 All the defines are located in the file {\tt creadparam.h}.
50
51 @"*/
52
53//!@{
54
55#include "creadparam.h"
56
57//!@}
58
59//!@subsection Definition of global variables.
60
61/*!@"
62
63 Here we define the global variables where the values from the
64 parameters file are stored.
65
66 @"*/
67
68//!@{
69
70static char Input_filename[100][PATH_MAX_LENGTH]; //@< input filename
71static char Starfield_filename[PATH_MAX_LENGTH]; //@< starfield input filename
72static int Starfield_center[6]={0,0,0,0,0,0}; //@< center of the starfield FOV
73 //@< RA(H,M,S) & DEC (D,M,S)
74static char Data_filename[PATH_MAX_LENGTH]; //@< data filename
75static char ROOT_filename[PATH_MAX_LENGTH]; //@< data filename
76static char Loop_filename[PATH_MAX_LENGTH]; //@< special data filename
77static int CT_geometry = 0; //@< CT camera geometry
78static int CT_number = 1; //@< Number of CT
79static char QE_filename[100][PATH_MAX_LENGTH]; //@< name of the qe file
80static char NSB_directory[PATH_MAX_LENGTH]; //@< database for NSB
81static char NSB_outer_directory[PATH_MAX_LENGTH]; //@< database for NSB
82static int Starfield_rotate = FALSE; //@< switch on starfield rotation
83static int ElecNoise = TRUE; //@< Will we add ElecNoise?
84static float FADC_pedestal = 10.0; //@< Value for FADC Pedestal
85static float FADC_Noise = 2.0; //@< Value for FADC ElecNoise
86static float Digital_Noise = 1.0; //@< Value for FADC digital Noise
87static float Trig_Noise = 0.3; //@< Factor for Trigger ElecNoise
88static int simulateNSB = TRUE; //@< Will we simulate NSB?
89static float meanNSB; //@< NSB mean value (per pixel)
90static int nphe2NSB=0; //@< Number of phe from shower to do NSB simulation
91static float qThreshold[100][CAMERA_PIXELS]; //@< Threshold values
92static int Individual_Thres = FALSE;
93static float RiseDisc = -1.0;
94static float SecureDisc = 7.0;
95static long int Seeds[2]={69184,10406};
96static int *Skip;
97static int nSkip=0;
98static int Data_From_STDIN = FALSE;
99static int Write_All_Images = FALSE;
100static int Write_McEvt = TRUE;
101static int Write_McTrig = FALSE;
102static int Write_McFadc = FALSE;
103static int Write_RawEvt = TRUE;
104static int Select_Energy = TRUE;
105static float Select_Energy_le = 0.0; //@< GeV
106static float Select_Energy_ue = 100000.0; //@< GeV
107static int Trigger_Scan = FALSE;
108static int FADC_Scan = FALSE;
109static int Trigger_Loop = FALSE;
110static float Trigger_gate_length = 3.0;
111static float Trigger_over_time = 0.25;
112static float Trigger_response_ampl = 1.0;
113static float Trigger_response_fwhm = 2.0;
114static float Trigger_threshold[100];
115static int Trigger_multiplicity[100];
116static int Trigger_topology[100];
117static float Trigger_loop_lthres = 3.0;
118static float Trigger_loop_uthres = 10.0;
119static float Trigger_loop_sthres = 1.0;
120static int Trigger_loop_lmult = 2;
121static int Trigger_loop_umult = 10;
122static int Trigger_loop_ltop = 0;
123static int Trigger_loop_utop = 2;
124static float FADC_response_ampl = MFADC_RESPONSE_INTEGRAL;
125static float FADC_response_fwhm = MFADC_RESPONSE_FWHM;
126static float FADC_resp_ampl_out = MFADC_RESPONSE_INTEGRAL;
127static float FADC_resp_fwhm_out = MFADC_RESPONSE_FWHM;
128static float High_to_Low = 10.0; //@< Low gain channel respct to High
129static float Source_offset_th=0.; //@< Displacement in Theta of the
130 //@< source from the center
131static float Source_offset_ph=0.; //@< Displacement in Phi of the
132 //@< source from the center
133
134static float sigma_spot = -1.; // Sigma in x and y for additional
135 // gaussian spread of the mirror spot.
136
137static float trig_delay = 25.; // Delay in ns between beginning of FADC
138 // time window and the trigger instant.
139
140
141//!@}
142
143//!@subsection The function |readparam()|.
144
145//!-----------------------------------------------------------
146// @name creadparam
147//
148// @desc read parameters from the stdin / parameters file
149//
150// @var *filename Name of the parameters file (NULL->STDIN)
151//
152// @date Mon Sep 14 13:27:56 MET DST 1998
153//------------------------------------------------------------
154// @function
155
156//!@{
157void
158readparam(char * filename)
159{
160 char sign[] = GLUE_postp( PROGRAM, VERSION ); //@< initialize sign
161 char line[LINE_MAX_LENGTH]; //@< line to get from the stdin
162 char token[ITEM_MAX_LENGTH]; //@< a single token
163 int i, j, k; //@< dummy counters
164 float aux, aux2; //@< auxiliar variable
165 int aux3, aux4; //@< auxiliar variable
166 ifstream ifile;
167 char filename_tmp[PATH_MAX_LENGTH];
168 // use cin or ifile (reading from STDIN or from parameters file?
169 if ( filename != NULL )
170 ifile.open( filename );
171
172 // get signature
173 if ( filename != NULL )
174 ifile.getline(line, LINE_MAX_LENGTH);
175 else
176 cin.getline(line, LINE_MAX_LENGTH);
177 line[strlen(SIGNATURE)] = '\0';
178 strcpy(sign, line);
179 cout<< '"' << sign << '"' << '\n';
180 if (strcmp(sign, SIGNATURE) != 0) {
181 cerr << "ERROR: Signature of parameters file is not correct\n";
182 cerr << '"' << sign << '"' << '\n';
183 cerr << "should be: " << SIGNATURE << '\n';
184 exit(1);
185 }
186
187 // loop till the "end" directive is reached
188 int is_end = FALSE;
189 while (! is_end) {
190
191 // get line from file or stdin
192 if ( filename != NULL )
193 ifile.getline(line, LINE_MAX_LENGTH);
194 else
195 cin.getline(line, LINE_MAX_LENGTH);
196
197 // skip comments (start with '#')
198 if (line[0] == '#')
199 continue;
200
201 // show user comments (start with '>')
202 if (line[0] == '>') {
203 cout << line << endl << flush;
204 continue;
205 }
206
207 // look for each item at the beginning of the line
208 for (i=0; i<=end_file; i++)
209 if (strstr(line, ITEM_NAMES[i]) == line)
210 break;
211
212 // if it is not a valid line, just ignore it
213 if (i == end_file+1) {
214 cerr << "Skipping unknown token in [" << line << "]\n";
215 continue;
216 }
217
218 // case block for each directive
219 switch ( i ) {
220
221 case input_file: //@< name of the input file
222
223 // get the name of the input_file from the line
224 sscanf(line, "%s %i %s", token,&k, filename_tmp);
225 if(k>99 || k<0){
226 printf("ERROR : The input_file command in input card is faulty. \n\t Most likely the control index for CT is missing.\n");
227 exit(1);
228 }
229 strcpy(&Input_filename[k][0],&filename_tmp[0]);
230 break;
231
232 case starfield_file: //@< name of the output file
233
234 // get the name of the output_file from the line
235 sscanf(line, "%s %s", token, Starfield_filename);
236
237 break;
238
239 case starfield_center: //@< name of the output file
240
241 // get the name of the output_file from the line
242 sscanf(line, "%s %i %i %i %i %i %i", token, &Starfield_center[0], &Starfield_center[1], &Starfield_center[2], &Starfield_center[3], &Starfield_center[4], &Starfield_center[5]);
243
244 break;
245
246 case data_file: //@< name of the data file
247
248 // get the name of the data_file from the line
249 sscanf(line, "%s %s", token, Data_filename);
250
251 break;
252
253 case root_file: //@< name of the ROOT file
254
255 // get the name of the data_file from the line
256 sscanf(line, "%s %s", token, ROOT_filename);
257 cout << '[' << ROOT_filename << ']' << endl << flush;
258
259 break;
260
261 case ct_num: //@< name of the telescope file
262
263 // get the name of the ct_file from the line
264 sscanf(line, "%s %i", token, &CT_number);
265
266 break;
267
268 case ct_geom: //@< name of the telescope file
269
270 // get the name of the ct_file from the line
271 sscanf(line, "%s %i", token, &CT_geometry);
272
273 break;
274
275 case qe_file: //@< name of the telescope file
276
277 // get the name of the ct_file from the line
278 sscanf(line, "%s %i %s", token, &k, filename_tmp);
279 strcpy(&QE_filename[k][0],&filename_tmp[0]);
280
281 break;
282
283 case elec_noise_off: //@< add ElecNoise?
284
285 // we will not add electronic noise for FADC and Trigger channels.
286 ElecNoise = FALSE;
287 FADC_Noise = 0.0;
288 Trig_Noise =0.0;
289
290 break;
291
292 case fadc_pedestal: //@< FADC ElecNoise
293
294 // value for FADC Pedestal
295 sscanf(line, "%s %f", token, &FADC_pedestal);
296
297 //
298 // A. Moralejo:
299 // Require integer mean pedestal. Although it seems a silly
300 // restriction, this saves lots of trouble (due to rounding
301 // happening in the FADC), particularly when running the
302 // simulation with no noise (NSB or electronic):
303 //
304
305 if (fmod(FADC_pedestal, 1.) > 1.e-4)
306 {
307 printf("ERROR : requested average FADC pedestal (%f) is not integer. Please use an integer value.\n", FADC_pedestal);
308 exit(1);
309 }
310
311 break;
312
313 case high_to_low: //@< FADC ElecNoise
314
315 // Value for the Low Gain channel respect to the High gain
316 sscanf(line, "%s %f", token, &High_to_Low);
317
318 break;
319
320 case fadc_noise: //@< FADC ElecNoise
321
322 // value for FADC Elec Noise
323 sscanf(line, "%s %f %f", token, &FADC_Noise, &Digital_Noise);
324
325 ElecNoise = TRUE;
326
327 break;
328
329 case trig_noise: //@< add ElecNoise?
330
331 // factor for Trigger Elec Noise
332 sscanf(line, "%s %f", token, &Trig_Noise);
333 ElecNoise = TRUE;
334
335 break;
336
337 case sfr_on: //@< simulate starfield rotation?
338
339 // we will simulate Starfield rotation
340 Starfield_rotate = TRUE;
341
342 break;
343
344
345 case nsb_on: //@< simulate NSB?
346
347 // we will simulate NSB
348 simulateNSB = TRUE;
349
350 break;
351
352 case nsb_off: //@< simulate NSB?
353
354 // we will NOT simulate NSB
355 simulateNSB = FALSE;
356
357 break;
358
359 case nsb_mean: //@< value of <NSB> per pixel
360
361 // get value of <NSB> (in photons)
362 sscanf(line, "%s %f %d", token, &meanNSB, &nphe2NSB);
363
364 break;
365
366 case nsb_directory: //@< name of the output file
367
368 // get the name of the NSB diretory for inner pixels
369 sscanf(line, "%s %s", token, NSB_directory);
370
371 break;
372
373 case nsb_dir_outer: //@< name of the output file
374
375 // get the name of the NSB diretory for outer pixels
376 sscanf(line, "%s %s", token, NSB_outer_directory);
377
378 break;
379
380 case pixel_thres: //@< value of threshold for trigger (q0)
381
382 // get value of threshold (in ph.e.)
383 sscanf(line, "%s %i %f", token,&k, &aux);
384 if(k>99 || k<0){
385 printf("ERROR : The input_file command in input card is faulty. \n\t Most likely the control index for CT is missing.\n");
386 exit(1);
387 }
388 qThreshold[0][k]=aux;
389 Individual_Thres = TRUE;
390
391 break;
392
393 case secure_disc: //@< value of secure threshold
394
395 // get value of secure threshold (in ph.e.)
396 sscanf(line, "%s %f %f", token,&aux, &aux2);
397 RiseDisc=aux;
398 SecureDisc=aux2;
399
400 break;
401
402 case seeds: //@< values of seeds for random numbers
403
404 // get seeds
405 sscanf(line, "%s %ld %ld", token, &Seeds[0], &Seeds[1]);
406
407 break;
408
409 case skip: //@< skip pathological showers
410
411 // get showers to skip
412 cin >> nSkip;
413 Skip = new int[nSkip];
414 for (j=0; j<nSkip; ++j) {
415 cin >> Skip[j];
416 cout << Skip[j] << endl << flush;
417 }
418
419 break;
420
421 case data_from_stdin: //@< to read data from stdin
422
423 // change boolean value
424 Data_From_STDIN = TRUE;
425
426 break;
427
428 case write_all_events: //@< to write ALL the images
429
430 // change boolean value
431 Write_All_Images = TRUE;
432
433 break;
434
435 case nowrite_McEvt: //@< do not write the McEvt info
436
437 // change boolean value
438 Write_McEvt = FALSE;
439
440 break;
441
442 case write_McTrig: //@< to write the McTrig info
443
444 // change boolean value
445 Write_McTrig = TRUE;
446
447 break;
448
449 case write_McFadc: //@< to write the McFadc info
450
451 // change boolean value
452 Write_McFadc = TRUE;
453
454 break;
455
456 case nowrite_RawEvt: //@< to write the McFadc info
457
458 // change boolean value
459 Write_RawEvt = FALSE;
460
461 break;
462
463 case select_energy: //@< value of islands_cut (i0)
464
465 // get energy range
466 sscanf(line, "%s %f %f", token, &Select_Energy_le, &Select_Energy_ue);
467 Select_Energy = TRUE;
468
469 break;
470
471 case fadc_scan:
472
473 // change boolean value
474 FADC_Scan = TRUE;
475
476 break;
477
478 case fadc_prop:
479
480 // Get parameters for the fadc response for one phe
481 sscanf(line, "%s %f %f", token, &FADC_response_ampl,&FADC_response_fwhm);
482
483 break;
484
485 case fadc_outer:
486
487 // Get parameters for the fadc response for one phe
488 sscanf(line, "%s %f %f", token, &FADC_resp_ampl_out,&FADC_resp_fwhm_out);
489
490 break;
491
492 case trigger_scan:
493
494 // change boolean value
495 Trigger_Scan = TRUE;
496
497 break;
498 case trigger_prop:
499
500 // Get parameters for the diskriminator and the electronic
501 // response for one phe
502 sscanf(line, "%s %f %f %f %f", token, &Trigger_gate_length,&Trigger_over_time, &Trigger_response_ampl,&Trigger_response_fwhm);
503
504 break;
505
506 case trigger_loop:
507
508 // Get loop's limits
509 sscanf(line, "%s %f %f %f %d %d %d %d", token, &Trigger_loop_lthres, &Trigger_loop_uthres, &Trigger_loop_sthres, &Trigger_loop_lmult, &Trigger_loop_umult, &Trigger_loop_ltop, &Trigger_loop_utop );
510
511 // Set qThreshold to a global value
512 for(k=0;k<CAMERA_PIXELS;k++){
513 qThreshold[0][k]=Trigger_loop_lthres;
514 }
515
516 // change boolean value
517 Trigger_Loop = TRUE;
518 Write_RawEvt = FALSE;
519 Individual_Thres = FALSE;
520
521 break;
522
523 case trigger_single:
524
525 // Get trigger conditions
526 sscanf(line, "%s %d %f %d %d", token, &j, &aux, &aux3, &aux4);
527 if(j>99 || j<0){
528 printf("ERROR : The input_file command in input card is faulty. \n\t Most likely the control index for CT is missing.\n");
529 exit(1);
530 }
531 Trigger_threshold[j]=aux;
532 Trigger_multiplicity[j]=aux3;
533 Trigger_topology[j]=aux4;
534
535 // Set qThreshold to a global value
536 for(k=0;k<CAMERA_PIXELS;k++){
537 qThreshold[j][k]=Trigger_threshold[j];
538 }
539
540 // change boolean value
541 Trigger_Loop = FALSE;
542 Write_RawEvt = TRUE;
543 Individual_Thres = FALSE;
544
545 break;
546
547 case source_offset:
548
549 // Get offset of source
550 sscanf(line, "%s %f %f", token, &Source_offset_th, &Source_offset_ph);
551
552 break;
553
554 case Trigger_Loop_Output_Only_Specialists:
555
556 // get the name of the data_file from the line
557 sscanf(line, "%s %s", token, Loop_filename);
558 cout << '[' << Loop_filename << ']' << endl << flush;
559
560 // change boolean value
561 Write_RawEvt = TRUE;
562
563 break;
564
565 case sigma_xy_cm_spot:
566
567 sscanf(line, "%s %f", token, &sigma_spot);
568 break;
569
570 case trigger_delay:
571
572 sscanf(line, "%s %f", token, &trig_delay);
573 break;
574
575 case end_file: //@< end of the parameters file
576
577 // show a short message
578 is_end = TRUE;
579
580 break;
581
582
583 } // switch ( i )
584
585 } // while (! is_end)
586
587 // after the loop is finished, return to the main function
588 return;
589}
590//!@}
591
592
593//!-----------------------------------------------------------
594// @name get_input_filename
595//
596// @desc get name of the input file
597//
598// @return Name of the Input file
599//
600// @date Mon Sep 14 13:27:56 MET DST 1998
601//------------------------------------------------------------
602// @function
603
604//!@{
605char *
606get_input_filename(int i)
607{
608 return (Input_filename[i]);
609}
610//!@}
611
612
613//!-----------------------------------------------------------
614// @name get_starfield_filename
615//
616// @desc get name of the starfield input file
617//
618// @return Name of the starfield file
619//
620// @date Tue Feb 15 16:02:18 CET 2000
621//------------------------------------------------------------
622// @function
623
624//!@{
625char *
626get_starfield_filename(void)
627{
628 return (Starfield_filename);
629}
630//!@}
631
632
633//!-----------------------------------------------------------
634// @name get_starfield_center
635//
636// @desc get center of the starfield FOV
637//
638// @return Central co-ordinates in RA and DEC for the centre of FOV
639//
640// @date Tue Feb 15 16:02:18 CET 2000
641//------------------------------------------------------------
642// @function
643
644//!@{
645void get_starfield_center(int *rh,int *rm,int *rs,int *dd,int *dm,int *ds)
646{
647 *rh=Starfield_center[0];
648 *rm=Starfield_center[1];
649 *rs=Starfield_center[2];
650 *dd=Starfield_center[3];
651 *dm=Starfield_center[4];
652 *ds=Starfield_center[5];
653}
654//!-----------------------------------------------------------
655// @name get_starfield_rotate
656//
657// @Starfield_rotate
658//
659// @return
660//
661//------------------------------------------------------------
662// @function
663
664//!@{
665int
666get_starfield_rotate(void)
667{
668 return(Starfield_rotate);
669}
670
671
672//!@}
673//!-----------------------------------------------------------
674// @name get_data_filename
675//
676// @desc get name of the data file
677//
678// @return Name of the Data file
679//
680// @date Mon Sep 14 13:27:56 MET DST 1998
681//------------------------------------------------------------
682// @function
683
684//!@{
685char *
686get_data_filename(void)
687{
688 return (Data_filename);
689}
690//!@}
691
692
693//!-----------------------------------------------------------
694// @name get_root_filename
695//
696// @desc get name of the ROOT file
697//
698// @return Name of the ROOT file
699//
700// @date Mon Sep 14 13:27:56 MET DST 1998
701//------------------------------------------------------------
702// @function
703
704//!@{
705char *
706get_root_filename(void)
707{
708 return (ROOT_filename);
709}
710//!@}
711//!-----------------------------------------------------------
712// @name get_loop_filename
713//
714// @desc get name of the special ROOT file
715//
716// @return Name of the special ROOT file
717//
718// @date Fri Jun 23 17:34:19 CEST 2000
719//------------------------------------------------------------
720// @function
721
722//!@{
723
724char *
725get_loop_filename(void)
726{
727 return (Loop_filename);
728}
729//!@}
730
731//!-----------------------------------------------------------
732// @name get_ct_number
733//
734// @desc get number of CT
735//
736// @return number of CT
737//
738// @date Tue Jul 29 01:48:26 CEST 2003
739//------------------------------------------------------------
740// @function
741
742//!@{
743int
744get_ct_number(void)
745{
746 return (CT_number);
747}
748//!@}
749
750//!-----------------------------------------------------------
751// @name get_ct_geometry
752//
753// @desc get geometry of CT
754//
755// @return geometry of CT
756//
757// @date Mon Sep 14 13:27:56 MET DST 1998
758//------------------------------------------------------------
759// @function
760
761//!@{
762int
763get_ct_geometry(void)
764{
765 return (CT_geometry);
766}
767//!@}
768
769//!-----------------------------------------------------------
770// @name get_qe_filename
771//
772// @desc get name of QE definition file
773//
774// @return Name of the QE definition file
775//
776// @date Thu Jul 10 14:10:13 CEST 2003
777//------------------------------------------------------------
778// @function
779
780//!@{
781char *
782get_qe_filename(int ict)
783{
784 return (QE_filename[ict]);
785}
786//!@}
787
788//!-----------------------------------------------------------
789// @name get_nsb_directory
790//
791// @desc get name of the directory where the database for NSB is
792//
793// @return Name of the NSB directory
794//
795// @date Tue Jan 30 12:07:56 MET 2001
796//------------------------------------------------------------
797// @function
798
799//!@{
800char *
801get_nsb_directory(void)
802{
803 return (NSB_directory);
804}
805//!@}
806
807
808
809//!-----------------------------------------------------------
810// @name get_nsb_directory_outer
811//
812// @desc get name of the directory where the database for NSB is
813//
814// @return Name of the NSB directory for outer pixels
815//
816// @date Thu Jul 10 14:10:13 CEST 2003
817//------------------------------------------------------------
818// @function
819
820//!@{
821char *
822get_nsb_directory_outer(void)
823{
824 return (NSB_outer_directory);
825}
826//!@}
827
828
829
830//!-----------------------------------------------------------
831// @name add_elec_noise
832//
833// @desc are we going to add the ElecNoise?
834//
835// @date Mon Jan 14 19:27:56 MET DST 2002
836//------------------------------------------------------------
837// @function
838
839//!@{
840int
841add_elec_noise(float *fadc, float *digi, float *trig)
842{
843 *fadc = FADC_Noise;
844 *digi = Digital_Noise;
845 *trig = Trig_Noise;
846
847 return ( ElecNoise);
848}
849//!@}
850
851//!-----------------------------------------------------------
852// @name get_nsb
853//
854// @desc are we going to simulate NSB ?
855//
856// @var *n Mean value for the NSB (ph.e./pixel)
857// @return TRUE: we'll simulate NSB; FALSE: we won't
858//
859// @date Mon Sep 14 13:27:56 MET DST 1998
860//------------------------------------------------------------
861// @function
862
863//!@{
864int
865get_nsb(float *n, int *m)
866{
867 *n = meanNSB;
868 *m = nphe2NSB;
869 return ( simulateNSB );
870}
871//!@}
872
873
874//!-----------------------------------------------------------
875// @name get_threshold
876//
877// @desc get threshold value
878//
879// @return Value of the threshold q$_0$
880//
881// @date Mon Sep 14 13:27:56 MET DST 1998
882//------------------------------------------------------------
883// @function
884
885//!@{
886void
887get_threshold(float *t)
888{
889 for(int i=0;i<CAMERA_PIXELS;i++)
890 t[i]=qThreshold[0][i];
891}
892//!@}
893
894//!-----------------------------------------------------------
895// @name get_secure_threhold
896//
897// @desc get values for secure threshold.
898//
899// @return AC (ac)value above which discriminator threshold rised to disc
900//
901// @date Wed Jul 18 16:29:43 CEST 2001
902//------------------------------------------------------------
903// @function
904
905//!@{
906void
907get_secure_threhold(float *ac, float *disc)
908{
909 *ac=RiseDisc;
910 *disc=SecureDisc;
911}
912//!@}
913
914//!-----------------------------------------------------------
915// @name get_indi_thres_pixel
916//
917// @desc get boolean information about global (FALSE) or
918// @desc individual (TRUE) pixel trigger threshold
919//
920// @return Value for the Individual_Thres
921//
922// @date Wed Jul 18 16:29:43 CEST 2001
923//------------------------------------------------------------
924// @function
925
926//!@{
927int get_indi_thres_pixel(void){
928 return Individual_Thres;
929}
930//!@}
931
932
933//!-----------------------------------------------------------
934// @name get_seeds
935//
936// @desc are we going to count the islands ?
937//
938// @var *n Number of the seed
939// @return N-th random-number Seed
940//
941// @date Mon Sep 14 13:27:56 MET DST 1998
942//------------------------------------------------------------
943// @function
944
945//!@{
946long int
947get_seeds(int n)
948{
949 return ( Seeds[n] );
950}
951//!@}
952
953
954//!-----------------------------------------------------------
955// @name get_skip_showers
956//
957// @desc get list of showers to skip
958//
959// @var *s1 Pointer to a vector of number of showers
960//
961// @date Mon Sep 14 13:27:56 MET DST 1998
962//------------------------------------------------------------
963// @function
964
965//!@{
966void
967get_skip_showers( int *s )
968{
969 int i;
970 for (i=0; i<nSkip; ++i)
971 s[i] = Skip[i];
972}
973//!@}
974
975
976//!-----------------------------------------------------------
977// @name get_nskip_showers
978//
979// @desc get number of showers to skip
980//
981// @return Number of showers to be skipped
982//
983// @date Mon Sep 14 13:27:56 MET DST 1998
984//------------------------------------------------------------
985// @function
986
987//!@{
988int
989get_nskip_showers( void )
990{
991 return( nSkip );
992}
993//!@}
994
995
996//!-----------------------------------------------------------
997// @name get_data_from_stdin
998//
999// @desc get whether we will read the data from the STDIN
1000//
1001// @return TRUE: we'll read data from STDIN; FALSE: we won't
1002//
1003// @date Wed Nov 25 13:21:00 MET 1998
1004//------------------------------------------------------------
1005// @function
1006
1007//!@{
1008int
1009get_data_from_stdin(void)
1010{
1011 return ( Data_From_STDIN );
1012}
1013//!@}
1014
1015
1016//!-----------------------------------------------------------
1017// @name write_all_events
1018//
1019// @desc write all images to .phe, even those without trigger
1020//
1021// @return TRUE: we'll write everything; FALSE: we won't
1022//
1023// @date Wed Nov 25 13:21:00 MET 1998
1024//------------------------------------------------------------
1025// @function
1026
1027//!@{
1028int
1029get_write_all_events(void)
1030{
1031 return ( Write_All_Images );
1032}
1033//!@}
1034
1035//!-----------------------------------------------------------
1036// @name write_McEvt
1037//
1038// @desc write the McEvt class for each event to the .root file
1039//
1040// @return TRUE: we'll write it; FALSE: we won't
1041//
1042//------------------------------------------------------------
1043// @function
1044
1045//!@{
1046int
1047get_write_McEvt(void)
1048{
1049 return ( Write_McEvt );
1050}
1051//!@}
1052
1053//!-----------------------------------------------------------
1054// @name write_McTrig
1055//
1056// @desc write the McTrig class for each event to the .root file
1057//
1058// @return TRUE: we'll write it; FALSE: we won't
1059//
1060//------------------------------------------------------------
1061// @function
1062
1063//!@{
1064int
1065get_write_McTrig(void)
1066{
1067 return ( Write_McTrig );
1068}
1069//!@}
1070
1071//!-----------------------------------------------------------
1072// @name write_McFadc
1073//
1074// @desc write the McFadc class for each event to the .root file
1075//
1076// @return TRUE: we'll write it; FALSE: we won't
1077//
1078//------------------------------------------------------------
1079// @function
1080
1081//!@{
1082int
1083get_write_McFadc(void)
1084{
1085 return ( Write_McFadc );
1086}
1087//!@}
1088
1089//!-----------------------------------------------------------
1090// @name write_RawEvt
1091//
1092// @desc write the RawEvt class for each event to the .root file
1093//
1094// @return TRUE: we'll write it; FALSE: we won't
1095//
1096//------------------------------------------------------------
1097// @function
1098
1099//!@{
1100int
1101get_write_RawEvt(void)
1102{
1103 return ( Write_RawEvt );
1104}
1105//!@}
1106
1107//!-----------------------------------------------------------
1108// @name get_select_energy
1109//
1110// @desc return energy range allowed for showers from .phe file
1111//
1112// @var *le Lower limit in the allowed energy range
1113// @var *ue Lower limit in the allowed energy range
1114// @return TRUE: we make selection on the energy; FALSE: we don't
1115//
1116// @date Wed Nov 25 13:21:00 MET 1998
1117//------------------------------------------------------------
1118// @function
1119
1120//!@{
1121int
1122get_select_energy(float *le, float *ue)
1123{
1124 *le = Select_Energy_le;
1125 *ue = Select_Energy_ue;
1126 return ( Select_Energy );
1127}
1128//!@}
1129
1130//!-----------------------------------------------------------
1131// @name FADC_Scan
1132//
1133// @desc show the FADC signal for each event in the screen
1134//
1135// @return TRUE: we'll show it; FALSE: we won't
1136//
1137//------------------------------------------------------------
1138// @function
1139
1140//!@{
1141int
1142get_FADC_Scan(void)
1143{
1144 return ( FADC_Scan );
1145}
1146//!@}
1147
1148//!-----------------------------------------------------------
1149// @name Trigger_Scan
1150//
1151// @desc show the Trigger signal for each event in the screen
1152//
1153// @return TRUE: we'll show it; FALSE: we won't
1154//
1155//------------------------------------------------------------
1156// @function
1157
1158//!@{
1159int
1160get_Trigger_Scan(void)
1161{
1162 return ( Trigger_Scan );
1163}
1164//!@}
1165
1166//!-----------------------------------------------------------
1167// @name Fadc_Propeties
1168//
1169// @desc fix properties of the FADC response
1170//
1171//------------------------------------------------------------
1172// @function
1173
1174//!@{
1175void
1176get_FADC_properties(float *ra, float *rf, float *rao, float *rfo)
1177{
1178 *ra=FADC_response_ampl;
1179 *rf=FADC_response_fwhm;
1180 *rao=FADC_resp_ampl_out;
1181 *rfo=FADC_resp_fwhm_out;
1182
1183}
1184//!@}
1185
1186//!-----------------------------------------------------------
1187// @name Trigger_Propeties
1188//
1189// @desc fix properties of the diskriminator and amplifier for Trigger
1190//
1191//------------------------------------------------------------
1192// @function
1193
1194//!@{
1195void
1196get_Trigger_properties(float *gl, float *ot, float *ra, float *rf)
1197{
1198 *gl=Trigger_gate_length;
1199 *ot=Trigger_over_time;
1200 *ra=Trigger_response_ampl;
1201 *rf=Trigger_response_fwhm;
1202
1203}
1204//!@}
1205
1206//!-----------------------------------------------------------
1207// @name Trigger_Loop
1208//
1209// @desc make a loop over Trigger conditions
1210//
1211// @return TRUE: we'll make it; FALSE: we won't
1212//
1213//------------------------------------------------------------
1214// @function
1215
1216//!@{
1217int
1218get_Trigger_Loop(float *lt, float *ut, float *st, int *lm, int *um, int *lg, int *ug)
1219{
1220 *lt=Trigger_loop_lthres;
1221 *ut=Trigger_loop_uthres;
1222 *st=Trigger_loop_sthres;
1223 *lm=Trigger_loop_lmult;
1224 *um=Trigger_loop_umult;
1225 *lg=Trigger_loop_ltop;
1226 *ug=Trigger_loop_utop;
1227 return ( Trigger_Loop );
1228}
1229//!@}
1230
1231//!-----------------------------------------------------------
1232// @name Trigger_Single
1233//
1234// @desc fix Trigger conditions
1235//
1236//------------------------------------------------------------
1237// @function
1238
1239//!@{
1240void
1241get_Trigger_Single(float **t, int *m, int *g)
1242{
1243 for(int j=0;j<100;j++){
1244 for(int i=0;i<CAMERA_PIXELS;i++)
1245 t[j][i]=qThreshold[j][i];
1246 m[j]=Trigger_multiplicity[j];
1247 g[j]=Trigger_topology[j];
1248 }
1249}
1250//!@}
1251
1252//!-----------------------------------------------------------
1253// @name get_source_off
1254//
1255// @desc give the offset of the source to the center of the camera
1256//
1257//------------------------------------------------------------
1258// @function
1259
1260//!@{
1261void get_source_off(float *th, float *p){
1262 *th=Source_offset_th;
1263 *p=Source_offset_ph;
1264}
1265//!@}
1266
1267//!-----------------------------------------------------------
1268// @name get_FADC_pedesta
1269//
1270// @desc get the value for the FADC pedestals
1271//
1272//------------------------------------------------------------
1273// @function
1274
1275//!@{
1276
1277
1278float get_FADC_pedestal(void){
1279
1280 return FADC_pedestal;
1281
1282}
1283
1284//!@}
1285//!-----------------------------------------------------------
1286// @name get_High_to_Low
1287//
1288// @desc get the conversion factor between high and low gain
1289//
1290//------------------------------------------------------------
1291// @function
1292
1293//!@{
1294
1295
1296float get_High_to_Low(void){
1297
1298 return High_to_Low;
1299
1300}
1301
1302float get_sigma_xy_cm_spot(void){
1303
1304 return sigma_spot;
1305
1306}
1307
1308float get_trig_delay(void){
1309
1310 return trig_delay;
1311
1312}
1313
1314//!@}
1315//=------------------------------------------------------------
1316//!@subsection Log of this file.
1317
1318//!@{
1319//
1320// $Log: not supported by cvs2svn $
1321// Revision 1.25 2003/10/26 19:45:38 blanch
1322// The write_all_data input card command has been removed.
1323//
1324// Revision 1.24 2003/10/17 19:40:24 blanch
1325// The gain ratio between the high and low FADC gain is controlled from the
1326// input card.
1327//
1328// Revision 1.23 2003/09/23 17:38:48 blanch
1329// ana_pixels command has been removed.
1330//
1331// Revision 1.22 2003/09/23 16:52:07 blanch
1332// We do not read ct_file anymore.
1333//
1334// Revision 1.21 2003/09/15 10:17:09 blanch
1335// Some modifications in the input card has been done for the multitelescope
1336// configuration.
1337//
1338// Revision 1.20 2003/07/17 18:04:53 blanch
1339// Some new parameters to be read have been introduced
1340//
1341// - FADC pedestals
1342// - Response outer FADC
1343// - Qe file
1344//
1345// The obsolete ones have been removed.
1346//
1347// Revision 1.19 2003/02/12 13:47:32 blanch
1348// *** empty log message ***
1349//
1350// Revision 1.18 2003/01/14 13:37:47 blanch
1351// Option to set a dc value to rise the discriminator threshold has been added.
1352//
1353// Revision 1.17 2002/07/16 16:20:41 blanch
1354// Modifications done for the camera.cxx version, where a first implementation
1355// of the Star Field Rotation has been introduced.
1356//
1357// Revision 1.16 2002/03/15 15:17:18 blanch
1358// Several modification needed to simulate the actual trigger zone.
1359//
1360// Revision 1.15 2002/03/04 17:15:51 blanch
1361// An item, which allows to switch off the storage of the RawEvt, has been
1362// introduced. It is called nowrite_RawEvt. To avoid confusion the item
1363// write_all_images has been moved to write_all_events.
1364//
1365// Revision 1.14 2002/02/28 15:07:23 blanch
1366// Small changes have been done to introduce thes step variable for the
1367// discriminator threshold in the trigger loop mode.
1368//
1369// Revision 1.13 2002/01/18 17:43:08 blanch
1370// Three new commands have been added: fadc_noise, trig_noise and
1371// elec_noise_off.
1372// A small bug in the SIGNATURE check has been solved.
1373//
1374// Revision 1.12 2001/11/13 17:05:14 blanch
1375// New input items int the input card parameter list have been included to fill
1376// the MMcRunHeader.
1377// There has been also some change to remove warnings in the compilation.
1378//
1379// Revision 1.11 2001/07/25 11:38:00 magicsol
1380// Minnor changes
1381//
1382// Revision 1.10 2001/07/19 09:28:30 blanch
1383// A new command, which allows to set individual trigger threshod for each pixel,
1384// has been added.
1385//
1386// Revision 1.9 2001/03/05 10:43:18 blanch
1387// New input commands have been added:
1388//
1389// - write_McFadc: to write the FADC simulation information.
1390// - fadc_prop: gives the shape of the single phe response of the FADC
1391//
1392// And new value has been added in the mean_NSB command that tells how many phes
1393// have to come from the shower to do the NSB simulation in that shower (it speeds
1394// up the simulation).
1395//
1396// Revision 1.8 2001/02/23 10:55:43 magicsol
1397// An input commmand that talls the path for the NSB database has been added.
1398//
1399// Revision 1.7 2001/01/15 12:37:48 magicsol
1400// It has been introduced the option to read from the input card the overlaping
1401// time.
1402//
1403// Revision 1.6 2000/09/21 11:47:33 harald
1404// Oscar found some smaller errors in the calculation of the pixel shape and
1405// corrected it.
1406//
1407// Revision 1.5 2000/07/04 14:13:02 MagicSol
1408// It reads from the general input card the parameters for the
1409// trigger analysi.
1410//
1411// Revision 1.4 2000/05/11 14:22:33 blanch
1412// New input card option has been introduced:
1413// trigger_loop lt ut lm um lg ug
1414// It forces the camera program to study several condition trigger implementations. Integers after key word fix limits of loop over thershold, multiplicity and topology.
1415//
1416// Revision 1.3 2000/03/24 18:14:05 blanch
1417// Parameters that tell as if we are going to see the diskriminator and/or FADC signal have been included.
1418//
1419// Revision 1.2 2000/02/18 17:45:43 petry
1420// This version belongs to camera.cxx 1.5.
1421// It has been put in the repository in order to be
1422// able to share the further development with others.
1423//
1424// If you need something working, wait or take an earlier one.
1425// See file README
1426//
1427// Revision 1.1.1.1 1999/11/05 11:59:34 harald
1428// This the starting point for CVS controlled further developments of the
1429// camera program. The program was originally written by Jose Carlos.
1430// But here you can find a "rootified" version to the program. This means
1431// that there is no hbook stuff in it now. Also the output of the
1432// program changed to the MagicRawDataFormat.
1433//
1434// The "rootification" was done by Dirk Petry and Harald Kornmayer.
1435//
1436// In the following you can see the README file of that version:
1437//
1438// ==================================================
1439//
1440// Fri Oct 22 1999 D.P.
1441//
1442// The MAGIC Monte Carlo System
1443//
1444// Camera Simulation Programme
1445// ---------------------------
1446//
1447// 1) Description
1448//
1449// This version is the result of the fusion of H.K.'s
1450// root_camera which is described below (section 2)
1451// and another version by D.P. which had a few additional
1452// useful features.
1453//
1454// The version compiles under Linux with ROOT 2.22 installed
1455// (variable ROOTSYS has to be set).
1456//
1457// Compile as before simply using "make" in the root_camera
1458// directory.
1459//
1460// All features of H.K.'s root_camera were retained.
1461//
1462// Additional features of this version are:
1463//
1464// a) HBOOK is no longer used and all references are removed.
1465//
1466// b) Instead of HBOOK, the user is given now the possibility of
1467// having Diagnostic data in ROOT format as a complement
1468// to the ROOT Raw data.
1469//
1470// This data is written to the file which is determined by
1471// the new input parameter "diag_file" in the camera parameter
1472// file.
1473//
1474// All source code file belonging to this part have filenames
1475// starting with "MDiag".
1476//
1477// The user can read the output file using the following commands
1478// in an interactive ROOT session:
1479//
1480// root [0] .L MDiag.so
1481// root [1] new TFile("diag.root");
1482// root [2] new TTreeViewer("T");
1483//
1484// This brings up a viewer from which all variables of the
1485// TTree can be accessed and histogrammed. This example
1486// assumes that you have named the file "diag.root", that
1487// you are using ROOT version 2.22 or later and that you have
1488// the shared object library "MDiag.so" which is produced
1489// by the Makefile along with the executable "camera".
1490//
1491// ! The contents of the so-called diag file is not yet fixed.
1492// ! At the moment it is what J.C.G. used to put into the HBOOK
1493// ! ntuple. In future versions the moments calculation can be
1494// ! removed and the parameter list be modified correspondingly.
1495//
1496// c) Now concatenated reflector files can be read. This is useful
1497// if you have run the reflector with different parameters but
1498// you want to continue the analysis with all reflector data
1499// going into ONE ROOT outputfile.
1500//
1501// The previous camera version contained a bug which made reading
1502// of two or more concatenated reflector files impossible.
1503//
1504// d) The reflector output format was changed. It is now version
1505// 0.4 .
1506// The change solely consists in a shortening of the flag
1507// definition in the file
1508//
1509// include-MC/MCCphoton.hxx
1510//
1511// ! IF YOU WANT TO READ REFLECTOR FORMAT 0.3, you can easily
1512// ! do so by recompiling camera with the previous version of
1513// ! include-MC/MCCphoton.hxx.
1514//
1515// The change was necessary for saving space and better
1516// debugging. From now on, this format can be frozen.
1517//
1518// ! For producing reflector output in the new format, you
1519// ! of course have to recompile your reflector with the
1520// ! new include-MC/MCCphoton.hxx .
1521//
1522// e) A first version of the pixelization with the larger
1523// outer pixels is implemented. THIS IS NOT YET FULLY
1524// TESTED, but first rough tests show that it works
1525// at least to a good approximation.
1526//
1527// The present version implements the camera outline
1528// with 18 "gap-pixels" and 595 pixels in total as
1529// shown in
1530//
1531// http://sarastro.ifae.es/internal/home/hardware/camera/numbering.ps
1532//
1533// This change involved
1534//
1535// (i) The file pixels.dat is no longer needed. Instead
1536// the coordinates are generated by the program itself
1537// (takes maybe 1 second). In the file
1538//
1539// pixel-coords.txt
1540//
1541// in the same directory as this README, you find a list
1542// of the coordinates generated by this new routine. It
1543// has the format
1544//
1545// number i j x y size-factor
1546//
1547// where i and j are J.C.G.'s so called biaxis hexagonal
1548// coordinates (for internal use) and x and y are the
1549// coordinates of the pixel centers in the standard camera
1550// coordinate system in units of centimeters. The value
1551// of "size-factor" determines the linear size of the pixel
1552// relative to the central pixels.
1553//
1554// (ii) The magic.def file has two additional parameters
1555// which give the number of central pixels and the
1556// number of gap pixels
1557//
1558// (iii) In camera.h and camera.cxx several changes were
1559// necessary, among them the introduction of several
1560// new functions
1561//
1562// The newly suggested outline with asymmetric Winston cones
1563// will be implemented in a later version.
1564//
1565// f) phe files can no longer be read since this contradicts
1566// our philosophy that the analysis should be done with other
1567// programs like e.g. EVITA and not with "camera" itself.
1568// This possibility was removed.
1569//
1570// g) ROOT is no longer invoked with an interactive interface.
1571// In this way, camera can better be run as a batch program and
1572// it uses less memory.
1573//
1574// h) small changes concerning the variable "t_chan" were necessary in
1575// order to avoid segmentation faults: The variable is used as an
1576// index and it went sometimes outside the limits when camera
1577// was reading proton data. This is because the reflector files
1578// don't contain the photons in a chronological order and also
1579// the timespread can be considerably longer that the foreseen
1580// digitisation timespan. Please see the source code of camera.cxx
1581// round about line 1090.
1582//
1583// j) several unused variables were removed, a few warning messages
1584// occur when you compile camera.cxx but these can be ignored at
1585// the moment.
1586//
1587// In general the program is of course not finished. It still needs
1588// debugging, proper trigger simulation, simulation of the asymmetric
1589// version of the outer pixels, proper NSB simulation, adaption of
1590// the diag "ntuple" contents to our need and others small improvements.
1591//
1592// In the directory rfl-files there is now a file in reflector format 0.4
1593// containing a single event produced by the starfiled adder. It has
1594// a duration of 30 ns and represents the region around the Crab Nebula.
1595// Using the enclosed input parameter file, camera should process this
1596// file without problems.
1597//
1598// 2) The README for the previous version of root_camera
1599//
1600// README for a preliminary version of the
1601// root_camera program.
1602//
1603// root_camera is based on the program "camera"of Jose Carlos
1604// Gonzalez. It was changed in the way that only the pixelisation
1605// and the distibution of the phe to the FADCs works in a
1606// first version.
1607//
1608// Using the #undef command most possibilities of the orignal
1609// program are switched of.
1610//
1611// The new parts are signed by
1612//
1613// - ROOT or __ROOT__
1614// nearly all important codelines for ROOT output are enclosed
1615// in structures like
1616// #ifdef __ROOT__
1617//
1618// code
1619//
1620// #endif __ROOT__
1621//
1622// In same case the new lines are signed by a comment with the word
1623// ROOT in it.
1624//
1625// For timing of the pulse some variable names are changed.
1626// (t0, t1, t --> t_ini, t_fin, t_1st, t_chan,...)
1627// Look also for this changes.
1628//
1629// For the new root-file is also a change in readparm-files
1630//
1631//
1632// - __DETAIL_TRIGGER__
1633//
1634// This is for the implementation of the current work on trigger
1635// studies. Because the class MTrigger is not well documented it
1636// isn´t a part of this tar file. Only a dummy File exists.
1637//
1638//
1639//
1640// With all files in the archive, the root_camera program should run.
1641//
1642// A reflector file is in the directory rfl-files
1643//
1644// ==================================================
1645//
1646// From now on, use CVS for development!!!!
1647//
1648//
1649//
1650// Revision 1.2 1999/10/22 15:01:28 petry
1651// version sent to H.K. and N.M. on Fri Oct 22 1999
1652//
1653// Revision 1.1.1.1 1999/10/21 16:35:11 petry
1654// first synthesised version
1655//
1656// Revision 1.6 1999/03/15 14:59:08 gonzalez
1657// camera-1_1
1658//
1659// Revision 1.5 1999/03/02 09:56:12 gonzalez
1660// *** empty log message ***
1661//
1662// Revision 1.4 1999/01/14 17:32:41 gonzalez
1663// Added to camera the STDIN input option (data_from_input)
1664//
1665//!@}
1666
1667//=EOF
Note: See TracBrowser for help on using the repository browser.