ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : Witold Przygoda (przygoda@psja1.if.uj.edu.pl)
//*-- Revised : Martin Jurkovic <martin.jurkovic@ph.tum.de> 2010
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRichRingFind
//
//
//////////////////////////////////////////////////////////////////////////////


#ifndef HRICHRINGFIND_H
#define HRICHRINGFIND_H

#include "TArrayI.h"
#include "TList.h"
#include "TObject.h"

class HRichAnalysis;
class HRichAnalysisPar;
class HRichGeometryPar;
class HRichHit;


class HRichRingFind: public TObject {
private:

   HRichRingFind(const HRichRingFind& source);
   HRichRingFind& operator=(const HRichRingFind& source);


protected:

   HRichAnalysisPar *pAnalysisParams;
   HRichGeometryPar *pGeometryParams;

   Int_t maxRings;   // max number of rich hits in pRings array

   Int_t iInnerCount;
   Int_t iInnerPhot4;
   Int_t iInnerPhot8;
   Float_t fClusterSize;
   Float_t fClusterLMax4;
   Float_t fClusterLMax8;

   Int_t iRingImageSize;
   TArrayI iRingTempImage;
   Double_t HomogenDistr(Double_t left, Double_t right);

   Float_t xMeanMax;
   Float_t yMeanMax;
   Float_t xPadMeanMax;
   Float_t yPadMeanMax;
   Float_t thetaMeanMax;
   Float_t phiMeanMax;
   Int_t fMaxClusterSize;
   Int_t fMaxClusterSum;
   Int_t fMaxThrClusterSize;
   Int_t iCount;
   Int_t iHitCount;
   Int_t maxCols;
   Int_t maxRows;

   Int_t iMatrixSize;
   Int_t iMatrixHalfSize;

   Int_t ly_from;
   Int_t ly_to;
   Int_t lx_from;
   Int_t lx_to;
   Int_t d_col_ij;
   Int_t d_row_ij;
   Int_t d_col_jk;
   Int_t d_row_jk;
   Int_t d2_colrow_jk;
   Int_t d2_colrow_ij;

   TArrayI iPadActive;

public:

   TArrayI iPadPlane;
   TArrayI iPadPlaneCopy;

   TArrayI iPadCol;
   TArrayI iPadRow;

   Int_t iRingNr;
   HRichHit *pRings;

   TList fHitList1;
   TList fHitList2;
   TList fHitCandidate;

   HRichRingFind();
   virtual ~HRichRingFind();


   Bool_t init(HRichAnalysis*);


   Int_t GetAlgorithmNr(HRichAnalysis *showMe);
   Float_t CalcDistance(const HRichHit& ring1, const HRichHit& ring2); // uses integer pad as ring-center
   Float_t CalcDistanceMean(const HRichHit& ring1, const HRichHit& ring2); // uses fraction of pad as ring-center
   Float_t CalcDistance(Int_t x, Int_t y, const HRichHit& ring);
   Float_t CalcDistance(Int_t x1, Int_t y1, Int_t x2, Int_t y2);

   Bool_t TestDensity(HRichAnalysis *showYou, HRichHit *pHit);
   Bool_t TestBorder(HRichAnalysis *showYou, HRichHit *pHit, Int_t amplit);
   Bool_t TestDynamic(HRichAnalysis *showYou, HRichHit *pHit, Int_t amplit);
   Bool_t TestRatio(HRichAnalysis *showYou, HRichHit *pHit);
   Bool_t TestAsymmetry(HRichAnalysis *showYou, HRichHit *pHit, Int_t amplit);
   Bool_t TestRingCharge(HRichAnalysis *showYou, HRichHit *hit);
   Int_t  TestRing(HRichAnalysis *showYou, HRichHit *hit, Int_t amplit);

   Int_t CleanIdenticalPairs(HRichAnalysis* showMe);


   void MaxFinding(HRichAnalysis *showYou, TList *hitList, TArrayI *in, TArrayI *out,
                   Int_t ringnr, Float_t distance);

   void MaxAnalysis(HRichAnalysis *showMe, TList *hitList, TArrayI *in, TArrayI *out,
                    Int_t minAmpl);
   void MaxCluster(HRichAnalysis *showYou, TArrayI *in, TArrayI *out,
                   Int_t nowPad, Int_t maxCode, Int_t minAmpl);

   Int_t MaxLabAmpl(TList *hitList, Int_t maxCode);
   void MaxSelector(HRichAnalysis *showMe, TList *hitList, TArrayI *in, TArrayI *out);
   void MaxMarker(HRichAnalysis *showYou, TArrayI *in, TArrayI *out,
                  Int_t nowPad, Int_t maxCode);
   void CloseMaxRejection(TList *hitList);


   virtual void CalcRingParameters(HRichAnalysis *showMe, HRichHit *pHit);
   virtual void CalcFakeContribution(HRichAnalysis *showMe);
   void CalcRingClusters(HRichAnalysis *showYou, Int_t *dumpArr, HRichHit* pHit,
			 Int_t nowX, Int_t nowY);

   void RingFindFitMatrix(HRichAnalysis *showMe, Int_t minampl, Int_t distance, Int_t howmanyrings = 5);
   void RingFindHoughTransf(HRichAnalysis *showMe, Int_t minampl, Int_t distance, Int_t howmanyrings = 5);

   Int_t MatchRings(HRichAnalysis *showMe, TList *hitList1, TList *hitList2);

   Int_t Execute(HRichAnalysis *giveMe);


   ClassDef(HRichRingFind, 0)
};


#endif // HRICHRINGFIND_H
 hrichringfind.h:1
 hrichringfind.h:2
 hrichringfind.h:3
 hrichringfind.h:4
 hrichringfind.h:5
 hrichringfind.h:6
 hrichringfind.h:7
 hrichringfind.h:8
 hrichringfind.h:9
 hrichringfind.h:10
 hrichringfind.h:11
 hrichringfind.h:12
 hrichringfind.h:13
 hrichringfind.h:14
 hrichringfind.h:15
 hrichringfind.h:16
 hrichringfind.h:17
 hrichringfind.h:18
 hrichringfind.h:19
 hrichringfind.h:20
 hrichringfind.h:21
 hrichringfind.h:22
 hrichringfind.h:23
 hrichringfind.h:24
 hrichringfind.h:25
 hrichringfind.h:26
 hrichringfind.h:27
 hrichringfind.h:28
 hrichringfind.h:29
 hrichringfind.h:30
 hrichringfind.h:31
 hrichringfind.h:32
 hrichringfind.h:33
 hrichringfind.h:34
 hrichringfind.h:35
 hrichringfind.h:36
 hrichringfind.h:37
 hrichringfind.h:38
 hrichringfind.h:39
 hrichringfind.h:40
 hrichringfind.h:41
 hrichringfind.h:42
 hrichringfind.h:43
 hrichringfind.h:44
 hrichringfind.h:45
 hrichringfind.h:46
 hrichringfind.h:47
 hrichringfind.h:48
 hrichringfind.h:49
 hrichringfind.h:50
 hrichringfind.h:51
 hrichringfind.h:52
 hrichringfind.h:53
 hrichringfind.h:54
 hrichringfind.h:55
 hrichringfind.h:56
 hrichringfind.h:57
 hrichringfind.h:58
 hrichringfind.h:59
 hrichringfind.h:60
 hrichringfind.h:61
 hrichringfind.h:62
 hrichringfind.h:63
 hrichringfind.h:64
 hrichringfind.h:65
 hrichringfind.h:66
 hrichringfind.h:67
 hrichringfind.h:68
 hrichringfind.h:69
 hrichringfind.h:70
 hrichringfind.h:71
 hrichringfind.h:72
 hrichringfind.h:73
 hrichringfind.h:74
 hrichringfind.h:75
 hrichringfind.h:76
 hrichringfind.h:77
 hrichringfind.h:78
 hrichringfind.h:79
 hrichringfind.h:80
 hrichringfind.h:81
 hrichringfind.h:82
 hrichringfind.h:83
 hrichringfind.h:84
 hrichringfind.h:85
 hrichringfind.h:86
 hrichringfind.h:87
 hrichringfind.h:88
 hrichringfind.h:89
 hrichringfind.h:90
 hrichringfind.h:91
 hrichringfind.h:92
 hrichringfind.h:93
 hrichringfind.h:94
 hrichringfind.h:95
 hrichringfind.h:96
 hrichringfind.h:97
 hrichringfind.h:98
 hrichringfind.h:99
 hrichringfind.h:100
 hrichringfind.h:101
 hrichringfind.h:102
 hrichringfind.h:103
 hrichringfind.h:104
 hrichringfind.h:105
 hrichringfind.h:106
 hrichringfind.h:107
 hrichringfind.h:108
 hrichringfind.h:109
 hrichringfind.h:110
 hrichringfind.h:111
 hrichringfind.h:112
 hrichringfind.h:113
 hrichringfind.h:114
 hrichringfind.h:115
 hrichringfind.h:116
 hrichringfind.h:117
 hrichringfind.h:118
 hrichringfind.h:119
 hrichringfind.h:120
 hrichringfind.h:121
 hrichringfind.h:122
 hrichringfind.h:123
 hrichringfind.h:124
 hrichringfind.h:125
 hrichringfind.h:126
 hrichringfind.h:127
 hrichringfind.h:128
 hrichringfind.h:129
 hrichringfind.h:130
 hrichringfind.h:131
 hrichringfind.h:132
 hrichringfind.h:133
 hrichringfind.h:134
 hrichringfind.h:135
 hrichringfind.h:136
 hrichringfind.h:137
 hrichringfind.h:138
 hrichringfind.h:139
 hrichringfind.h:140
 hrichringfind.h:141
 hrichringfind.h:142
 hrichringfind.h:143
 hrichringfind.h:144
 hrichringfind.h:145
 hrichringfind.h:146
 hrichringfind.h:147
 hrichringfind.h:148
 hrichringfind.h:149
 hrichringfind.h:150
 hrichringfind.h:151
 hrichringfind.h:152
 hrichringfind.h:153
 hrichringfind.h:154
 hrichringfind.h:155
 hrichringfind.h:156