Changeset 2286 for trunk/MagicSoft


Ignore:
Timestamp:
07/17/03 19:02:46 (21 years ago)
Author:
blanch
Message:
Several new features introduced as well as fixed bugs

	- 1/100 events printed out
	- Low gain implemented
	- Different response for outer and inner pixels
	- Some warnings removed
	- pedestal and qe file from inpuit card
	- Faster electronic simulation
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Simulation/Detector/Camera/camera.cxx

    r2201 r2286  
    2121//
    2222// $RCSfile: camera.cxx,v $
    23 // $Revision: 1.56 $
     23// $Revision: 1.57 $
    2424// $Author: blanch $
    25 // $Date: 2003-06-18 17:13:35 $
     25// $Date: 2003-07-17 18:02:46 $
    2626//
    2727////////////////////////////////////////////////////////////////////////
     
    240240static float FADC_response_ampl = MFADC_RESPONSE_AMPLITUDE;
    241241static float FADC_response_fwhm = MFADC_RESPONSE_FWHM;
     242static float FADC_resp_ampl_out = MFADC_RESPONSE_AMPLITUDE;
     243static float FADC_resp_fwhm_out = MFADC_RESPONSE_FWHM;
    242244static float FADC_noise = 2.0;
    243245
     
    398400  char inname[256];           //@< input file name
    399401  char starfieldname[256];    //@< starfield input file name
     402  char qe_filename[256];       //@< qe input file name
    400403
    401404  char datname[256];          //@< data (ASCII) output file name
     
    407410
    408411  char nsbpathname[256];      //@< directory with the dataabse for th NSB
     412  char nsbpath_outer[256];    //@< directory with the dataabse for outer pixels
    409413
    410414  char flag[SIZE_OF_FLAGS + 1];  //@< flags in the .rfl file
    411   char flag_new[4];              //@< New flag for the run header in the .rfl file
     415  char flag_new[SIZE_OF_FLAGS + 1];              //@< New flag for the run header in the .rfl file
    412416
    413417  int reflector_file_version;  //@< vrsion of he reflector file
     
    480484  int flagstoring = 0;
    481485
    482   float fCorrection;          //@< Factor to apply to pixel values (def. 1.)
    483 
    484486  int ntrigger = 0;           //@< number of triggers in the whole file
    485487  int btrigger = 0;           //@< trigger flag
     
    493495  float fpixelthres[CAMERA_PIXELS];         //@< Threshold values
    494496
    495   TArrayC *fadcValues;  //@< the analog Fadc signal for pixels
    496 
    497   float degTriggerZone;       //@< trigger area in the camera (radius, in deg.)
     497  TArrayC *fadcValues;     //@< the analog Fadc High gain signal for pixels
     498  TArrayC *fadcValuesLow;  //@< the analog Fadc Low gain signal for pixels
    498499
    499500  int still_in_loop = FALSE;
     
    524525
    525526  ct_NPixels=camgeom.GetNumPixels();
    526   read_QE();
    527   read_WC();
    528527
    529528  //!@' @#### Definition of variables for |getopt()|.
     
    598597  Data_From_STDIN = get_data_from_stdin();
    599598
     599  // read WC and QE files
     600
     601  strcpy( qe_filename, get_qe_filename());
     602
     603  read_QE(qe_filename);
     604  read_WC();
     605
    600606  // write all images, even those without trigger?
    601607
     
    618624  get_secure_threhold(&riseDiskThres,&secureDiskThres);
    619625
    620   get_FADC_properties( &FADC_response_ampl, &FADC_response_fwhm);
     626  get_FADC_properties( &FADC_response_ampl, &FADC_response_fwhm,
     627                       &FADC_resp_ampl_out, &FADC_resp_fwhm_out);
    621628
    622629  get_Trigger_properties( &Trigger_gate_length, &Trigger_overlaping_time, &Trigger_response_ampl, &Trigger_response_fwhm);
     
    639646
    640647  strcpy( inname, get_input_filename() );
     648
    641649  strcpy( starfieldname, get_starfield_filename() );
    642650  strcpy( datname, get_data_filename() );
     
    645653  strcpy( ct_filename, get_ct_filename() );
    646654  strcpy( nsbpathname, get_nsb_directory() );
     655  strcpy( nsbpath_outer, get_nsb_directory_outer() );
    647656
    648657  // get different parameters of the simulation
     
    657666  //Parameters for starfield rotation
    658667
    659     get_teles_axis(&zenith, &azimutal);
    660668    Starfield_rotate = get_starfield_rotate();
    661669    log(SIGNATURE,
     
    668676
    669677  log(SIGNATURE,
    670       "%s:\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n",
     678      "%s:\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n\t%20s:\t%s\n",
    671679      "Filenames",
    672680      "In", inname,
    673681      "Stars", starfieldname,
    674       "NSB database", nsbpathname,
     682      "NSB database (inner pixels)", nsbpathname,
     683      "NSB database (outer pixels)", nsbpath_outer,
    675684      "CT", ct_filename,
    676685      "Data", datname,
     
    790799  Int_t Lev0, Lev1;
    791800 
    792   fadcValues =  new TArrayC(FADC_SLICES);
     801  fadcValues    =  new TArrayC(FADC_SLICES);
     802  fadcValuesLow =  new TArrayC(FADC_SLICES);
    793803
    794804  // number of pixels for parameters
     
    813823                    Trigger_response_fwhm);  //@< A instance of the Class MTrigger
    814824
     825  // Generate databse for trigger electronic noise
     826  Trigger.SetElecNoise(Trigger_noise) ;
     827
    815828  // Set Right Discriminator threshold, taking into account trigger pixels
    816 
    817 
    818829  Trigger.CheckThreshold(&qThreshold[0]);
    819830
     
    857868  }
    858869
    859   MFadc fadc(FADC_response_ampl,FADC_response_fwhm) ; //@< A instance of the Class MFadc
     870  MFadc fadc(FADC_response_ampl,FADC_response_fwhm,
     871             FADC_resp_ampl_out,FADC_resp_fwhm_out) ; //@< A instance of the Class MFadc
    860872
    861873  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    874886
    875887  for(i=0;i<CAMERA_PIXELS;i++)
    876     input_pedestals[i]=10.5;
    877  
     888    input_pedestals[i]=get_FADC_pedestal();
     889
    878890  fadc.SetPedestals(input_pedestals);
     891
     892  // Generate databse for the Fadc electronic noise
     893 
     894  fadc.SetElecNoise(FADC_noise);
    879895
    880896  // Prepare the raw data output
     
    9871003
    9881004  //  Fill branches for MMcTrigHeader
    989  
     1005
    9901006  if(!Trigger_Loop && Write_McTrig){
    9911007
     
    11341150  }
    11351151 
    1136   // set trigger area (deg)
    1137 
    1138   if ( ! get_trigger_radius( &degTriggerZone ) )
    1139     degTriggerZone = ( ct_Type == 0 ) ? (5.0) : (5.0);
    1140 
    1141   if ( ! get_correction( &fCorrection ) )
    1142     fCorrection = 1.0;
    11431152
    11441153  // prepare the NSB simulation
     
    11461155  //  Instance of the Mlons class
    11471156  MLons lons(Trigger_response_ampl, Trigger_response_fwhm,
    1148              MFADC_RESPONSE_AMPLITUDE, MFADC_RESPONSE_FWHM);
     1157             FADC_response_ampl,FADC_response_fwhm);
    11491158
    11501159  lons.SetPath(nsbpathname);
     1160
     1161  //  Instance of the Mlons class
     1162  MLons lons_outer(Trigger_response_ampl, Trigger_response_fwhm,
     1163                   FADC_resp_ampl_out,FADC_resp_fwhm_out);
     1164
     1165  lons_outer.SetPath(nsbpath_outer);
    11511166
    11521167  if( simulateNSB ){
     
    12261241 
    12271242  strcpy( flag, "                                        \0" );
     1243  strcpy( flag_new, "    \0" );
    12281244
    12291245  // allocate space for PMTs numbers of pixels
     
    12641280
    12651281        //  We break the main loop
    1266         cout<<"Warning: Expected start of run header flag, but found:"<<flag<<endl;
     1282        cout<<"Warning: Expected start of run header flag, but found:"<<flag_new<<endl;
    12671283        cout<<"         We break the main loop"<<endl;
    12681284        break;     
     
    12771293
    12781294      fread( flag, SIZE_OF_FLAGS, 1, inputfile );
    1279 
    12801295      while( isA( flag, FLAG_START_OF_EVENT   )){ // while there is a next event
    12811296        fread( flag_new, 4, 1, inputfile );
     
    12841299
    12851300        //  We break while events loop
    1286           cout<<"Warning: Expected start of event header flag, but found:"<<flag<<endl;
     1301          cout<<"Warning: Expected start of event header flag, but found:"<<flag_new<<endl;
    12871302          cout<<"         We break the while events loop"<<endl;
    12881303          break;     
     
    15121527          for(UInt_t ui=0;ui<camgeom.GetNumPixels();ui++)
    15131528            if(nsb_phepns_rotated[ui]>0.0){
    1514               k=lons.GetResponse(nsb_phepns_rotated[ui],0.1,
    1515                                  & nsb_trigresp[0],& nsb_fadcresp[0]);
     1529              if(camgeom[ui].GetR()>camgeom[0].GetR()){
     1530                k=lons_outer.GetResponse(nsb_phepns_rotated[ui],0.1,
     1531                                   & nsb_trigresp[0],& nsb_fadcresp[0]);
     1532              }
     1533              else{
     1534                k=lons.GetResponse(nsb_phepns_rotated[ui],0.1,
     1535                                   & nsb_trigresp[0],& nsb_fadcresp[0]);
     1536              }
    15161537              if(k==0){
    15171538                cout << "Exiting.\n";
     
    15281549        }
    15291550
     1551        ntcph+=ncph;
    15301552        if ((nshow+ntshow)%100 == 1){
    15311553          log(SIGNATURE, "End of this event: %d cphs(+%d). . .\n",
     
    15351557          cout<<inumphensb<<endl;
    15361558        }
    1537         ntcph += ncph;
    15381559
    15391560        // skip it ?
     
    15671588        // TRIGGER HERE
    15681589
    1569         //
    1570         //   now the noise of the electronic
    1571         //   (preamps, optical transmission,..)  is introduced.
    1572         //   This is done inside the class MTrigger by the method ElecNoise.
    1573         //   
    1574         if (addElecNoise){     
    1575             Trigger.ElecNoise(Trigger_noise) ;
    1576            
    1577             fadc.ElecNoise(FADC_noise) ;
    1578         }
    1579 
    15801590        //  We should simulate the AC coupling behaviour:
    15811591        //  For the FADC it is only done for the NSB while producinr
     
    15831593        //  For the trigger is done in the Trigger.Diskriminate(), which
    15841594        //  is called later (it should be seperated to speed up the program
     1595        //
     1596
     1597        //   now the noise of the electronic
     1598        //   (preamps, optical transmission,..)  is introduced.
     1599        //   This is done inside the class MTrigger by the method ElecNoise.
     1600        //   
     1601
     1602        if (addElecNoise && nphe2NSB<=inumphe){
     1603          Trigger.ElecNoise(Trigger_noise) ;
     1604           
     1605          fadc.ElecNoise(FADC_noise) ;
     1606        }
    15851607
    15861608        //  now a shift in the fadc signal due to the pedestlas is
     
    16931715                          for (j=0;j<FADC_SLICES;j++){
    16941716                            fadcValues->AddAt(fadc.GetFadcSignal(i,j),j);
     1717                            fadcValuesLow->AddAt(fadc.GetFadcLowGainSignal(i,j),j);
    16951718                          }
    16961719                          EvtData[iconcount]->AddPixel(i,fadcValues,0);
     1720                          EvtData[iconcount]->AddPixel(i,fadcValuesLow,kTRUE);
    16971721                        }
    16981722                      }
     
    17251749              if (reflector_file_version<6){
    17261750                mcevth.get_times(&ftime, &ltime);
    1727                 McEvt->Fill( -1.0,
     1751                McEvt->Fill( 0,
    17281752                             (UShort_t) mcevth.get_primary() ,
    17291753                             mcevth.get_energy(),
     
    17501774                             (UInt_t)mcevth.get_CORSIKA(),
    17511775                             (UInt_t)mcevth.get_AtmAbs(),
    1752                              (UInt_t)mcevth.get_MirrAbs()+mcevth.get_OutOfMirr()+mcevth.get_BlackSpot(),
     1776                             (UInt_t)(mcevth.get_MirrAbs()+mcevth.get_OutOfMirr()+mcevth.get_BlackSpot()),
    17531777                             (UInt_t) ncph,
    17541778                             (UInt_t) inumphe,
     
    17621786                mcevth_2.get_times(&ftime, &ltime);
    17631787                chi2=mcevth_2.get_NKGfit(&Nmax, &t0, &tmax, &a, &b, &c);
    1764                 McEvt->Fill( mcevth_2.get_evt_number(),
     1788                McEvt->Fill((UInt_t) mcevth_2.get_evt_number(),
    17651789                            (UShort_t) mcevth_2.get_primary() ,
    17661790                             mcevth_2.get_energy(),
     
    17871811                             (UInt_t)mcevth_2.get_CORSIKA(),
    17881812                             (UInt_t)mcevth_2.get_AtmAbs(),
    1789                              (UInt_t)mcevth_2.get_MirrAbs()+mcevth_2.get_OutOfMirr()+mcevth_2.get_BlackSpot(),
     1813                             (UInt_t)(mcevth_2.get_MirrAbs()+mcevth_2.get_OutOfMirr()+mcevth_2.get_BlackSpot()),
    17901814                             (UInt_t) ncph,
    17911815                             (UInt_t) inumphe,
     
    18981922                  for (j=0;j<FADC_SLICES;j++){
    18991923                    fadcValues->AddAt(fadc.GetFadcSignal(i,j),j);
     1924                    fadcValuesLow->AddAt(fadc.GetFadcLowGainSignal(i,j),j);
    19001925                  }
    19011926                  EvtData[0]->AddPixel(i,fadcValues,0);
     1927                  EvtData[0]->AddPixel(i,fadcValuesLow,kTRUE);
    19021928                }
    19031929              }
     
    19111937              if (reflector_file_version<6){
    19121938                mcevth.get_times(&ftime, &ltime);
    1913                 McEvt->Fill( -1.0,
     1939                McEvt->Fill( 0,
    19141940                             (UShort_t) mcevth.get_primary() ,
    19151941                             mcevth.get_energy(),
     
    19361962                             (UInt_t)mcevth.get_CORSIKA(),
    19371963                             (UInt_t)mcevth.get_AtmAbs(),
    1938                              (UInt_t)mcevth.get_MirrAbs()+mcevth.get_OutOfMirr()+mcevth.get_BlackSpot(),
     1964                             (UInt_t)(mcevth.get_MirrAbs()+mcevth.get_OutOfMirr()+mcevth.get_BlackSpot()),
    19391965                             (UInt_t) ncph,
    19401966                             (UInt_t) inumphe,
     
    19481974                mcevth_2.get_times(&ftime, &ltime);
    19491975                chi2=mcevth_2.get_NKGfit(&Nmax, &t0, &tmax, &a, &b, &c);
    1950                 McEvt->Fill( mcevth_2.get_evt_number(),
     1976                McEvt->Fill( (UInt_t) mcevth_2.get_evt_number(),
    19511977                             (UShort_t) mcevth_2.get_primary() ,
    19521978                             mcevth_2.get_energy(),
     
    19731999                             (UInt_t)mcevth_2.get_CORSIKA(),
    19742000                             (UInt_t)mcevth_2.get_AtmAbs(),
    1975                              (UInt_t)mcevth_2.get_MirrAbs()+mcevth_2.get_OutOfMirr()+mcevth_2.get_BlackSpot(),
     2001                             (UInt_t) (mcevth_2.get_MirrAbs()+mcevth_2.get_OutOfMirr()+mcevth_2.get_BlackSpot()),
    19762002                             (UInt_t) ncph,
    19772003                             (UInt_t) inumphe,
     
    20882114        } // end if found end of file
    20892115      } // end if found end of run
    2090 
     2116     
    20912117    } // end if else found start of run
    20922118  } // end big while loop
     
    21012127  get_starfield_center(&sfRaH,&sfRaM,&sfRaS,&sfDeD,&sfDeM,&sfDeS);
    21022128  if (reflector_file_version<6){
    2103     get_teles_axis(&telestheta,&telesphi);
     2129    telestheta=-10.0;
     2130    telesphi=-10.0;
    21042131    mcevth.get_theta_range(&shthetamin, &shthetamax);
    21052132    mcevth.get_phi_range(&shphimin,&shphimax);
     
    27132740//!@{
    27142741void
    2715 read_QE(void){
     2742read_QE(char fname[256]){
    27162743  ifstream qefile;
    27172744  char line[LINE_MAX_LENGTH];
     
    27242751  // try to open the file
    27252752
    2726   log("read_QE", "Opening the file \"%s\" . . .\n", QE_FILE);
    2727  
    2728   qefile.open( QE_FILE );
     2753  log("read_QE", "Opening the file \"%s\" . . .\n", fname);
     2754 
     2755  qefile.open( fname );
    27292756 
    27302757  // if it is wrong or does not exist, exit
    27312758 
    27322759  if ( qefile.bad() )
    2733     error( "read_QE", "Cannot open \"%s\". Exiting.\n", QE_FILE );
     2760    error( "read_QE", "Cannot open \"%s\". Exiting.\n", fname );
    27342761 
    27352762  // read file
     
    28462873  // try to open the file
    28472874
    2848   log("read_QE", "Opening the file \"%s\" . . .\n", WC_FILE);
     2875  log("read_WC", "Opening the file \"%s\" . . .\n", WC_FILE);
    28492876 
    28502877  wcfile.open( WC_FILE );
     
    38943921    // store the new photoelectron
    38953922
    3896     fadc->Fill(ipixnum,(t-*tmin_ns) , trigger->FillShow(ipixnum,t-*tmin_ns));
     3923    fadc->Fill(ipixnum,(t-*tmin_ns) ,
     3924               trigger->FillShow(ipixnum,t-*tmin_ns),
     3925               !((*camgeom)[ipixnum].GetR()>(*camgeom)[0].GetR()));
    38973926   
    38983927    *itotnphe += 1;
Note: See TracChangeset for help on using the changeset viewer.