//////////////////////////////////////////////////////////////////////////////
//
// File: hrichringfind.h
//
// $Id: hrichringfind.h,v 1.10 2009-04-15 09:24:32 halo Exp $
//
//*-- Author: Witold Przygoda (przygoda@psja1.if.uj.edu.pl)
//*-- Modified: 1999/12/04 by Witold Przygoda (przygoda@psja1.if.uj.edu.pl)
//
//////////////////////////////////////////////////////////////////////////////


#ifndef HRICHRINGFIND_H
#define HRICHRINGFIND_H

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

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


class HRichRingFind: public TObject
{

 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*);
 
  HRichRingFind(const HRichRingFind& source);
  HRichRingFind& operator=(const HRichRingFind& source);

  Int_t GetAlgorithmNr(HRichAnalysis *showMe);
  Float_t CalcDistance(const HRichHit& ring1, const HRichHit& ring2);
  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(HRichHit *hit);
  Int_t  TestRing(HRichAnalysis *showYou,HRichHit *hit, Int_t amplit);


  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, Int_t ringNr, 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

Last change: Sat May 22 13:09:57 2010
Last generated: 2010-05-22 13:09

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.