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

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