Ignore:
Timestamp:
11/07/01 12:01:27 (23 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/manalysis/MImgCleanStd.cc

    r1003 r1049  
    1717!
    1818!   Author(s): Harald Kornmayer 1/2001 (harald@mppmu.mpg.de)
    19 !   Author(s): Thomas Bretz  12/2000 (tbretz@uni-sw.gwdg.de)
     19!   Author(s): Thomas Bretz    12/2000 (tbretz@uni-sw.gwdg.de)
    2020!
    2121!   Copyright: MAGIC Software Development, 2000-2001
     
    3131//  Please look at the three CleanSteps and Process                        //
    3232//                                                                         //
    33 //   FIXME: MImgCleanStd is rather slow at the moment because it loops     //
    34 //          unnecessarily over all pixels in all its loops (s.MHillas)     //
    35 //          The speed could be improved very much by using Hash-Tables     //
    36 //          (linked lists, see THashTable and THashList, too)              //
     33//   FIXME: MImgCleanStd is not yet completely optimized for speed.        //
     34//          Maybe we don't have to loop over all pixels all the time...    //
    3735//                                                                         //
    3836//  Input Containers:                                                      //
     
    9492
    9593        // COBB: '<=' to skip entry=noise=0
    96         if (entry <= fCleanLvl1 * noise )
     94        if (entry <= fCleanLvl1 * noise)
    9795            pix.SetPixelUnused();
    9896    }
     
    108106    const Int_t entries = fEvt->GetNumPixels();
    109107
     108    //
     109    // In the worst case we have to loop 6 times 577 times, to
     110    // catch the behaviour of all next neighbors. Here we can gain
     111    // much by using an array instead of checking through all pixels
     112    // (MCerPhotEvt::IsPixelUsed) all the time.
     113    //
     114    Byte_t ispixused[577];
     115
     116    for (Int_t i=0; i<entries; i++)
     117    {
     118        MCerPhotPix &pix = (*fEvt)[i];
     119        ispixused[pix.GetPixId()] = pix.IsPixelUsed();
     120    }
     121
    110122    for (Int_t i=0; i<entries; i++)
    111123    {
     
    133145        const Int_t     nnmax = gpix.GetNumNeighbors();
    134146
    135         Int_t cnt = 0;
     147        Bool_t cnt = kFALSE;
    136148        for (Int_t j=0; j<nnmax; j++)
    137149        {
    138             const Int_t id2 = gpix.GetNeighbor(j); //GetNN(id, in) ;
    139 
    140             if (id2 < 0)
     150            const Int_t id2 = gpix.GetNeighbor(j);
     151
     152            if (!ispixused[id2])
    141153                continue;
    142154
    143             if (fEvt->IsPixelUsed(id2))
    144                 cnt++;
     155            cnt = kTRUE;
     156            break;
    145157        }
     158        if (cnt)
     159            continue;
    146160
    147161        //
     
    149163        // set this pixel to 'unused', too.
    150164        //
    151         if (cnt==0)
    152             pix.SetPixelUnused();
     165        pix.SetPixelUnused();
    153166    }
    154167
     
    213226            const Int_t id2 = gpix.GetNeighbor(j);
    214227
    215             if (id2 <0)
    216                 continue;
    217 
    218228            if (!fEvt->IsPixelCore(id2))
    219229                continue;
    220230
    221231            pix.SetPixelUsed();
    222 
    223             break ;
     232            break;
    224233        }
    225234    }
Note: See TracChangeset for help on using the changeset viewer.