Changeset 7353 for trunk/MagicSoft


Ignore:
Timestamp:
09/16/05 11:58:09 (19 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/Changelog

    r7352 r7353  
    1818
    1919                                                 -*-*- END OF LINE -*-*-
     20 2005/09/16 Thomas Bretz
     21
     22   * mbadpixels/MBadPixelsTreat.cc:
     23     - removed obsolete artificial add of missing (zero supressed)
     24       pixels
     25     - removed obsolete MArrayD which stored the result of the
     26       interpolation but was never used
     27
     28   * mcalib/MCalibrateData.cc:
     29     - removed an obsolete calibConv=-1 in case the pixel is unsuitable
     30       (UpdateConversionFactors)
     31     - improved warning output in case the conv factor is out-of-range
     32
     33   * mcalib/MCalibrateRelTimes.cc:
     34     - reordered the algorithm for the time calibration to make it faster
     35     - replaced if(IsLoGainUsed()) by the new function GetArrivalTime in
     36       MArrivalTimePix
     37
     38   * msignal/MArrivalTimePix.h:
     39     - new getter function GetArrivalTime returning the arrival time
     40       depending on the flag IsLoGainUsed()
     41
     42
     43
    2044 2005/09/16 Daniela Dorner
    2145
  • trunk/MagicSoft/Mars/mbadpixels/MBadPixelsTreat.cc

    r7349 r7353  
    6969#include <TObjString.h>
    7070
    71 #include "MArrayD.h" // Used instead of TArrayD because operator[] has no range check
     71//#include "MArrayD.h" // Used instead of TArrayD because operator[] has no range check
    7272
    7373#include "MLog.h"
     
    218218
    219219    //
    220     // Create arrays (FIXME: Check if its possible to create it only once)
     220    // Loop over all pixels
    221221    //
    222     MArrayD nphot(entries);
    223     MArrayD perr(entries);
     222    for (UShort_t i=0; i<entries; i++)
     223    {
     224        //
     225        // Check whether pixel with idx i is blind
     226        //
     227        if (!IsPixelBad(i))
     228            continue;
     229
     230        //
     231        // Get the corresponding geometry and pedestal
     232        //
     233        MSignalPix     &pix  = (*fEvt)[i];
     234        const MGeomPix &gpix = (*fGeomCam)[i];
     235
     236        // Do Not-Use-Central-Pixel
     237        const Bool_t nucp = !TESTBIT(fFlags, kUseCentralPixel);
     238
     239        Int_t num = nucp ? 0 : 1;
     240
     241        Double_t nphot  = nucp ? 0 : pix.GetNumPhotons();
     242        Double_t perr   = nucp ? 0 : Pow2(pix.GetErrorPhot());
     243
     244        //
     245        // The values are rescaled to the small pixels area for the right comparison
     246        //
     247        const Double_t ratio = fGeomCam->GetPixRatio(i);
     248
     249        nphot *= ratio;
     250        perr  *= ratio;
     251
     252        //
     253        // Loop over all its neighbors
     254        //
     255        const Int_t n = gpix.GetNumNeighbors();
     256        for (int j=0; j<n; j++)
     257        {
     258            const UShort_t nidx = gpix.GetNeighbor(j);
     259
     260            //
     261            // Do not use blind neighbors
     262            //
     263            if (IsPixelBad(nidx))
     264                continue;
     265
     266            //
     267            // Get the geometry for the neighbor
     268            //
     269            const Double_t nratio = fGeomCam->GetPixRatio(nidx);
     270
     271            //
     272            //The error is calculated as the quadratic sum of the errors
     273            //
     274            const MSignalPix &evtpix = (*fEvt)[nidx];
     275
     276            nphot += nratio*evtpix.GetNumPhotons();
     277            perr  += nratio*Pow2(evtpix.GetErrorPhot());
     278
     279            num++;
     280        }
     281
     282        // Check if there are enough neighbors to calculate the mean
     283        // If not, unmap the pixel. The maximum number of blind neighbors
     284        // should be 2
     285        if (num<fNumMinNeighbors)
     286        {
     287            pix.SetPixelUnmapped();
     288            continue;
     289        }
     290
     291        //
     292        // Now the mean is calculated and the values rescaled back
     293        // to the pixel area
     294        //
     295        nphot /= num*ratio;
     296        perr   = TMath::Sqrt(perr/(num*ratio));
    224297 
     298        pix.Set(nphot, perr);
     299    }
     300}
     301
     302// --------------------------------------------------------------------------
     303//
     304void MBadPixelsTreat::InterpolatePedestals(MPedPhotCam &pedphot) const
     305{
     306    const Int_t entries = pedphot.GetSize();
     307
    225308    //
    226309    // Loop over all pixels
     
    237320        // Get the corresponding geometry and pedestal
    238321        //
    239         MSignalPix     &pix  = (*fEvt)[i];
    240         const MGeomPix &gpix = (*fGeomCam)[i];
     322        const MGeomPix    &gpix = (*fGeomCam)[i];
     323        const MPedPhotPix &ppix = pedphot[i];
    241324
    242325        // Do Not-Use-Central-Pixel
     
    245328        Int_t num = nucp ? 0 : 1;
    246329
    247         nphot[i]  = nucp ? 0 : pix.GetNumPhotons();
    248         perr[i]   = nucp ? 0 : Pow2(pix.GetErrorPhot());
    249 
    250         //
    251         // The values are rescaled to the small pixels area for the right comparison
     330        Double_t ped = nucp ? 0 : ppix.GetMean();
     331        Double_t rms = nucp ? 0 : Pow2(ppix.GetRms());
     332
     333        //
     334        // The values are rescaled to the small pixels area for the right comparison
    252335        //
    253336        const Double_t ratio = fGeomCam->GetPixRatio(i);
    254337
    255         nphot[i] *= ratio;
    256         perr[i] *= ratio;
     338        ped *= ratio;
     339        rms *= ratio;
    257340
    258341        //
     
    273356            // Get the geometry for the neighbor
    274357            //
    275             const Double_t nratio = fGeomCam->GetPixRatio(nidx);
    276 
    277             //
    278             //The error is calculated as the quadratic sum of the errors
    279             //
    280             const MSignalPix &evtpix = (*fEvt)[nidx];
    281 
    282             nphot[i] += nratio*evtpix.GetNumPhotons();
    283             perr[i]  += nratio*Pow2(evtpix.GetErrorPhot());
    284 
    285             num++;
    286         }
    287 
    288         // Check if there are enough neighbors to calculate the mean
    289         // If not, unmap the pixel. The maximum number of blind neighbors
    290         // should be 2
    291         if (num<fNumMinNeighbors)
    292         {
    293             pix.SetPixelUnmapped();
    294             continue;
    295         }
    296 
    297         //
    298         // Now the mean is calculated and the values rescaled back
    299         // to the pixel area
    300         //
    301         nphot[i] /= (num*ratio);
    302         perr[i]   = TMath::Sqrt(perr[i]/(num*ratio));
    303  
    304         pix.Set(nphot[i], perr[i]);
    305     }
    306 }
    307 
    308 // --------------------------------------------------------------------------
    309 //
    310 void MBadPixelsTreat::InterpolatePedestals(MPedPhotCam &pedphot) const
    311 {
    312     const Int_t entries = pedphot.GetSize();
    313 
    314     // Create arrays (FIXME: Check if its possible to create it only once)
    315     MArrayD ped(entries);
    316     MArrayD rms(entries);
    317 
    318     //
    319     // Loop over all pixels
    320     //
    321     for (UShort_t i=0; i<entries; i++)
    322     {
    323         //
    324         // Check whether pixel with idx i is blind
    325         //
    326         if (!IsPixelBad(i))
    327             continue;
    328 
    329         //
    330         // Get the corresponding geometry and pedestal
    331         //
    332         const MGeomPix    &gpix = (*fGeomCam)[i];
    333         const MPedPhotPix &ppix = pedphot[i];
    334 
    335         // Do Not-Use-Central-Pixel
    336         const Bool_t nucp = !TESTBIT(fFlags, kUseCentralPixel);
    337 
    338         Int_t num = nucp ? 0 : 1;
    339 
    340         ped[i] = nucp ? 0 : ppix.GetMean();
    341         rms[i] = nucp ? 0 : Pow2(ppix.GetRms());
    342 
    343         //
    344         // The values are rescaled to the small pixels area for the right comparison
    345         //
    346         const Double_t ratio = fGeomCam->GetPixRatio(i);
    347 
    348         ped[i] *= ratio;
    349         rms[i] *= ratio;
    350 
    351         //
    352         // Loop over all its neighbors
    353         //
    354         const Int_t n = gpix.GetNumNeighbors();
    355         for (int j=0; j<n; j++)
    356         {
    357             const UShort_t nidx = gpix.GetNeighbor(j);
    358 
    359             //
    360             // Do not use blind neighbors
    361             //
    362             if (IsPixelBad(nidx))
    363                 continue;
    364 
    365             //
    366             // Get the geometry for the neighbor
    367             //
    368358            const Double_t    nratio = fGeomCam->GetPixRatio(nidx);
    369359            const MPedPhotPix &nppix = pedphot[nidx];
     
    372362            //The error is calculated as the quadratic sum of the errors
    373363            //
    374             ped[i] += nratio*nppix.GetMean();
    375             rms[i] += nratio*Pow2(nppix.GetRms());
     364            ped += nratio*nppix.GetMean();
     365            rms += nratio*Pow2(nppix.GetRms());
    376366
    377367            num++;
     
    381371        // If not, unmap the pixel. The minimum number of good neighbors
    382372        // should be fNumMinNeighbors
    383         if (num < fNumMinNeighbors)
    384         {
    385             MSignalPix *pix =fEvt->GetPixById(i);
    386             if (!pix)
    387                 pix = fEvt->AddPixel(i, 0, 0);
    388             pix->SetPixelUnmapped();
     373        if (num<fNumMinNeighbors)
     374        {
     375            (*fEvt)[i].SetPixelUnmapped();
    389376            continue;
    390377        }
     
    394381        // to the pixel area
    395382        //
    396         ped[i] /=  (num*ratio);
    397         rms[i]  = TMath::Sqrt(rms[i]/(num*ratio));
    398 
    399         pedphot[i].Set(ped[i], rms[i]);
     383        ped /= num*ratio;
     384        rms  = TMath::Sqrt(rms/(num*ratio));
     385
     386        pedphot[i].Set(ped, rms);
    400387    }
    401388    pedphot.SetReadyToSave();
     
    436423        const MGeomPix &gpix = (*fGeomCam)[i];
    437424
    438         MArrayD time(gpix.GetNumNeighbors());
     425        const UInt_t n2 = gpix.GetNumNeighbors();
     426
     427        Double_t time[n2];
    439428
    440429        Int_t n0 = 0;
    441         for (unsigned int j=0; j<time.GetSize(); j++)
    442         {
    443             const Int_t nn = gpix.GetNeighbor(j);
    444 
    445             const Double_t t = (*fEvt)[nn].GetArrivalTime();
    446             if (t>=0 && !IsPixelBad(nn))
     430        for (unsigned int j=0; j<n2; j++)
     431        {
     432            const Double_t t = (*fEvt)[j].GetArrivalTime();
     433            if (t>=0)
    447434                time[n0++] = t;
    448435        }
  • trunk/MagicSoft/Mars/mcalib/MCalibrateData.cc

    r7189 r7353  
    542542              {
    543543                skip++;
    544                 calibConv = -1.;
    545                 continue;
     544                continue; // calibConv will remain 0
    546545             }
    547546           
     
    679678            calibConv    = -1.;
    680679            calibFFactor = -1.;
    681             *fLog << warn << "Conversion factor of Pixel " << pixidx << " out of range " << endl;
     680            *fLog << warn << GetDescriptor()
     681                << ": WARNING - Conversion factor of Pixel " << pixidx << " out of range... set to 0. " << endl;
    682682          }
    683683        cpix.SetCalibConst(calibConv);
  • trunk/MagicSoft/Mars/mcalib/MCalibrateRelTimes.cc

    r7134 r7353  
    8686Int_t MCalibrateRelTimes::PreProcess(MParList *pList)
    8787{
    88 
    8988    fSignals = (MArrivalTimeCam*)pList->FindObject(AddSerialNumber("MArrivalTimeCam"));
    9089
    9190    if (!fSignals)
    9291    {
    93       *fLog << err << AddSerialNumber("MArrivalTimeCam") << " not found ... aborting" << endl;
     92        *fLog << err << AddSerialNumber("MArrivalTimeCam") << " not found ... aborting" << endl;
    9493        return kFALSE;
    9594    }
     
    9796    fBadPixels = (MBadPixelsCam*)pList->FindObject(AddSerialNumber("MBadPixelsCam"));
    9897    if (!fBadPixels)
    99       *fLog << warn << AddSerialNumber("MBadPixelsCam") << " not found ... no action" << endl;
    100    
     98        *fLog << warn << AddSerialNumber("MBadPixelsCam") << " not found ... ignoring." << endl;
    10199
    102100    fCalibrations = (MCalibrationRelTimeCam*)pList->FindObject(AddSerialNumber("MCalibrationRelTimeCam"));
     
    106104        return kFALSE;
    107105      }
    108 
    109106
    110107    fArrivalTime = (MSignalCam*)pList->FindCreateObj(AddSerialNumber("MSignalCam"));
     
    124121    const UInt_t npix = fSignals->GetSize();
    125122
    126     for (UInt_t pixidx=0; pixidx<npix; pixidx++)
     123    for (UInt_t idx=0; idx<npix; idx++)
    127124    {
    128         MCalibrationRelTimePix &pix = (MCalibrationRelTimePix&)(*fCalibrations)[pixidx];
    129 
    130         if (fBadPixels && (*fBadPixels)[pixidx].IsUnsuitable(MBadPixelsPix::kUnsuitableRun))
     125        if (fBadPixels && (*fBadPixels)[idx].IsUnsuitable(MBadPixelsPix::kUnsuitableRun))
    131126            continue;
    132127
    133         const Float_t offset    = pix.GetTimeOffset();
     128        const MCalibrationRelTimePix &pix = (MCalibrationRelTimePix&)(*fCalibrations)[idx];
     129        const MArrivalTimePix        &sig = (*fSignals)[idx];
    134130
    135         MArrivalTimePix &sig = (*fSignals)[pixidx];
     131        const Float_t signal = sig.GetArrivalTime();
     132        const Float_t offset = pix.GetTimeOffset();
    136133
    137         Float_t signal;
    138 
    139         if (sig.IsLoGainUsed())
    140           signal = sig.GetArrivalTimeLoGain();
    141         else
    142           signal = sig.GetArrivalTimeHiGain();
    143 
    144         const Float_t time = signal - offset;
    145 
    146         (*fArrivalTime)[pixidx].SetArrivalTime(time);
    147 
    148     } /* for (UInt_t pixidx=0; pixidx<npix; pixidx++) */
     134        (*fArrivalTime)[idx].SetArrivalTime(signal - offset);
     135    }
    149136
    150137    fArrivalTime->SetReadyToSave();
  • trunk/MagicSoft/Mars/msignal/MArrivalTimePix.h

    r4899 r7353  
    3535    Float_t GetArrivalTimeLoGainError() const { return fArrivalTimeLoGainError; }
    3636
     37    Float_t GetArrivalTime()            const { return IsLoGainUsed() ? fArrivalTimeLoGain : fArrivalTimeHiGain; }
     38
    3739    Byte_t GetNumHiGainSaturated()      const { return fNumHiGainSaturated; }
    3840    Byte_t GetNumLoGainSaturated()      const { return fNumLoGainSaturated; }
Note: See TracChangeset for help on using the changeset viewer.