Ignore:
Timestamp:
10/13/04 18:05:05 (20 years ago)
Author:
moralejo
Message:
*** empty log message ***
File:
1 edited

Legend:

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

    r5268 r5269  
    2121//
    2222// $RCSfile: camera.cxx,v $
    23 // $Revision: 1.73 $
     23// $Revision: 1.74 $
    2424// $Author: moralejo $
    25 // $Date: 2004-10-13 14:28:59 $
     25// $Date: 2004-10-13 17:05:05 $
    2626//
    2727////////////////////////////////////////////////////////////////////////
     
    238238static  float Spot_y=0.0;
    239239static  float Spotsigma=0.0;
    240 
    241 static  int CalibrationRun = 0;
    242240
    243241 
     
    717715  // get filenames
    718716
    719   CalibrationRun = 1;
    720   if (! CalibrationRun)
     717  if (! is_calibration_run())
    721718    for(int ict=0;ict<ct_Number;ict++)
    722719      {
     
    16821679
    16831680
    1684   if (CalibrationRun)
     1681  if (is_calibration_run())
    16851682    {
    16861683      DoCalibration(Fadc_CT, Trigger_CT, camgeom, nsb_trigresp, nsb_fadcresp,
     
    44554452{
    44564453
    4457   int ntshow = 0;
     4454  int nevent = 0;
     4455  int maxevents;
    44584456  int lons_return;
    44594457
     
    44644462  float timefirst = 0.;
    44654463  float timelast = 0.;
     4464 
     4465  float lambda, sigma_lambda, phot_per_pix, sigma_time;
     4466  UInt_t *first_pixel, *last_pixel;
     4467  int selected_pixel;
     4468
     4469  // Get parameters of the calibration:
     4470
     4471  get_calibration_properties( &lambda, &sigma_lambda, &phot_per_pix,
     4472                              &sigma_time, &maxevents, &selected_pixel);
     4473
     4474  first_pixel = new UInt_t[ct_Number];
     4475  last_pixel  = new UInt_t[ct_Number];
     4476
     4477  for (int ict = 0; ict < ct_Number; ict++)
     4478    {
     4479      if (selected_pixel < 0)
     4480        {
     4481          first_pixel[ict] = 0;
     4482          last_pixel[ict]  = ((MGeomCam*)(camgeom.UncheckedAt(ict)))->GetNumPixels()-1;
     4483        }
     4484      else
     4485        first_pixel[ict] = last_pixel[ict] = selected_pixel;
     4486    }
     4487
    44664488
    44674489  TArrayC *fadcValues;     //@< the analog Fadc High gain signal for pixels
     
    44764498  float *pheinpix = new float [ct_NPixels];
    44774499
    4478   for (int calevent = 0; calevent < 1; calevent++)
     4500  for (int calevent = 0; calevent < maxevents; calevent++)
    44794501    {
    44804502      //
     
    44934515        }
    44944516
    4495       ntshow++;
    4496 
    4497       if((ntshow+1)%100 == 1)
    4498         log(SIGNATURE, "Event %d\n", ntshow);
     4517      nevent++;
     4518
     4519      if((nevent+1)%100 == 1)
     4520        log(SIGNATURE, "Event %d\n", nevent);
    44994521       
    45004522      // Produce the photoelectrons
    4501       float phot_per_pix = 100.;
    45024523      for(int ict = 0; ict < ct_Number; ict++)
    45034524        produce_calib_phes( (MGeomCam*)(camgeom.UncheckedAt(ict)),
    4504                             phot_per_pix,
    45054525                            Trigger_CT[ict],
    45064526                            Fadc_CT[ict],
     
    45084528                            pheinpix,
    45094529                            &(ntotphot[ict]),
    4510                             ict);
     4530                            ict,
     4531                            lambda,
     4532                            sigma_lambda,
     4533                            phot_per_pix,
     4534                            sigma_time,
     4535                            selected_pixel
     4536                            );
    45114537
    45124538      // NSB simulation
     
    45184544          for (int ict = 0; ict < ct_Number; ict++)
    45194545            {
    4520               for (UInt_t ui = 0;
    4521                   ui < ((MGeomCam*)(camgeom.UncheckedAt(ict)))->GetNumPixels();
    4522                   ui++)
     4546              for (UInt_t ui = first_pixel[ict]; ui <= last_pixel[ict]; ui++)
    45234547                {
    45244548                  nphe_from_nsb[ict] += nsb_phepns[ict][ui];
     
    45934617          // Fill the FADC information
    45944618          //
    4595           for(UInt_t ui=0;
    4596               ui<((MGeomCam*)(camgeom.UncheckedAt(ict)))->GetNumPixels();
    4597               ui++)
     4619          for(UInt_t ui = first_pixel[ict]; ui <= last_pixel[ict]; ui++)
    45984620            {
    45994621              for (int jslice = 0; jslice < FADC_slices_written; jslice++)
     
    46284650//------------------------------------------------------------
    46294651
    4630 int produce_calib_phes( MGeomCam *camgeom,      // The camera layout
    4631                         float     phot_per_pix, // Average number of photons per inner pixel
     4652int produce_calib_phes( MGeomCam *camgeom,       // The camera layout
    46324653                        MTrigger *trigger,
    46334654                        MFadc    *fadc,
    4634                         int      *itotnphe,     // total number of produced photoelectrons             
    4635                         float    *nphe,         // number of photoelectrons in each pixel
    4636                         int      *nphot,        // total number of photons in all pixels
    4637                         int       ict           // Telescope that is being analised to get the right QE.
     4655                        int      *itotnphe,      // total number of produced photoelectrons             
     4656                        float    *nphe,          // number of photoelectrons in each pixel
     4657                        int      *nphot,         // total number of photons in all pixels
     4658                        int       ict,           // Telescope that is being analised to get the right QE.
     4659                        float     lambda,        // Mean wavelength of light in nm
     4660                        float     sigma_lambda,  // Sigma of wavelengtgaussian spread
     4661                        float     phot_per_pix,  // Average # of photons per inner pixel
     4662                        float     sigma_time,    // Sigma of time spread of photons
     4663                        int       selected_pixel // if >= 0, only this pixel is used!
    46384664                        )
    46394665{
     
    46434669  float **qept;
    46444670  float radius_mm, focal_dist_mm;
     4671  int total_photons;
    46454672
    46464673  // reset variables
     
    46714698
    46724699  // Calculate total number of photons to be produced.
    4673   int total_photons = (int) (phot_per_pix * 3.14159265 * radius_mm * radius_mm /
    4674                              (*camgeom)[0].GetA());
     4700  if (selected_pixel < 0)
     4701    total_photons = (int) (phot_per_pix * 3.14159265 * radius_mm * radius_mm /
     4702                           (*camgeom)[0].GetA());
     4703  else
     4704    total_photons = (int) (phot_per_pix *
     4705                           (*camgeom)[selected_pixel].GetA() / (*camgeom)[0].GetA());
    46754706
    46764707  // loop over the photons
     
    46794710    {
    46804711
    4681       time = 0.;
    4682 
    4683       // Obtain photon coordinates on the camera. We assume a point source of light placed
    4684       // in the center of the mirror dish.
    4685 
    4686       // polar angle
    4687       float psi = RandomNumber * 2 * 3.14159265;
    4688       // angle between the telescope axis and the photon trajectory.
    4689       float epsilon = acos(1.-RandomNumber*(1.-cos_epsilon_max));
    4690       float tanepsilon = tan(epsilon);
    4691 
    4692       cx = focal_dist_mm*tanepsilon*cos(psi); // mm
    4693       cy = focal_dist_mm*tanepsilon*sin(psi); // mm
    4694 
    4695       // Angle between photon trajectory and camera plane:
    4696       phi = 3.14159265/2.-epsilon; // rad
     4712      // time
     4713      time = random.Gaus(4.*sigma_time, sigma_time);
     4714
     4715      cout << "### " << time << endl << endl;
    46974716
    46984717      // wavelength
    4699          
    4700       wl = 500.; // nm
    4701 
    4702 
    4703       if( (wl > WAVEBANDBOUND6) || (wl < WAVEBANDBOUND1) ||
    4704           (sqrt(cx*cx + cy*cy) > radius_mm ) )
     4718      wl = lambda;
     4719
     4720      if( (wl > WAVEBANDBOUND6) || (wl < WAVEBANDBOUND1))
    47054721        continue;
    47064722
    4707       //
    4708       // Pixelization
    4709       //
    4710       ipixnum = bpoint_is_in_pix(cx, cy, camgeom);
    4711 
    4712       // -1 = the photon is in none of the pixels
    4713       //  0 = the phton is in the central pixel, which is not used
    4714       if (ipixnum==-1 || ipixnum==0)
    4715         continue;
     4723      if (selected_pixel < 0)
     4724        {
     4725          // Obtain photon coordinates on the camera. We assume a point source of light placed
     4726          // in the center of the mirror dish.
     4727
     4728          // polar angle
     4729          float psi = RandomNumber * 2 * 3.14159265;
     4730          // angle between the telescope axis and the photon trajectory.
     4731          float epsilon = acos(1.-RandomNumber*(1.-cos_epsilon_max));
     4732          float tanepsilon = tan(epsilon);
     4733
     4734          cx = focal_dist_mm*tanepsilon*cos(psi); // mm
     4735          cy = focal_dist_mm*tanepsilon*sin(psi); // mm
     4736 
     4737          if (sqrt(cx*cx + cy*cy) > radius_mm )
     4738            continue;
     4739
     4740          // Angle between photon trajectory and camera plane:
     4741          phi = 3.14159265/2.-epsilon; // rad
     4742
     4743          //
     4744          // Pixelization
     4745          //
     4746          ipixnum = bpoint_is_in_pix(cx, cy, camgeom);
     4747
     4748          // -1 = the photon is in none of the pixels
     4749          //  0 = the phton is in the central pixel, which is not used
     4750          if (ipixnum==-1 || ipixnum==0)
     4751            continue;
     4752        }
     4753      else
     4754        {
     4755          // Angle between photon trajectory and camera plane:
     4756          phi = atan2( focal_dist_mm,
     4757                       sqrt( (*camgeom)[selected_pixel].GetX()*(*camgeom)[selected_pixel].GetX()+
     4758                             (*camgeom)[selected_pixel].GetY()*(*camgeom)[selected_pixel].GetY()));
     4759
     4760          ipixnum = selected_pixel;
     4761        }
     4762
    47164763
    47174764      // increase number of photons within pixels
     
    47934840      *itotnphe += 1;
    47944841    }
    4795 
     4842  cout << "$$" << endl;
    47964843  return(0);
    47974844
Note: See TracChangeset for help on using the changeset viewer.