Ignore:
Timestamp:
08/27/04 11:36:24 (21 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mcalib
Files:
2 edited

Legend:

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

    r4639 r4752  
    265265    }
    266266
     267    // Sizes might have changed
     268    if (fPedestalFlag && (Int_t)fPedestal->GetSize() != fSignals->GetSize())
     269    {
     270        *fLog << err << "Size mismatch of MPedestalCam and MCalibrationCam... abort." << endl;
     271        return kFALSE;
     272    }
     273
    267274    if(fCalibrationMode == kBlindPixel && !fQEs->IsBlindPixelMethodValid())
    268275    {
     
    315322
    316323    if (TestPedestalFlag(kRun))
    317         if (!CalibratePedestal())
    318           return kFALSE;
     324        Calibrate(kFALSE, kTRUE);
    319325
    320326    return kTRUE;
     
    323329// --------------------------------------------------------------------------
    324330//
    325 // Calibrate the Pedestal values
    326 //
    327 Bool_t MCalibrateData::CalibratePedestal()
    328 {
    329     //
    330     // Fill MPedPhot container using the informations from
    331     // MPedestalCam, MExtractedSignalCam and MCalibrationCam
    332     //
    333     const Float_t slices     = fSignals->GetNumUsedHiGainFADCSlices();
    334     const Float_t sqrtslices = TMath::Sqrt(slices);
    335 
    336     // is pixid equal to pixidx ?
    337     if ((Int_t)fPedestal->GetSize() != fSignals->GetSize())
    338     {
    339         *fLog << err << "Sizes of MPedestalCam and MCalibrationCam are different" << endl;
    340         return kFALSE;
    341     }
    342 
    343     const Int_t n = fPedestal->GetSize();
    344     for (Int_t pixid=0; pixid<n; pixid++)
    345     {
    346         const MPedestalPix &ped = (*fPedestal)[pixid];
    347 
    348         // pedestals/(used FADC slices)   in [ADC] counts
    349         const Float_t pedes  = ped.GetPedestal()    * slices;
    350         const Float_t pedrms = ped.GetPedestalRms() * sqrtslices;
    351 
    352         //
    353         // get phe/ADC conversion factor
    354         //
    355         Float_t hiloconv;
    356         Float_t hiloconverr;
    357         Float_t calibConv;
    358         Float_t calibConvVar;
    359         Float_t calibFFactor;
    360         if (!GetConversionFactor(pixid, hiloconv, hiloconverr,
    361                                  calibConv, calibConvVar, calibFFactor))
    362             continue;
    363 
    364         //
    365         // pedestals/(used FADC slices)   in [number of photons]
    366         //
    367         const Float_t pedphot    = pedes  * calibConv;
    368         const Float_t pedphotrms = pedrms * calibConv;
    369 
    370         (*fPedPhot)[pixid].Set(pedphot, pedphotrms);
    371     }
    372 
    373     fPedPhot->SetReadyToSave();
    374 
    375     return kTRUE;
    376 }
    377 
    378 // --------------------------------------------------------------------------
    379 //
    380331// Get conversion factor and its error from MCalibrationCam
    381332//
    382333Bool_t MCalibrateData::GetConversionFactor(UInt_t pixidx, Float_t &hiloconv, Float_t &hiloconverr,
    383                                            Float_t &calibConv, Float_t &calibConvVar, Float_t &calibFFactor)
     334                                           Float_t &calibConv, Float_t &calibConvVar,
     335                                           Float_t &calibFFactor) const
    384336{
    385337    //
     
    486438}
    487439
    488 void MCalibrateData::CalibrateData()
    489 {
    490     const UInt_t npix = fSignals->GetSize();
     440void MCalibrateData::Calibrate(Bool_t data, Bool_t pedestal) const
     441{
     442    if (!data && !pedestal)
     443        return;
     444
     445    const UInt_t  npix       = fSignals->GetSize();
     446    const Float_t slices     = fSignals->GetNumUsedHiGainFADCSlices();
     447    const Float_t sqrtslices = TMath::Sqrt(slices);
    491448
    492449    Float_t hiloconv;
    493450    Float_t hiloconverr;
    494     Float_t calibrationConversionFactor;
    495     Float_t calibrationConversionFactorErr;
     451    Float_t calibConv;
     452    Float_t calibConvErr;
    496453    Float_t calibFFactor;
    497454
     
    499456    {
    500457        if (!GetConversionFactor(pixidx, hiloconv, hiloconverr,
    501                                  calibrationConversionFactor, calibrationConversionFactorErr, calibFFactor))
     458                                 calibConv, calibConvErr, calibFFactor))
    502459            continue;
    503460
    504         const MExtractedSignalPix &sig = (*fSignals)[pixidx];
    505 
    506         Float_t signal = 0;
    507         Float_t signalErr = 0.;
    508 
    509         if (sig.IsLoGainUsed())
    510         {
    511             signal    = sig.GetExtractedSignalLoGain()*hiloconv;
    512             signalErr = signal*hiloconverr;
    513         }
    514         else
    515         {
    516             if (sig.GetExtractedSignalHiGain() <= 9999.)
    517                 signal = sig.GetExtractedSignalHiGain();
    518         }
    519 
    520         const Float_t nphot    = signal*calibrationConversionFactor;
    521         const Float_t nphotErr = calibFFactor*TMath::Sqrt(TMath::Abs(nphot));
    522 
    523         //
    524         // The following part is the commented first version of the error calculation
    525         // Contact Markus Gaug for questions (or wait for the next documentation update...)
    526         //
    527         /*
    528          nphotErr = signal    > 0 ? signalErr*signalErr / (signal * signal)  : 0.
    529          + calibConv > 0 ? calibConvVar  / (calibConv * calibConv ) : 0.;
    530          nphotErr  = TMath::Sqrt(nphotErr) * nphot;
    531          */
    532 
    533         MCerPhotPix *cpix = fCerPhotEvt->AddPixel(pixidx, nphot, nphotErr);
    534 
    535         if (sig.GetNumHiGainSaturated() > 0)
    536             cpix->SetPixelHGSaturated();
    537 
    538         if (sig.GetNumLoGainSaturated() > 0)
    539             cpix->SetPixelSaturated();
    540     }
    541 
    542     fCerPhotEvt->FixSize();
    543     fCerPhotEvt->SetReadyToSave();
     461        if (data)
     462        {
     463            const MExtractedSignalPix &sig = (*fSignals)[pixidx];
     464
     465            Float_t signal = 0;
     466            Float_t signalErr = 0.;
     467
     468            if (sig.IsLoGainUsed())
     469            {
     470                signal    = sig.GetExtractedSignalLoGain()*hiloconv;
     471                signalErr = signal*hiloconverr;
     472            }
     473            else
     474            {
     475                if (sig.GetExtractedSignalHiGain() <= 9999.)
     476                    signal = sig.GetExtractedSignalHiGain();
     477            }
     478
     479            const Float_t nphot    = signal*calibConv;
     480            const Float_t nphotErr = calibFFactor*TMath::Sqrt(TMath::Abs(nphot));
     481
     482            //
     483            // The following part is the commented first version of the error calculation
     484            // Contact Markus Gaug for questions (or wait for the next documentation update...)
     485            //
     486            /*
     487             nphotErr = signal    > 0 ? signalErr*signalErr / (signal * signal)  : 0.
     488             + calibConv > 0 ? calibConvVar  / (calibConv * calibConv ) : 0.;
     489             nphotErr  = TMath::Sqrt(nphotErr) * nphot;
     490             */
     491
     492            MCerPhotPix *cpix = fCerPhotEvt->AddPixel(pixidx, nphot, nphotErr);
     493
     494            if (sig.GetNumHiGainSaturated() > 0)
     495                cpix->SetPixelHGSaturated();
     496
     497            if (sig.GetNumLoGainSaturated() > 0)
     498                cpix->SetPixelSaturated();
     499        }
     500        if (pedestal)
     501        {
     502            const MPedestalPix &ped = (*fPedestal)[pixidx];
     503
     504            // pedestals/(used FADC slices)   in [ADC] counts
     505            const Float_t pedes  = ped.GetPedestal()    * slices;
     506            const Float_t pedrms = ped.GetPedestalRms() * sqrtslices;
     507
     508            //
     509            // pedestals/(used FADC slices)   in [number of photons]
     510            //
     511            const Float_t pedphot    = pedes  * calibConv;
     512            const Float_t pedphotrms = pedrms * calibConv;
     513
     514            (*fPedPhot)[pixidx].Set(pedphot, pedphotrms);
     515        }
     516    }
     517
     518    if (pedestal)
     519        fPedPhot->SetReadyToSave();
     520
     521    if (data)
     522    {
     523        fCerPhotEvt->FixSize();
     524        fCerPhotEvt->SetReadyToSave();
     525    }
    544526}
    545527
     
    563545     */
    564546
    565     if (fCalibrationMode!=kSkip)
    566         CalibrateData();
    567 
    568     if (TestPedestalFlag(kEvent))
    569         if (!CalibratePedestal())
    570             return kFALSE;
    571 
    572   return kTRUE;
     547    Calibrate(fCalibrationMode!=kSkip, TestPedestalFlag(kEvent));
     548    return kTRUE;
    573549}
    574550
  • trunk/MagicSoft/Mars/mcalib/MCalibrateData.h

    r4632 r4752  
    5353  TString  fNamePedPhotContainer;           // name of fPedPhot
    5454
    55   Bool_t CalibratePedestal();
    56   void   CalibrateData();
     55  void Calibrate(Bool_t data, Bool_t pedestal) const;
    5756 
    58   Bool_t GetConversionFactor(UInt_t, Float_t &, Float_t &, Float_t &, Float_t &, Float_t &);
     57  Bool_t GetConversionFactor(UInt_t, Float_t &, Float_t &, Float_t &, Float_t &, Float_t &) const;
    5958 
    6059  Int_t  PreProcess(MParList *pList);
Note: See TracChangeset for help on using the changeset viewer.