Ignore:
Timestamp:
03/04/05 16:25:15 (20 years ago)
Author:
gaug
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mcalib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCam.cc

    r6211 r6749  
    761761// --------------------------------------------------------------------------
    762762//
     763// Calculates the average conversion factor FADC counts to equiv. photo-electrons for pixel sizes.
     764// The geometry container is used to get the necessary
     765// geometry information (area index). The MCalibrationQECam container is necessary for
     766// the quantum efficiency information.
     767// If the bad pixel container is given all pixels which have the flag 'kUnsuitableRun' are ignored
     768// in the calculation of the size average.
     769//
     770// Returns a TArrayF of dimension 2:
     771// arr[0]: averaged conversion factors (default: -1.)
     772// arr[1]: Error (rms) of averaged conversion factors (default: 0.)
     773//
     774TArrayF MCalibrationChargeCam::GetAveragedConvFADC2PhePerArea  ( const MGeomCam &geom, const MCalibrationQECam &qecam,
     775                                           const UInt_t ai,  MBadPixelsCam *bad)
     776{
     777
     778  const Int_t np = GetSize();
     779
     780  Double_t mean  = 0.;
     781  Double_t mean2 = 0.;
     782  Int_t    nr    = 0;
     783
     784  MHCamera convcam(geom,"ConvFactors","Conversion Factors;Conv Factor [phe/FADC cnts];channels");
     785
     786  for (int i=0; i<np; i++)
     787    {
     788      if (bad && (*bad)[i].IsUnsuitable(MBadPixelsPix::kUnsuitableRun))
     789        continue;
     790
     791      if (bad && (*bad)[i].IsUncalibrated(MBadPixelsPix::kDeviatingNumPhes))
     792        continue;
     793
     794      const UInt_t aidx = geom[i].GetAidx();
     795     
     796      if (ai != aidx)
     797        continue;
     798     
     799      const MCalibrationQEPix &qepix = (MCalibrationQEPix&)qecam[i];
     800      if (!qepix.IsAverageQEFFactorAvailable())
     801        continue;
     802     
     803      const MCalibrationChargePix &pix = (MCalibrationChargePix&)(*this)[i];
     804      const Float_t conv = pix.GetMeanConvFADC2Phe()/qepix.GetQECascadesFFactor()*MCalibrationQEPix::gkDefaultAverageQE;
     805
     806      mean  += conv;
     807      mean2 += conv*conv;
     808      nr    ++;
     809
     810      convcam.Fill(i,conv);
     811      convcam.SetUsed(i);
     812    }
     813
     814  Float_t mn  = nr   ? mean/nr : -1.;
     815  Float_t sg  = nr>1 ? TMath::Sqrt((mean2 - mean*mean/nr)/(nr-1)) : 0.;
     816
     817  const Int_t aidx = (Int_t)ai;
     818
     819  TH1D *h = convcam.ProjectionS(TArrayI(),TArrayI(1,&aidx),"_py",750);
     820  h->SetDirectory(NULL);
     821
     822  TF1 *fit = NULL;
     823
     824  if (geom.InheritsFrom("MGeomCamMagic"))
     825    {
     826
     827      fit = new TF1("fit","gaus",0.01,1.);
     828     
     829      // Fix the ranges, as found by Nadia
     830      if(aidx == 0)
     831        {h->Fit("fit","REQ", "",0.07,0.3);}
     832      else
     833        {h->Fit("fit","REQ", "",0.15,1.0);}
     834    }
     835  else
     836    {
     837      h->Fit("gaus","Q");
     838      fit = h->GetFunction("gaus");
     839    }
     840
     841  Float_t ci2   = fit->GetChisquare();
     842  Float_t sigma = fit->GetParameter(2);
     843 
     844  if (ci2 > 500. || sigma > sg)
     845    {
     846      if (geom.InheritsFrom("MGeomCamMagic"))
     847        {
     848          // Fix the ranges, as found by Nadia
     849          if(aidx == 0)
     850            {h->Fit("fit","REQ", "",0.07,0.3);}
     851          else
     852            {h->Fit("fit","REQ", "",0.15,1.0);}
     853        }
     854      else
     855        {
     856          h->Fit("gaus","MREQ");
     857          fit = h->GetFunction("gaus");
     858        }
     859     
     860      ci2   = fit->GetChisquare();
     861      sigma = fit->GetParameter(2);
     862    }
     863 
     864  const Int_t ndf = fit->GetNDF();
     865
     866  if (ci2 < 500. && sigma < sg && ndf > 2)
     867    {
     868      mn  = fit->GetParameter(1);
     869      sg  = sigma;
     870    }
     871 
     872  *fLog << inf << "Conversion Factors to equiv. photo-electrons area idx: " << aidx << ":" << endl;
     873  *fLog << inf << "Mean: " << Form("%4.3f",mn)
     874        << "+-" << Form("%4.3f",fit->GetParError(1))
     875        << "  Sigma: " << Form("%4.3f",sg) << "+-" << Form("%4.3f",fit->GetParError(2))
     876        << "  Chisquare: " << Form("%4.3f",fit->GetChisquare()) << "  NDF  : " << ndf << endl;         
     877 
     878  delete fit;
     879  delete h;
     880  gROOT->GetListOfFunctions()->Remove(fit);
     881
     882  TArrayF arr(2);
     883  arr[0] = mn;
     884  arr[1] = sg;
     885
     886  return arr;
     887}
     888
     889// --------------------------------------------------------------------------
     890//
    763891// Calculates the average conversion factor FADC counts to photons for camera sectors.
    764892// The geometry container is used to get the necessary
  • trunk/MagicSoft/Mars/mcalib/MCalibrationChargeCam.h

    r5557 r6749  
    4646  TArrayF GetAveragedConvFADC2PhotPerArea    (const MGeomCam &geom, const MCalibrationQECam &qecam,
    4747                                              const UInt_t ai=0,  MBadPixelsCam *bad=NULL);
     48  TArrayF GetAveragedConvFADC2PhePerArea     (const MGeomCam &geom, const MCalibrationQECam &qecam,
     49                                              const UInt_t ai=0,  MBadPixelsCam *bad=NULL);
    4850  TArrayF GetAveragedConvFADC2PhotPerSector  (const MGeomCam &geom, const MCalibrationQECam &qecam,
    4951                                              const UInt_t sec=0, MBadPixelsCam *bad=NULL);
Note: See TracChangeset for help on using the changeset viewer.