Changeset 4639 for trunk/MagicSoft


Ignore:
Timestamp:
08/17/04 09:39:23 (20 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/Changelog

    r4637 r4639  
    2121
    2222
     23 2004/08/17: Thomas Bretz
     24
     25   * mcalib/MCalibrateData.[h,cc]:
     26     - unrolled some if-else statements to accelerate the algorithm a
     27       bit (it is just the bottelneck of calibrating the signal)
     28     - made sure that code which in not needed is not executed in
     29       this case
     30
     31
     32
    2333 2004/08/16: Thomas Bretz
    2434
     
    2636     - change to support also 'No calibration of data'
    2737     - removed obsolete dependancie on *'FromData' containers
     38
     39   * mcalib/MCalibrateData.[h,cc], mbadpixels/MBadPixelsCalc.[h,cc]:
    2840     - added member function ReadEnv
    2941
  • trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc

    r4635 r4639  
    331331    // MPedestalCam, MExtractedSignalCam and MCalibrationCam
    332332    //
    333     const Float_t slices = fSignals->GetNumUsedHiGainFADCSlices();
     333    const Float_t slices     = fSignals->GetNumUsedHiGainFADCSlices();
     334    const Float_t sqrtslices = TMath::Sqrt(slices);
    334335
    335336    // is pixid equal to pixidx ?
     
    347348        // pedestals/(used FADC slices)   in [ADC] counts
    348349        const Float_t pedes  = ped.GetPedestal()    * slices;
    349         const Float_t pedrms = ped.GetPedestalRms() * TMath::Sqrt(slices);
     350        const Float_t pedrms = ped.GetPedestalRms() * sqrtslices;
    350351
    351352        //
     
    382383                                           Float_t &calibConv, Float_t &calibConvVar, Float_t &calibFFactor)
    383384{
    384   //
    385   // For the moment, we use only a dummy zenith for the calibration:
    386   //
    387   const Float_t zenith = -1.;
    388 
    389   hiloconv     = 1.;
    390   hiloconverr  = 0.;
    391   calibConv    = 1.;
    392   calibConvVar = 0.;
    393   calibFFactor = 0.;
    394   Float_t calibQE       = 1.;
    395   Float_t calibQEVar    = 0.;
    396   Float_t avMean        = 1.;
    397   Float_t avMeanRelVar  = 0.;
    398 
    399   if (fCalibrationMode == kFlatCharge)
    400   {
    401     MCalibrationChargePix &avpix = (MCalibrationChargePix&)fCalibrations->GetAverageArea(0);
    402     avMean       =  avpix.GetMean();
    403     avMeanRelVar =  avpix.GetMeanRelVar();
    404   }
    405 
    406 
    407   if(fCalibrationMode!=kNone)
    408     {
    409      
    410       MCalibrationChargePix &pix = (MCalibrationChargePix&)(*fCalibrations)[pixidx];
    411      
    412       hiloconv   = pix.GetConversionHiLo   ();
    413       hiloconverr= pix.GetConversionHiLoErr();
    414      
    415       if (fBadPixels)
    416         {
    417           MBadPixelsPix &bad = (*fBadPixels)[pixidx];
    418           if (bad.IsUnsuitable())
    419             return kFALSE;
    420         }
    421      
    422       calibConv      = pix.GetMeanConvFADC2Phe();
    423       calibConvVar   = pix.GetMeanConvFADC2PheVar();
    424       calibFFactor   = pix.GetMeanFFactorFADC2Phot();
    425      
    426       MCalibrationQEPix &qe  = (MCalibrationQEPix&) (*fQEs)[pixidx];
    427      
    428       switch(fCalibrationMode)
     385    //
     386    // For the moment, we use only a dummy zenith for the calibration:
     387    //
     388    const Float_t zenith = -1.;
     389
     390    hiloconv     = 1.;
     391    hiloconverr  = 0.;
     392    calibConv    = 1.;
     393    calibConvVar = 0.;
     394    calibFFactor = 0.;
     395
     396    Float_t calibQE       = 1.;
     397    Float_t calibQEVar    = 0.;
     398
     399    if(fCalibrationMode!=kNone)
     400    {
     401        MCalibrationChargePix &pix = (MCalibrationChargePix&)(*fCalibrations)[pixidx];
     402
     403        hiloconv   = pix.GetConversionHiLo   ();
     404        hiloconverr= pix.GetConversionHiLoErr();
     405
     406        if (fBadPixels)
     407        {
     408            MBadPixelsPix &bad = (*fBadPixels)[pixidx];
     409            if (bad.IsUnsuitable())
     410                return kFALSE;
     411        }
     412
     413        calibConv    = pix.GetMeanConvFADC2Phe();
     414        calibConvVar = pix.GetMeanConvFADC2PheVar();
     415        calibFFactor = pix.GetMeanFFactorFADC2Phot();
     416
     417        MCalibrationQEPix &qe  = (MCalibrationQEPix&) (*fQEs)[pixidx];
     418
     419        switch(fCalibrationMode)
    429420        {
    430421        case kFlatCharge:
    431           calibConv        = avMean / pix.GetMean() / fGeomCam->GetPixRatio(pixidx) ;
    432           calibConvVar     = (avMeanRelVar + pix.GetMeanRelVar()) * calibConv * calibConv;
    433           if (pix.IsFFactorMethodValid())
    434422            {
    435               const Float_t convmin1 = qe.GetQECascadesFFactor(zenith)/pix.GetMeanConvFADC2Phe();
    436               if (convmin1 > 0)
    437                 calibFFactor *= TMath::Sqrt(convmin1);
    438               else
    439                 calibFFactor = -1.;
     423                MCalibrationChargePix &avpix = (MCalibrationChargePix&)fCalibrations->GetAverageArea(0);
     424                calibConv    = avpix.GetMean() / (pix.GetMean() * fGeomCam->GetPixRatio(pixidx));
     425                calibConvVar = (avpix.GetMeanRelVar() + pix.GetMeanRelVar()) * calibConv * calibConv;
     426                if (pix.IsFFactorMethodValid())
     427                {
     428                    const Float_t convmin1 = qe.GetQECascadesFFactor(zenith)/pix.GetMeanConvFADC2Phe();
     429                    if (convmin1 > 0)
     430                        calibFFactor *= TMath::Sqrt(convmin1);
     431                    else
     432                        calibFFactor = -1.;
     433                }
    440434            }
    441           break;
     435            break;
     436
    442437        case kBlindPixel:
    443           if (qe.IsBlindPixelMethodValid())
    444             {
    445               calibQE      = qe.GetQECascadesBlindPixel   ( zenith );
    446               calibQEVar   = qe.GetQECascadesBlindPixelVar( zenith );
    447             }
    448           else
    449             return kFALSE;
    450           break;
     438            if (!qe.IsBlindPixelMethodValid())
     439                return kFALSE;
     440            calibQE     = qe.GetQECascadesBlindPixel   ( zenith );
     441            calibQEVar  = qe.GetQECascadesBlindPixelVar( zenith );
     442            break;
     443
    451444        case kPinDiode:
    452           if (qe.IsPINDiodeMethodValid())
    453             {
    454               calibQE      = qe.GetQECascadesPINDiode   ( zenith );
    455               calibQEVar   = qe.GetQECascadesPINDiodeVar( zenith );
    456             }
    457           else
    458             return kFALSE;
    459           break;
     445            if (!qe.IsPINDiodeMethodValid())
     446                return kFALSE;
     447            calibQE     = qe.GetQECascadesPINDiode   ( zenith );
     448            calibQEVar  = qe.GetQECascadesPINDiodeVar( zenith );
     449            break;
     450
    460451        case kFfactor:
    461           if (pix.IsFFactorMethodValid())
    462             {
    463               calibQE      = qe.GetQECascadesFFactor   ( zenith );
    464               calibQEVar   = qe.GetQECascadesFFactorVar( zenith );
    465             }
    466           else
    467             return kFALSE;
    468           break;
     452            if (!pix.IsFFactorMethodValid())
     453                return kFALSE;
     454            calibQE     = qe.GetQECascadesFFactor   ( zenith );
     455            calibQEVar  = qe.GetQECascadesFFactorVar( zenith );
     456            break;
     457
    469458        case kCombined:
    470           if (qe.IsCombinedMethodValid())
    471             {
    472               calibQE      = qe.GetQECascadesCombined   ( zenith );
    473               calibQEVar   = qe.GetQECascadesCombinedVar( zenith );
    474             }
    475           else
    476             return kFALSE;
    477           break;
     459            if (!qe.IsCombinedMethodValid())
     460                return kFALSE;
     461            calibQE     = qe.GetQECascadesCombined   ( zenith );
     462            calibQEVar  = qe.GetQECascadesCombinedVar( zenith );
     463            break;
     464
    478465        case kDummy:
    479           hiloconv     = 1.;
    480           hiloconverr  = 0.;
    481           break;
    482          
     466            hiloconv    = 1.;
     467            hiloconverr = 0.;
     468            break;
    483469        } /* switch calibration mode */
    484470    } /* if(fCalibrationMode!=kNone) */
    485   else
    486     {
    487       calibConv  = 1./fGeomCam->GetPixRatio(pixidx);
    488     }     
    489  
    490   calibConv    /= calibQE;
    491 
    492   if (calibConv != 0. && calibQE != 0.)
    493     {
    494       calibConvVar  = calibConvVar/calibConv/calibConv + calibQEVar/calibQE/calibQE;
    495       calibConvVar *= calibConv*calibConv;
    496     }
    497  
    498   return kTRUE;
     471    else
     472    {
     473        calibConv  = 1./fGeomCam->GetPixRatio(pixidx);
     474    }
     475
     476    calibConv /= calibQE;
     477
     478    if (calibConv != 0. && calibQE != 0.)
     479    {
     480        const Float_t calibConv2 = calibConv*calibConv;
     481        calibConvVar  = calibConvVar/calibConv2 + calibQEVar/(calibQE*calibQE);
     482        calibConvVar *= calibConv2;
     483    }
     484
     485    return kTRUE;
    499486}
    500487
    501488void MCalibrateData::CalibrateData()
    502489{
    503     UInt_t npix = fSignals->GetSize();
     490    const UInt_t npix = fSignals->GetSize();
    504491
    505492    Float_t hiloconv;
     
    515502            continue;
    516503
    517         MExtractedSignalPix &sig = (*fSignals)[pixidx];
    518 
    519         Float_t signal;
     504        const MExtractedSignalPix &sig = (*fSignals)[pixidx];
     505
     506        Float_t signal = 0;
    520507        Float_t signalErr = 0.;
    521         Float_t nphot,nphotErr;
    522508
    523509        if (sig.IsLoGainUsed())
     
    528514        else
    529515        {
    530             if (sig.GetExtractedSignalHiGain() > 9999.)
    531             {
    532                 signal = 0.;
    533                 signalErr = 0.;
    534             }
    535             else
     516            if (sig.GetExtractedSignalHiGain() <= 9999.)
    536517                signal = sig.GetExtractedSignalHiGain();
    537518        }
    538519
    539         nphot    = signal*calibrationConversionFactor;
    540         nphotErr = calibFFactor*TMath::Sqrt(TMath::Abs(nphot));
     520        const Float_t nphot    = signal*calibrationConversionFactor;
     521        const Float_t nphotErr = calibFFactor*TMath::Sqrt(TMath::Abs(nphot));
    541522
    542523        //
Note: See TracChangeset for help on using the changeset viewer.