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 */