Ignore:
Timestamp:
01/07/05 19:41:50 (20 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

    r5574 r5728  
    6767
    6868#include <TEnv.h>
     69#include <TObjString.h>
    6970
    7071#include "MArrayD.h" // Used instead of TArrayD because operator[] has no range check
     
    101102//
    102103MBadPixelsTreat::MBadPixelsTreat(const char *name, const char *title)
    103   : fFlags(0), fNumMinNeighbors(3), fNamePedPhotCam("MPedPhotCam")
     104  : fFlags(0), fNumMinNeighbors(3)
    104105{
    105106    fName  = name  ? name  : gsDefName.Data();
     
    123124}
    124125
     126void MBadPixelsTreat::AddNamePedPhotCam(const char *name)
     127{
     128    fNamePedPhotCams.Add(new TObjString(name));
     129}
     130
    125131// --------------------------------------------------------------------------
    126132//
     
    159165    }
    160166
    161     fPedPhot = 0;
    162     if (IsProcessPedestalEvt() || IsProcessPedestalRun())
    163     {
    164         fPedPhot = (MPedPhotCam*)pList->FindObject(AddSerialNumber(fNamePedPhotCam), "MPedPhotCam");
    165         if (!fPedPhot)
    166         {
    167             *fLog << err << AddSerialNumber("MPedPhotCam") << " not found... aborting." << endl;
    168             *fLog << " Use  MBadPixelsTreat::SetProcessPedestalRun(kFALSE)  and" << endl;
    169             *fLog << " MBadPixelsTreat::SetProcessPedestalEvt(kFALSE) to switch" << endl;
    170             *fLog << " Pedestal treatment off." << endl;
    171             return kFALSE;
     167    const Bool_t proc = IsProcessPedestalEvt() || IsProcessPedestalRun();
     168
     169    if (fNamePedPhotCams.GetSize()>0 && !proc)
     170    {
     171        *fLog << err << "Pedestal list contains entries, but pedestal treatment is switched off... abort." << endl;
     172        return kFALSE;
     173    }
     174
     175    if (proc)
     176    {
     177        if (fNamePedPhotCams.GetSize()==0)
     178        {
     179            *fLog << inf << "No container names specified... using default: MPedPhotCam." << endl;
     180            AddNamePedPhotCam();
     181        }
     182
     183        fPedPhotCams.Clear();
     184
     185        TIter Next(&fNamePedPhotCams);
     186        TObject *o=0;
     187        while ((o=Next()))
     188        {
     189            TObject *p = pList->FindObject(AddSerialNumber(o->GetName()), "MPedPhotCam");
     190            if (!p)
     191            {
     192                *fLog << err << AddSerialNumber(o->GetName()) << " [MPedPhotCam] not found... aborting." << endl;
     193                //*fLog << " Use  MBadPixelsTreat::SetProcessPedestalRun(kFALSE)  and" << endl;
     194                //*fLog << " MBadPixelsTreat::SetProcessPedestalEvt(kFALSE) to switch" << endl;
     195                //*fLog << " Pedestal treatment off." << endl;
     196                return kFALSE;
     197            }
     198
     199            fPedPhotCams.Add(p);
    172200        }
    173201    }
     
    313341// --------------------------------------------------------------------------
    314342//
    315 void MBadPixelsTreat::InterpolatePedestals() const
    316 {
    317     const Int_t entries = fPedPhot->GetSize();
     343void MBadPixelsTreat::InterpolatePedestals(MPedPhotCam &pedphot) const
     344{
     345    const Int_t entries = pedphot.GetSize();
    318346
    319347    // Create arrays (FIXME: Check if its possible to create it only once)
     
    336364        //
    337365        const MGeomPix    &gpix = (*fGeomCam)[i];
    338         const MPedPhotPix &ppix = (*fPedPhot)[i];
     366        const MPedPhotPix &ppix = pedphot[i];
    339367
    340368        // Do Not-Use-Central-Pixel
     
    372400            //
    373401            const Double_t    nratio = fGeomCam->GetPixRatio(nidx);
    374             const MPedPhotPix &nppix = (*fPedPhot)[nidx];
     402            const MPedPhotPix &nppix = pedphot[nidx];
    375403
    376404            //
     
    402430        rms[i]  = TMath::Sqrt(rms[i]/(num*ratio));
    403431
    404         (*fPedPhot)[i].Set(ped[i], rms[i]);
     432        pedphot[i].Set(ped[i], rms[i]);
     433    }
     434    pedphot.SetReadyToSave();
     435}
     436
     437// --------------------------------------------------------------------------
     438//
     439// loop over all MPedPhotCam and interpolate them
     440//
     441void MBadPixelsTreat::InterpolatePedestals() const
     442{
     443    TIter Next(&fPedPhotCams);
     444    MPedPhotCam *cam=0;
     445    while ((cam=(MPedPhotCam*)Next()))
     446    {
     447        InterpolatePedestals(*cam);
     448        cam->ReCalc(*fGeomCam, fBadPixels);
    405449    }
    406450}
     
    427471        const Int_t n0 = gpix.GetNumNeighbors();
    428472
    429         MArrayD time(6);
     473        MArrayD time(n0);
    430474        for (int j=0; j<n0; j++)
    431475            time[j] = (*fTimes)[gpix.GetNeighbor(j)];
     
    436480        Double_t min=FLT_MAX;
    437481        for (int j=0; j<n0; j++)
    438             for (int k=1; k<j+1; k++)
     482            for (int k=0; k<j; k++)
    439483            {
    440                 const Double_t diff = TMath::Abs(time[n0-k] - time[n0-k-j]);
     484                const Double_t diff = TMath::Abs(time[j] - time[k]);
    441485
    442486                if (diff>=min && diff<250)
    443487                    continue;
    444488
    445                 p0 = n0-k;
    446                 p1 = n0-k-j;
     489                p0  = j;
     490                p1  = k;
    447491                min = diff;
    448492            }
  • trunk/MagicSoft/Mars/mbadpixels/MBadPixelsTreat.h

    r4768 r5728  
    1616private:
    1717    MGeomCam      *fGeomCam;   //!
    18     MPedPhotCam   *fPedPhot;   //!
     18    //MPedPhotCam   *fPedPhot;   //!
    1919    MCerPhotEvt   *fEvt;       //!
    2020    MArrivalTime  *fTimes;     //!
    2121    MBadPixelsCam *fBadPixels; //!
    2222
     23    TList fPedPhotCams;
     24
    2325    Byte_t fFlags;       // flag for the method which is used
    2426    Byte_t fNumMinNeighbors;
    2527
    26     TString fNamePedPhotCam; // name of the 'MPedPhotCam' container
     28    //TString fNamePedPhotCam; // name of the 'MPedPhotCam' container
     29    TList fNamePedPhotCams;
    2730
    2831    enum
     
    4043    void InterpolateTimes() const;
    4144    void InterpolateSignal() const;
     45    void InterpolatePedestals(MPedPhotCam &pedphot) const;
    4246    void InterpolatePedestals() const;
    4347
     
    9296
    9397    void SetNumMinNeighbors(Byte_t num) { fNumMinNeighbors=num; }
    94     void SetNamePedPhotCam(const char *name)    { fNamePedPhotCam = name; }
     98    void AddNamePedPhotCam(const char *name="MPedPhotCam");
     99    void SetNamePedPhotCam(const char *name)
     100    {
     101        AddNamePedPhotCam(name);
     102    } // Deprecated! Use AddNamePedPhotCam instead (directly)
    95103
    96104    ClassDef(MBadPixelsTreat, 1) // Task to treat bad pixels (interpolation, unmapping)
Note: See TracChangeset for help on using the changeset viewer.