Ignore:
Timestamp:
03/12/04 17:56:20 (21 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mbadpixels
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mbadpixels/MBadPixelsTreat.cc

    r3476 r3490  
    3434//  an existing MBadPixelsCam.
    3535//
     36//  It check if there are enough neighbors to calculate the mean
     37//  If not, unmap the pixel. The minimum number of good neighbors
     38//  should be set using SetNumMinNeighbors
     39//
    3640//  Input Containers:
    3741//   MCerPhotEvt
     
    7983//
    8084MBadPixelsTreat::MBadPixelsTreat(const char *name, const char *title)
    81     : fFlags(0)
     85    : fFlags(0), fNumMinNeighbors(3)
    8286{
    8387    fName  = name  ? name  : gsDefName.Data();
     
    147151    for (UShort_t i=0; i<entries; i++)
    148152    {
     153        MCerPhotPix *pix = fEvt->GetPixById(i);
     154
    149155        //
    150156        // Check whether pixel with idx i is blind
    151157        //
    152         if (!(*fBadPixels)[i].IsBad())
     158        if (pix && (*fBadPixels)[i].IsOK())
    153159            continue;
    154160
     
    157163        // create a new entry for this pixel in MCerPhotEvt
    158164        //
    159         MCerPhotPix *pix = fEvt->GetPixById(i);
    160165        if (!pix)
     166        {
    161167            pix = fEvt->AddPixel(i, 0, 0);
     168            (*fBadPixels)[i].SetUnsuitable(MBadPixelsPix::kUnsuitableEvt);
     169        }
    162170
    163171        //
     
    193201            // Do not use blind neighbors
    194202            //
    195             if (!(*fBadPixels)[i].IsBad())
     203            if ((*fBadPixels)[i].IsBad())
    196204                continue;
    197205
     
    254262        // Check whether pixel with idx i is blind
    255263        //
    256         if (!(*fBadPixels)[i].IsBad())
     264        if ((*fBadPixels)[i].IsOK())
    257265            continue;
    258266
     
    290298            // Do not use blind neighbors
    291299            //
    292             if (!(*fBadPixels)[i].IsBad())
     300            if ((*fBadPixels)[i].IsBad())
    293301                continue;
    294302
     
    302310            //The error is calculated as the quadratic sum of the errors
    303311            //
    304             ped[i] += (nratio*nppix.GetMean());
     312            ped[i] += nratio*nppix.GetMean();
    305313            rms[i] += nratio*Pow2(nppix.GetRms());
    306314
     
    310318        // Check if there are enough neighbors to calculate the mean
    311319        // If not, unmap the pixel. The minimum number of good neighbors
    312         // should be 3
    313         if (num < 3)
     320        // should be fNumMinNeighbors
     321        if (num < fNumMinNeighbors)
    314322        {
    315323            MCerPhotPix *pix =fEvt->GetPixById(i);
     
    350358    // Create arrays
    351359    //
    352     Double_t *nphot  = new Double_t[entries];
    353     Double_t *perr   = new Double_t[entries];
    354     Double_t *ped    = new Double_t[entries];
    355     Double_t *pedrms = new Double_t[entries];
     360    TArrayD nphot(entries);
     361    TArrayD perr(entries);
     362    TArrayD ped(entries);
     363    TArrayD pedrms(entries);
    356364 
    357365    //
     
    360368    for (UShort_t i=0; i<entries; i++)
    361369    {
     370        MCerPhotPix *pix = fEvt->GetPixById(i);
     371
    362372        //
    363373        // Check whether pixel with idx i is blind
    364374        //
    365         if ((*fBadPixels)[i].IsBad())
     375        if (pix && (*fBadPixels)[i].IsOK())
    366376            continue;
    367377
     
    370380        // create a new entry for this pixel in MCerPhotEvt
    371381        //
    372         const MCerPhotPix *pix = fEvt->GetPixById(i);
    373382        if (!pix)
     383        {
    374384            pix = fEvt->AddPixel(i, 0, 0);
     385            (*fBadPixels)[i].SetUnsuitable(MBadPixelsPix::kUnsuitableEvt);
     386        }
    375387
    376388        //
     
    395407        const Double_t ratio = fGeomCam->GetPixRatio(i);
    396408
    397         nphot[i]  *= ratio;
    398         ped[i]    *= ratio;
    399         perr[i]   *= Pow2(ratio);
    400         pedrms[i] *= Pow2(pedrms[i]);
     409        if (nucp)
     410        {
     411            nphot[i]  *= ratio;
     412            perr[i]   *= ratio;
     413            ped[i]    *= ratio;
     414            pedrms[i] *= ratio;
     415        }
    401416
    402417        //
     
    411426            // Do not use blind neighbors
    412427            //
    413             if ((*fBadPixels)[i].IsBad())
     428            if ((*fBadPixels)[nidx].IsBad())
    414429                continue;
    415430
     
    428443
    429444            //
    430             //The error is calculated as the quadratic sum of the errors
     445            // The error is calculated as the quadratic sum of the errors
    431446            //
     447            nphot[i]  += nratio*evtpix->GetNumPhotons();
    432448            ped[i]    += nratio*nppix.GetMean();
    433             nphot[i]  += nratio*evtpix->GetNumPhotons();
    434             perr[i]   += Pow2(nratio*evtpix->GetErrorPhot());
    435             pedrms[i] += Pow2(nratio*nppix.GetRms());
     449            perr[i]   += nratio*Pow2(evtpix->GetErrorPhot());
     450            pedrms[i] += nratio*Pow2(nppix.GetRms());
    436451
    437452            num++;
     453        }
     454
     455        if (num<2)
     456        {
     457            pix->SetPixelUnmapped();
     458            nphot[i]  = 0;
     459            ped[i]    = 0;
     460            perr[i]   = 0;
     461            pedrms[i] = 0;
     462            continue;
    438463        }
    439464
     
    443468        nphot[i] /= num*ratio;
    444469        ped[i]   /= num*ratio;
    445         perr[i]   = TMath::Sqrt(perr[i]/num)*ratio;
    446         pedrms[i] = TMath::Sqrt(pedrms[i]/num)*ratio;
     470        perr[i]   = TMath::Sqrt(perr[i]/(num*ratio));
     471        pedrms[i] = TMath::Sqrt(pedrms[i]/(num*ratio));
    447472
    448473    }
     
    457482        // Do not use blind neighbors
    458483        //
    459         if ((*fBadPixels)[i].IsBad())
     484        if ((*fBadPixels)[i].IsOK())
    460485            continue;
    461486
     
    466491        (*fPedPhot)[i].Set(ped[i], pedrms[i]);
    467492    }
    468 
    469     //
    470     // Delete the intermediat arrays
    471     //
    472     delete nphot;
    473     delete perr;
    474     delete ped;
    475     delete pedrms;
    476493}
    477494
  • trunk/MagicSoft/Mars/mbadpixels/MBadPixelsTreat.h

    r3476 r3490  
    2020
    2121    Byte_t fFlags;       // flag for the method which is used
     22    Byte_t fNumMinNeighbors;
     23
    2224
    2325    enum
     
    5052        b ? SETBIT(fFlags, kUseCentralPixel) : CLRBIT(fFlags, kUseCentralPixel);
    5153    }
     54    void SetNumMinNeighbors(UShort_t num) { fNumMinNeighbors=num; }
    5255
    5356
Note: See TracChangeset for help on using the changeset viewer.