Ignore:
Timestamp:
06/11/04 20:02:08 (20 years ago)
Author:
aliu
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mtemp/mifae
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mtemp/mifae/Changelog

    r4263 r4286  
    1818
    1919                                                 -*-*- END OF LINE -*-*-
     20
     21 2004/05/27 Ester Aliu
     22   * programs/makeHillas.cc
     23     - add the possibility of using more than one algorithm to
     24      calculate the islands and use different algorithms for counting
     25      islands
     26
     27   * library/MIslands.[h,cc],MIslandCalc.cc
     28     - add a new island cleaning which consists in removing all the
     29      islands except the larger one
     30     - add a new algorithm of counting islands consisting in consider
     31      as the same islands those islands separated by 2 or less pixels
    2032
    2133 2004/06/02 Javier Rico
  • trunk/MagicSoft/Mars/mtemp/mifae/library/MIslandCalc.cc

    r4218 r4286  
    44!   Author(s): Ester Aliu, 2/2004 <aliu@ifae.es>
    55!   
    6 !   Last Update: 5/2004
     6!   Last Update: 6/2004
    77!
    88\* ======================================================================== */
     
    124124Int_t MIslandCalc::Process()
    125125{
    126 
     126 
     127  if (fIslandAlgorithm == 1)
     128    Calc1();
     129 
     130  if (fIslandAlgorithm == 2)
     131    Calc2();
     132  return kTRUE; 
     133   
     134}
     135
     136
     137Int_t MIslandCalc::Calc1(){
     138 
     139 
     140  /////////////////////////////
     141  //
     142  //        ALGORITHM # 1
     143  // counts the number of algorithms as you can see in
     144  // the event display after doing the std image cleaning
     145  //
     146  /////////////////////////////
     147 
    127148  Float_t  noise;
    128149  Float_t  signal;
     
    333354  fIsl->SetReadyToSave();
    334355 
    335   return 1;
    336  
     356  return kTRUE; 
    337357}
    338358
    339359
     360Int_t MIslandCalc::Calc2(){
     361 
     362 
     363  /////////////////////////////
     364  //
     365  //        ALGORITHM # 2
     366  // counts the number of islands considering as the same
     367  // islands the ones separated for 2 or less pixels
     368  //
     369  /////////////////////////////
     370 
     371  Float_t  noise;
     372  Float_t  signal;
     373
     374  Int_t    npix = 577;
     375
     376  Int_t    sflag;
     377  Int_t    control;
     378 
     379  Int_t    nvect = 0;
     380  Int_t    fIslNum = 0;
     381 
     382  Int_t    vect[50][577];
     383
     384  Int_t    zeros[50];
     385 
     386  Int_t kk[577];
     387
     388  for(Int_t m = 0; m < 50 ; m++)
     389    for(Int_t n = 0; n < npix ; n++)
     390        vect[m][n] = 0;
     391   
     392  for(Int_t n = 0; n < 50 ; n++)
     393    zeros[n] = 0;
     394 
     395  for(Int_t n = 0; n < 577 ; n++)
     396    kk[n] = 0;
     397 
     398  MCerPhotPix *pix;
     399
     400  //1st loop over all pixels
     401  MCerPhotEvtIter Next0(fEvt, kFALSE);
     402 
     403  while ((pix=static_cast<MCerPhotPix*>(Next0())))
     404    {
     405      const Int_t idx = pix->GetPixId();
     406     
     407      const MGeomPix &gpix  = (*fCam)[idx];
     408      const Int_t    nnmax  = gpix.GetNumNeighbors();
     409
     410      if( fEvt->IsPixelUsed(idx))
     411        {
     412          kk[idx] = 1 ;
     413          for(Int_t j=0; j< nnmax; j++)
     414            {
     415              kk[gpix.GetNeighbor(j)] = 1;
     416            }
     417        }
     418     
     419    }
     420     
     421  //2nd loop over all pixels
     422  MCerPhotEvtIter Next(fEvt, kFALSE);
     423 
     424  while ((pix=static_cast<MCerPhotPix*>(Next())))
     425    {
     426      const Int_t idx = pix->GetPixId();
     427     
     428      const MGeomPix &gpix  = (*fCam)[idx];
     429      const Int_t    nnmax  = gpix.GetNumNeighbors();
     430     
     431      if ( kk[idx] > 0)
     432        {
     433          sflag = 0;
     434         
     435          for(Int_t j=0; j < nnmax ; j++)
     436            {
     437              const Int_t idx2 = gpix.GetNeighbor(j);
     438             
     439              if (idx2 < idx)
     440                {
     441                  for(Int_t k = 1; k <= nvect; k++)
     442                    {
     443                      if (vect[k][idx2] == 1)
     444                        {
     445                          sflag = 1;
     446                          vect[k][idx] = 1;
     447                        }
     448                    }
     449                }
     450            }
     451         
     452          if (sflag == 0)
     453            {
     454              nvect++;
     455              vect[nvect][idx] = 1;         
     456            }
     457         
     458        }
     459    }
     460 
     461  fIslNum = nvect;
     462 
     463 
     464  // Repeated Chain Corrections
     465 
     466  for(Int_t i = 1; i <= nvect; i++)
     467    {
     468      for(Int_t j = i+1; j <= nvect; j++)
     469        {
     470          control = 0;
     471          for(Int_t k = 0; k < npix; k++)
     472            {
     473             
     474              if (vect[i][k] == 1 && vect[j][k] == 1)
     475                {
     476                  control = 1;
     477                  break;
     478                }
     479            }
     480          if (control == 1)
     481            {
     482              for(Int_t k = 0; k < npix; k++)
     483                {
     484                  if(vect[j][k] == 1)
     485                    vect[i][k] = 1;
     486                  vect[j][k] = 0;
     487                  zeros[j] = 1;
     488                }       
     489              fIslNum = fIslNum-1;         
     490            }
     491         
     492        }
     493    }
     494 
     495 
     496  Int_t l = 1;
     497 
     498  for(Int_t i = 1;  i<= nvect ; i++)
     499    {
     500      if (zeros[i] == 0)
     501        {
     502          for(Int_t k = 0; k<npix; k++)
     503            {
     504              vect[l][k] = vect[i][k];
     505            }
     506          l++;
     507        }
     508    }
     509 
     510 
     511  //set the number of islands in one event
     512  fIsl->SetIslNum(fIslNum);
     513
     514  //examine each island...
     515  Int_t fPixNum[fIslNum];
     516  Float_t fSigToNoise[fIslNum];
     517  Float_t time[577];
     518  Float_t timeVariance[fIslNum];
     519 
     520  //reset the "sets" functions
     521  if (fIslNum <1)
     522    fIsl->SetIslNum(0);
     523
     524  for(Int_t i = 0; i<20 ;i++)
     525    {
     526      fIsl->SetPixNum(i,-1);
     527      fIsl->SetSigToNoise(i,-1);
     528      fIsl->SetTimeSpread(i,-1);
     529   
     530      for(Int_t idx = 0; idx<npix; idx++)
     531        {
     532          fIsl->SetIslId(idx, -1);
     533          fIsl->SetArrivalTime(i, idx, -1 );
     534        }
     535    }
     536 
     537   
     538   for(Int_t i = 1; i<=fIslNum ; i++)
     539    {
     540      Int_t n = 0;
     541      Int_t ncore = 0;
     542     
     543      Float_t MIN = 10000;
     544      Float_t MAX = 0;
     545
     546      signal = 0;
     547      noise = 0;
     548      fPixNum[i-1] = 0;
     549      timeVariance[i-1] = 0;
     550     
     551      for(Int_t idx=0 ; idx<npix ; idx++)
     552        {
     553         
     554          MCerPhotPix *pix = fEvt->GetPixById(idx);
     555          const MPedestalPix &ped  = (*fPed)[idx];
     556          const MArrivalTimePix &timepix = (*fTime)[idx];
     557
     558          if (pix == NULL) break;
     559           
     560          if (vect[i][idx] ==1 && fEvt->IsPixelUsed(idx)){
     561           
     562            fPixNum[i-1]++;
     563            signal += pix->GetNumPhotons() * (fCam->GetPixRatio(idx));
     564            noise += pow(ped.GetPedestalRms(),2);
     565           
     566            time[n] = timepix.IsLoGainUsed() ? timepix.GetArrivalTimeLoGain() : timepix.GetArrivalTimeHiGain();
     567           
     568           
     569            if (fEvt->IsPixelCore(idx)){
     570             
     571              if (time[n] > MAX)
     572                MAX = time[n];
     573              if (time[n] < MIN)
     574                MIN = time[n];
     575             
     576              ncore++;
     577            }
     578           
     579            fIsl->SetIslId(idx, i-1);
     580            fIsl->SetArrivalTime(i-1, idx, time[n]);
     581               
     582            n++;
     583          }
     584         
     585        }
     586
     587      // Float_t mean = timeVariance[i-1]/ncore;
     588           
     589      timeVariance[i-1] = 0;
     590     
     591      timeVariance[i-1] = (MAX - MIN)/ncore;
     592      timeVariance[i-1] = (MAX - MIN)/ncore;
     593
     594      fSigToNoise[i-1]= (Float_t)signal/(Float_t)sqrt(noise);
     595
     596      fIsl->SetPixNum(i-1,fPixNum[i-1]);
     597      fIsl->SetSigToNoise(i-1,fSigToNoise[i-1]);
     598      fIsl->SetTimeSpread(i-1, timeVariance[i-1]);
     599     
     600    }
     601 
     602  fIsl->SetReadyToSave();
     603 
     604  return 1; 
     605}
  • trunk/MagicSoft/Mars/mtemp/mifae/library/MIslandCalc.h

    r3976 r4286  
    3131 
    3232    TString           fIslName;     //    name of the 'MIslands' container
    33  
     33 
     34    Int_t  fIslandAlgorithm;
     35
    3436    Int_t PreProcess(MParList *plist);
    3537    Int_t Process();
     38    Int_t Calc1();                  // algorithm of counting islands #1
     39    Int_t Calc2();                  // algorithm of counting islands #2   
    3640           
    3741 public:
     
    3943    void SetOutputName(TString outname)   { fIslName = outname; }
    4044   
     45    void SetAlgorithm(Int_t m)   {fIslandAlgorithm = m;}
     46   
    4147    ClassDef(MIslandCalc, 0)        // task doing the image cleaning
    4248};
  • trunk/MagicSoft/Mars/mtemp/mifae/programs/makeHillas.cc

    r4225 r4286  
    6565
    6666// initial and final time slices to be used in signal extraction
    67 const Byte_t hifirst = 0;
    68 const Byte_t hilast  = 13;
     67const Byte_t hifirst = 1;
     68const Byte_t hilast  = 14;
    6969const Byte_t lofirst = 3;
    70 const Byte_t lolast  = 12;
     70const Byte_t lolast  = 14;
    7171
    7272// declaration of variables read from datacards
     
    8686Float_t  lnew      = 40;
    8787Int_t    kmethod   = 1;
     88Int_t    kalgorithm = 1;
    8889Int_t    nfiles    = 0;
    8990
     
    238239  isl2.SetName("MIslands2");
    239240
    240   if (islflag == 1 || islflag == 2)
     241  MIslands      isl3;
     242  isl3.SetName("MIslands3");
     243
     244  if (islflag == 1 || islflag == 2 || islflag == 3)
    241245    {
    242246      plist4.AddToList(&timecam);
     
    247251    {
    248252      plist4.AddToList(&isl2);
     253    }
     254
     255  if (islflag == 3)
     256    {
     257      plist4.AddToList(&isl3);
    249258    }
    250259 
     
    276285  MIslandCalc       island;
    277286  island.SetOutputName("MIslands1");
     287  island.SetAlgorithm(kalgorithm);
    278288
    279289  MBadPixelsTreat   interpolatebadpixels;
     
    286296  MIslandCalc       island2;
    287297  island2.SetOutputName("MIslands2"); 
     298  island2.SetAlgorithm(kalgorithm);
     299
     300  MIslandCalc       island3;
     301  island3.SetOutputName("MIslands3"); 
    288302 
    289303 
     
    307321  write->AddContainer("MSrcPosCam"     , "Parameters");
    308322 
    309   if (islflag == 1 || islflag == 2)
     323  if (islflag == 1 || islflag == 2 || islflag == 3)
    310324    write->AddContainer("MIslands1" , "Parameters");
    311325  if (islflag == 2)
    312326    write->AddContainer("MIslands2" , "Parameters");
     327  if (islflag == 3)
     328    write->AddContainer("MIslands3" , "Parameters");
     329
    313330
    314331  if(display)
     
    319336      if (islflag == 2)
    320337        disphillas->SetIslandsName("MIslands2");
     338      if (islflag == 3)
     339        disphillas->SetIslandsName("MIslands3");
    321340    }     
    322341
     
    329348  tlist4.AddToList(&clean);
    330349
    331   if (islflag == 1 || islflag == 2)
     350  if (islflag == 1 || islflag == 2 || islflag == 3)
    332351    {
    333352      tlist4.AddToList(&timecalc);
     
    340359      tlist4.AddToList(&island2);
    341360    }
    342  
     361
     362  if (islflag == 3)
     363    {
     364      tlist4.AddToList(&islclean);
     365      tlist4.AddToList(&island3);
     366    }
     367 
     368
    343369  //tlist4.AddToList(&blind2);
    344370  tlist4.AddToList(&hcalc);
     
    475501        {
    476502          ifun >> islflag;
     503
     504          // if (islflag == 1 || islflag == 2)
     505            ifun >> kalgorithm;
    477506        }
    478507
     
    522551  cout << "Cleaning level: ("<<lcore<<","<<ltail<<")" << endl;
    523552  if (islflag == 1 || islflag == 2)
    524     cout << "Island calcultation..." << endl;
     553    cout << "Island calcultation..." << "using algorithm #" << kalgorithm <<endl;
    525554  if (islflag == 2)
    526555    {
Note: See TracChangeset for help on using the changeset viewer.