Back to index

See source file

CRich.h

 
//----------------------------------------------------------------------------- 
//  $Header: /tmp_mnt/asis/offline/ceres/cool/project/RCS/CRich.h,v 2.8 1997/04/25 15:05:32 messer Exp $ 
// 
//  COOL Program Library   
//  Copyright (C) CERES collaboration, 1996 
// 
//  Declarations for  CRich class. 
// 
//----------------------------------------------------------------------------- 
#ifndef CRICH_H 
#define CRICH_H 
 
#include "cool.h" 
#include "CRichLikeDetector.h" 
#include "CDrawable.h" 
#include "CRichSetup.h" 
#include "CCoordinate.h" 
#include "CFittedRing.h" 
#include "CRingCandidate.h" 
#include "CRingMask.h" 
#include "CList.h" 
 
class CRich : public CRichLikeDetector, public CDrawable { 
public: 
   CRich(); 
   virtual ~CRich(); 
    
public: 
   // 
   //  The following are CRich specific member functions 
   //       
   virtual CBoolean makeClustersAndDoCleanup();		// perform complete cleanup 
   virtual void removeNoiseClusters(); 
   virtual CBoolean removeBigClusters(); 
   virtual CBoolean removeSmallClusters(); 
   virtual CBoolean makeHoughCandidates(int = -1); 
   virtual CBoolean makeRingFits();                // perform electron fits only 
   virtual CBoolean applyRingQualityCuts();        // ... ring quality cuts are applied here    
   void printRingProperties(ostream& = cout) const; 
   CBoolean rotateHits(CAngle); 
    
public: 
   // 
   //  The following are coordinate transformation function. 
   //  Note that also Rich-geometry related corrections are applied. 
   /// See CCoordinate.h for more information 
   // 
   void transform(CRichPolarCoord&, const CRichPadCoord&) const;  // CRichPadCoord -> CRichPolarCoord 
   void transform(CRichPadCoord&, const CRichPolarCoord&) const;  // CRichPolarCoord -> CRichPadCoord 
   void transform(CRichXYCoord&, const CRichPadCoord&) const;     // CRichPadCoord -> CRichXYCoord 
   void transform(CRichPadCoord&, const CRichXYCoord&) const;     // CRichXYCoord -> CRichPadCoord 
   // 
   //  These two are trivial  
   // 
   void transform(CRichXYCoord&, const CRichPolarCoord&) const;   // CRichPolarCoord -> CRichXYCoord 
   void transform(CRichPolarCoord&, const CRichXYCoord&) const;   // CRichXYCoord -> CRichPolarCoord 
    
   // 
   //  The following are CRich specific MC functions 
   //  
   void     makeDigiHits(CMCServer&);       
 
protected: 
   // 
   //  The following are coordinate transformation routines taking into  
   //  account the mirror quality, namely the change of the focal length.  
   // 
   void transformWithVariableFocalLength(CRichPolarCoord&, const CRichPadCoord&) const;  // CRichPadCoord -> CRichPolarCoord 
   void transformWithVariableFocalLength(CRichPadCoord&, const CRichPolarCoord&) const;  // CRichPolarCoord -> CRichPadCoord 
   void transformWithVariableFocalLength(CRichXYCoord&, const CRichPadCoord&) const;     // CRichPadCoord -> CRichXYCoord 
   void transformWithVariableFocalLength(CRichPadCoord&, const CRichXYCoord&) const;     // CRichXYCoord -> CRichPadCoord 
 
  void transformWithConstantFocalLength(CRichPolarCoord&, const CRichPadCoord&) const;   // ...one time too much 
  void transformWithConstantFocalLength(CRichPadCoord&, const CRichPolarCoord&) const; 
  void transformWithConstantFocalLength(CRichXYCoord&, const CRichPadCoord&) const; 
  void transformWithConstantFocalLength(CRichPadCoord&, const CRichXYCoord&) const; 
 
public: 
   // 
   //  The following member functions are needed in order 
   //  to allow drawing. They are declared pure virtual in 
   //  the CDrawable base class. 
   // 
   virtual void draw(const char*);   
   float getLeft() const; 
   float getRight() const; 
   float getBottom() const; 
   float getTop() const; 
   const CString& getName() const { return name; } 
    
public: 
   CRichSetup*		  getSetup()    const { return setup; } 
   CList<CFittedRing>*	  getRingList() const { return ringList; } 
   CList<CRingCandidate>* getCandidateList() const { return candidateList; } 
   void			  attachCandidateList(CList<CRingCandidate>* newList) { candidateList = newList; } 
   CList<CRingCandidate>* detachCandidateList(); 
   void			  attachRingList(CList<CFittedRing>* newList) { ringList = newList; } 
   CList<CFittedRing>*    detachRingList(); 
       
   virtual CBoolean getSegmentFocalLengthDescription(double, double&, double&, double&) const;    
 
 
protected: 
   virtual CBoolean isGoodBigCluster(CRichLikeCluster&); 
   virtual CBoolean isGoodSmallCluster(CRichLikeCluster&); 
 
 
   // 
   // functions needed for candidate search 
   // 
   virtual CRingMask* ringMaskWidth1(double); 
   virtual CRingMask* ringMask(double, double); 
    
    
protected: 
   virtual void markSensitiveArea();                 
   int assignHitsAndRings( CSortedList<CRichLikeHit>&, CList<CFittedRing>&); 
    
protected: 
   CRingMask			*houghMask; 
   CRichSetup			*setup; 
   CList<CFittedRing>		*ringList; 
   CList<CRingCandidate>	*candidateList; 
}; 
 
    
#endif /* CRICH_H */ 

Back to index

See source file