ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : Laura Fabbietti <Laura.Fabbietti@ph.tum.de>
//*-- Revised : Martin Jurkovic <martin.jurkovic@ph.tum.de> 2010
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRichRingFindSim
//
//  Ring recognition algorithms. This class isn't any task but it is called
//  for each event from the HRichAnalysisSim::execute() function.
//
//////////////////////////////////////////////////////////////////////////////


#include "hrichanalysispar.h"
#include "hrichanalysissim.h"
#include "hrichhitsim.h"
#include "hrichringfindsim.h"

using namespace std;

ClassImp(HRichRingFindSim)

//----------------------------------------------------------------------------
HRichRingFindSim::HRichRingFindSim()
{
   maxRings = 0;
   pRings   = NULL;
}
//============================================================================

//----------------------------------------------------------------------------
HRichRingFindSim::~HRichRingFindSim()
{
  if (NULL != pRings) {
      delete [] pRings;
      pRings = NULL;
   }
}
//============================================================================

//----------------------------------------------------------------------------
Bool_t
HRichRingFindSim::init(HRichAnalysisSim* showMe)
{
   maxRings = 0;
   HRichRingFind::init(showMe);

   if (pRings)
      delete [] pRings;

   if( pAnalysisParams->iSuperiorAlgorithmID < 3) {
      Int_t maxRings1=0;
      Int_t maxRings2=0;
      if (pAnalysisParams->isActiveRingFindFitMatrix) maxRings1 = pAnalysisParams->iHowManyFitMatrixRings;
      if (pAnalysisParams->isActiveRingHoughTransf) maxRings2 = pAnalysisParams->iHowManyHoughTransfRings;
      maxRings = (maxRings1 > maxRings2) ? maxRings1 : maxRings2;
   } else { // sum of rings found by each algorithm is stored
      maxRings = 0;
      if (pAnalysisParams->isActiveRingFindFitMatrix) maxRings += pAnalysisParams->iHowManyFitMatrixRings;
      if (pAnalysisParams->isActiveRingHoughTransf) maxRings += pAnalysisParams->iHowManyHoughTransfRings;
   }

   pRings = new HRichHitSim[maxRings];
   showMe->pRings = pRings;

   return kTRUE;
}
//============================================================================

//----------------------------------------------------------------------------
void
HRichRingFindSim::LookForTrack(HRichAnalysisSim *showMe)
{

// This method stores the track numbers for EACH pad contributing to a ring
// (iRingMask == 1) and it stores maximally 3
// tracks  for each ring. At this stage the initial and final track positions in
// the catRichTrack array are stored.

   Int_t n = 0;
   Int_t j = 0;
   Int_t k = 0;
   Int_t z = 0;

   const Int_t ringHalfSize = iRingImageSize / 2;

   for (n = 0; n < iRingNr; ++n) {
      Int_t trackCount = 0;
      HRichHitSim& ring = pRings[n];

      Int_t iNowX = ring.iRingX;
      Int_t iNowY = ring.iRingY;
      for (Int_t row = iNowY - ringHalfSize; row <= iNowY + ringHalfSize; ++row) {
         for (Int_t col = iNowX - ringHalfSize; col <= iNowX + ringHalfSize; ++col) {
            if (!showMe->IsOut(col, row)) {
               if (showMe->GetPad(col, row)->getAmplitude() > 0 &&
                   1 == pAnalysisParams->iRingMask[col-(iNowX-ringHalfSize) +
                                                   (pAnalysisParams->iRingMaskSize) *
                                                   (row-(iNowY-ringHalfSize))]) {
                  ring.iRingPadNTrack1[trackCount] = showMe->getPadsNTrack1(col, row, showMe->GetActiveSector());
                  ring.iRingPadNTrack2[trackCount] = showMe->getPadsNTrack2();
                  trackCount++;
               }
            }
         }
      }

      ring.iRingPadNTrack1[trackCount] = -1; // signals end of list
      ring.iRingPadNTrack2[trackCount] = -1; // signals end of list
      j = k = z = 0;

      while (ring.iRingPadNTrack1[j] >= 0) {
         ring.iRingTrack[k] = showMe->getTrack(ring.iRingPadNTrack1[j]);
         ring.iRingFlag[k] = showMe->getFlag(ring.iRingPadNTrack1[j]);

         k++;

         if (k >= 254) {
            Warning("LookForTrack", "Boundary reached. Additional tracks will be skipped");
            break;
         }

         z = ring.iRingPadNTrack2[j] - ring.iRingPadNTrack1[j];

         //if z > 0 then it means that there is more then 1 track for the analyzed Ring
         // In this case even the second [third] track is stored.

         for (Int_t tmp = 1; tmp <= z; ++tmp) {
            ring.iRingTrack[k] = showMe->getTrack(ring.iRingPadNTrack1[j] + tmp);
            ring.iRingFlag[k] = showMe->getFlag(ring.iRingPadNTrack1[j] + tmp);
            k++;

            if (k >= 254) {
               Warning("LookForTrack", "Boundary reached. Additional tracks will be skipped");
               break;
            }
         }
         j++;
      }

      ring.iRingTrack[k] = 0; // signals end of list
   }

}
//============================================================================

//----------------------------------------------------------------------------
Int_t HRichRingFindSim::Execute(HRichAnalysisSim *giveMe)
{

   iRingNr = HRichRingFind::Execute(giveMe);

   if (iRingNr >= maxRings) {
      Warning("Execute",
              "Number of found rings (%d) exceeds the array size, only firs %d rings are taken",
              iRingNr, maxRings);
      iRingNr = maxRings;
   }

   for (Int_t i = 0; i < iRingNr; ++i) {
      pRings[i] = HRichRingFind::pRings[i];
   }

   if (iRingNr > 0)
      LookForTrack(giveMe);

   return (iRingNr);
}

















 hrichringfindsim.cc:1
 hrichringfindsim.cc:2
 hrichringfindsim.cc:3
 hrichringfindsim.cc:4
 hrichringfindsim.cc:5
 hrichringfindsim.cc:6
 hrichringfindsim.cc:7
 hrichringfindsim.cc:8
 hrichringfindsim.cc:9
 hrichringfindsim.cc:10
 hrichringfindsim.cc:11
 hrichringfindsim.cc:12
 hrichringfindsim.cc:13
 hrichringfindsim.cc:14
 hrichringfindsim.cc:15
 hrichringfindsim.cc:16
 hrichringfindsim.cc:17
 hrichringfindsim.cc:18
 hrichringfindsim.cc:19
 hrichringfindsim.cc:20
 hrichringfindsim.cc:21
 hrichringfindsim.cc:22
 hrichringfindsim.cc:23
 hrichringfindsim.cc:24
 hrichringfindsim.cc:25
 hrichringfindsim.cc:26
 hrichringfindsim.cc:27
 hrichringfindsim.cc:28
 hrichringfindsim.cc:29
 hrichringfindsim.cc:30
 hrichringfindsim.cc:31
 hrichringfindsim.cc:32
 hrichringfindsim.cc:33
 hrichringfindsim.cc:34
 hrichringfindsim.cc:35
 hrichringfindsim.cc:36
 hrichringfindsim.cc:37
 hrichringfindsim.cc:38
 hrichringfindsim.cc:39
 hrichringfindsim.cc:40
 hrichringfindsim.cc:41
 hrichringfindsim.cc:42
 hrichringfindsim.cc:43
 hrichringfindsim.cc:44
 hrichringfindsim.cc:45
 hrichringfindsim.cc:46
 hrichringfindsim.cc:47
 hrichringfindsim.cc:48
 hrichringfindsim.cc:49
 hrichringfindsim.cc:50
 hrichringfindsim.cc:51
 hrichringfindsim.cc:52
 hrichringfindsim.cc:53
 hrichringfindsim.cc:54
 hrichringfindsim.cc:55
 hrichringfindsim.cc:56
 hrichringfindsim.cc:57
 hrichringfindsim.cc:58
 hrichringfindsim.cc:59
 hrichringfindsim.cc:60
 hrichringfindsim.cc:61
 hrichringfindsim.cc:62
 hrichringfindsim.cc:63
 hrichringfindsim.cc:64
 hrichringfindsim.cc:65
 hrichringfindsim.cc:66
 hrichringfindsim.cc:67
 hrichringfindsim.cc:68
 hrichringfindsim.cc:69
 hrichringfindsim.cc:70
 hrichringfindsim.cc:71
 hrichringfindsim.cc:72
 hrichringfindsim.cc:73
 hrichringfindsim.cc:74
 hrichringfindsim.cc:75
 hrichringfindsim.cc:76
 hrichringfindsim.cc:77
 hrichringfindsim.cc:78
 hrichringfindsim.cc:79
 hrichringfindsim.cc:80
 hrichringfindsim.cc:81
 hrichringfindsim.cc:82
 hrichringfindsim.cc:83
 hrichringfindsim.cc:84
 hrichringfindsim.cc:85
 hrichringfindsim.cc:86
 hrichringfindsim.cc:87
 hrichringfindsim.cc:88
 hrichringfindsim.cc:89
 hrichringfindsim.cc:90
 hrichringfindsim.cc:91
 hrichringfindsim.cc:92
 hrichringfindsim.cc:93
 hrichringfindsim.cc:94
 hrichringfindsim.cc:95
 hrichringfindsim.cc:96
 hrichringfindsim.cc:97
 hrichringfindsim.cc:98
 hrichringfindsim.cc:99
 hrichringfindsim.cc:100
 hrichringfindsim.cc:101
 hrichringfindsim.cc:102
 hrichringfindsim.cc:103
 hrichringfindsim.cc:104
 hrichringfindsim.cc:105
 hrichringfindsim.cc:106
 hrichringfindsim.cc:107
 hrichringfindsim.cc:108
 hrichringfindsim.cc:109
 hrichringfindsim.cc:110
 hrichringfindsim.cc:111
 hrichringfindsim.cc:112
 hrichringfindsim.cc:113
 hrichringfindsim.cc:114
 hrichringfindsim.cc:115
 hrichringfindsim.cc:116
 hrichringfindsim.cc:117
 hrichringfindsim.cc:118
 hrichringfindsim.cc:119
 hrichringfindsim.cc:120
 hrichringfindsim.cc:121
 hrichringfindsim.cc:122
 hrichringfindsim.cc:123
 hrichringfindsim.cc:124
 hrichringfindsim.cc:125
 hrichringfindsim.cc:126
 hrichringfindsim.cc:127
 hrichringfindsim.cc:128
 hrichringfindsim.cc:129
 hrichringfindsim.cc:130
 hrichringfindsim.cc:131
 hrichringfindsim.cc:132
 hrichringfindsim.cc:133
 hrichringfindsim.cc:134
 hrichringfindsim.cc:135
 hrichringfindsim.cc:136
 hrichringfindsim.cc:137
 hrichringfindsim.cc:138
 hrichringfindsim.cc:139
 hrichringfindsim.cc:140
 hrichringfindsim.cc:141
 hrichringfindsim.cc:142
 hrichringfindsim.cc:143
 hrichringfindsim.cc:144
 hrichringfindsim.cc:145
 hrichringfindsim.cc:146
 hrichringfindsim.cc:147
 hrichringfindsim.cc:148
 hrichringfindsim.cc:149
 hrichringfindsim.cc:150
 hrichringfindsim.cc:151
 hrichringfindsim.cc:152
 hrichringfindsim.cc:153
 hrichringfindsim.cc:154
 hrichringfindsim.cc:155
 hrichringfindsim.cc:156
 hrichringfindsim.cc:157
 hrichringfindsim.cc:158
 hrichringfindsim.cc:159
 hrichringfindsim.cc:160
 hrichringfindsim.cc:161
 hrichringfindsim.cc:162
 hrichringfindsim.cc:163
 hrichringfindsim.cc:164
 hrichringfindsim.cc:165
 hrichringfindsim.cc:166
 hrichringfindsim.cc:167
 hrichringfindsim.cc:168
 hrichringfindsim.cc:169
 hrichringfindsim.cc:170
 hrichringfindsim.cc:171
 hrichringfindsim.cc:172
 hrichringfindsim.cc:173
 hrichringfindsim.cc:174
 hrichringfindsim.cc:175
 hrichringfindsim.cc:176
 hrichringfindsim.cc:177
 hrichringfindsim.cc:178
 hrichringfindsim.cc:179
 hrichringfindsim.cc:180
 hrichringfindsim.cc:181
 hrichringfindsim.cc:182
 hrichringfindsim.cc:183
 hrichringfindsim.cc:184
 hrichringfindsim.cc:185
 hrichringfindsim.cc:186
 hrichringfindsim.cc:187
 hrichringfindsim.cc:188
 hrichringfindsim.cc:189
 hrichringfindsim.cc:190