Update of /cvsroot/nsclspectcl/SpecTcl/Gates In directory sc8-pr-cvs1:/tmp/cvs-serv28824 Modified Files: PointlistIterator.h PointlistGate.h PointlistGate.cpp Makefile Gate.h GammaCut.h GammaCut.cpp GammaContour.h GammaContour.cpp GammaBand.h GammaBand.cpp Cut.h Cut.cpp Contour.h Contour.cpp C2Bands.h C2Bands.cpp Band.h Band.cpp Log Message: To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. Index: PointlistIterator.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/PointlistIterator.h,v retrieving revision 4.2 retrieving revision 4.3 diff -C2 -d -r4.2 -r4.3 *** PointlistIterator.h 10 Feb 2003 17:54:48 -0000 4.2 --- PointlistIterator.h 15 Apr 2003 19:15:41 -0000 4.3 *************** *** 291,294 **** --- 291,303 ---- ///////////////////////////////////////////////////////////// + /* + Change Log: + $Log$ + Revision 4.3 2003/04/15 19:15:41 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + + #ifndef __POINTLISTITERATOR_H //Required for current class #define __POINTLISTITERATOR_H *************** *** 307,319 **** #define __STL_VECTOR #endif ! class CPointListIterator : public CAConstituentIterator { ! std::vector<CPoint>::iterator m_iPoints; // Point array iterator. public: // Constructors. ! CPointListIterator (std::vector<CPoint>::iterator rStart) : m_iPoints(rStart) { } --- 316,330 ---- #define __STL_VECTOR #endif ! /*! ! Class to support iteration in point lists. ! */ class CPointListIterator : public CAConstituentIterator { ! std::vector<FPoint>::iterator m_iPoints; // Point array iterator. public: // Constructors. ! CPointListIterator (std::vector<FPoint>::iterator rStart) : m_iPoints(rStart) { } *************** *** 344,348 **** public: ! std::vector<CPoint>::iterator getPointIterator() const { return m_iPoints; --- 355,359 ---- public: ! std::vector<FPoint>::iterator getPointIterator() const { return m_iPoints; *************** *** 354,358 **** //Set accessor function for attribute ! void setPointIterator (std::vector<CPoint>::iterator am_iPoints) { m_iPoints = am_iPoints; --- 365,369 ---- //Set accessor function for attribute ! void setPointIterator (std::vector<FPoint>::iterator am_iPoints) { m_iPoints = am_iPoints; Index: PointlistGate.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/PointlistGate.h,v retrieving revision 4.3 retrieving revision 4.4 diff -C2 -d -r4.3 -r4.4 *** PointlistGate.h 10 Feb 2003 17:54:18 -0000 4.3 --- PointlistGate.h 15 Apr 2003 19:15:42 -0000 4.4 *************** *** 291,294 **** --- 291,302 ---- ///////////////////////////////////////////////////////////// + + /* + Change Log: + $Log$ + Revision 4.4 2003/04/15 19:15:42 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ #ifndef __POINTLISTGATE_H //Required for current class #define __POINTLISTGATE_H *************** *** 316,341 **** #define __STRING #endif ! class CPointListGate : public CGate { ! UInt_t m_nxId; // Parameter Id of the gate's X parameter. ! UInt_t m_nyId; // // Parameter id of the Y parameter of the gate. ! vector<CPoint> m_aConstituents; public: - // Constructor CPointListGate (UInt_t nXId, UInt_t nYId, ! const vector<CPoint>& Points) : m_nxId(nXId), m_nyId(nYId), m_aConstituents(Points) {} CPointListGate(UInt_t nXId, UInt_t nYId, UInt_t nPts, ! UInt_t *xCoords, UInt_t *yCoords); CPointListGate(UInt_t nXId, UInt_t nYId, UInt_t nPts, ! CPoint* pPoints); ! ~ CPointListGate ( ) { } //Destructor --- 324,358 ---- #define __STRING #endif ! /*! ! This class is a base class for gates that consist of a list ! of points. Examples are bands and countours. The boundaries ! of each of these gates can be expressed as an ordered set of ! points. ! There's an explicit assumption that point list gates are 2-d ! gates. ! */ class CPointListGate : public CGate { ! UInt_t m_nxId; //!< Parameter Id of the gate's X parameter. ! UInt_t m_nyId; //!< Parameter id of the Y parameter of the gate. ! vector<FPoint> m_aConstituents; //!< The points themselves. public: + //!< Constructor with vector of points. CPointListGate (UInt_t nXId, UInt_t nYId, ! const vector<FPoint>& Points) : m_nxId(nXId), m_nyId(nYId), m_aConstituents(Points) {} + //!< Constructor with arrays of coordinates. CPointListGate(UInt_t nXId, UInt_t nYId, UInt_t nPts, ! Float_t *xCoords, Float_t *yCoords); ! //!< Constructor with array of Points. CPointListGate(UInt_t nXId, UInt_t nYId, UInt_t nPts, ! FPoint* pPoints); ! virtual ~ CPointListGate ( ) { } //Destructor *************** *** 364,376 **** } ! //Operator== Equality Operator ! // Gates don't have equality relationships. ! private: ! int operator== (const CPointListGate& aCPointListGate); ! public: // Selectors. public: - //Get accessor function for attribute UInt_t getxId() const { --- 381,390 ---- } ! //!< Equality comparison ! ! int operator== (const CPointListGate& aCPointListGate) const; // Selectors. public: UInt_t getxId() const { *************** *** 378,382 **** } - //Get accessor function for attribute UInt_t getyId() const { --- 392,395 ---- *************** *** 384,400 **** } ! vector<CPoint> getPoints() const { return m_aConstituents; } ! vector<CPoint>::iterator getBegin() { return m_aConstituents.begin(); } ! vector<CPoint>::iterator getEnd() { return m_aConstituents.end(); } ! virtual vector<string> getSpecs() const { }; // Mutators: --- 397,416 ---- } ! vector<FPoint> getPoints() const { return m_aConstituents; } ! vector<FPoint>::iterator getBegin() { return m_aConstituents.begin(); } ! vector<FPoint>::iterator getEnd() { return m_aConstituents.end(); } ! virtual vector<string> getSpecs() const { ! vector<string> empty; ! return empty; ! }; // Mutators: *************** *** 410,414 **** m_nyId = am_nyId; } ! void setPoints(vector<CPoint>& rPoints) { m_aConstituents = rPoints; --- 426,430 ---- m_nyId = am_nyId; } ! void setPoints(vector<FPoint>& rPoints) { m_aConstituents = rPoints; *************** *** 426,432 **** protected: ! int Crosses(int x, int y, ! vector<CPoint>::iterator f, ! vector<CPoint>::iterator s); }; --- 442,448 ---- protected: ! int Crosses(Float_t x, Float_t y, ! vector<FPoint>::iterator f, ! vector<FPoint>::iterator s); }; Index: PointlistGate.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/PointlistGate.cpp,v retrieving revision 4.3 retrieving revision 4.4 diff -C2 -d -r4.3 -r4.4 *** PointlistGate.cpp 10 Feb 2003 17:54:18 -0000 4.3 --- PointlistGate.cpp 15 Apr 2003 19:15:42 -0000 4.4 *************** *** 297,301 **** --- 297,307 ---- // Header Files: // + /* + Change log: + $Log$ + Revision 4.4 2003/04/15 19:15:42 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + */ #include "PointlistGate.h" *************** *** 303,306 **** --- 309,330 ---- #include <stdio.h> + /*! + Comparison. Two point list gates are equal if the base class + indicates equality, and all components of the two bojects are + equal: + \param <TT>rhs (const CPointListGate& [in])</TT> + The gate to which this will be compared. + \retval <TT>int</TT> + - kfTRUE if the comparison indicated equality. + - kfFALSE if the comparison indicated inequality. + */ + int + CPointListGate::operator==(const CPointListGate& rhs) const + { + return (CGate::operator==(rhs) && + (m_nxId == rhs.m_nxId) && + (m_nyId == rhs.m_nyId) && + (m_aConstituents == rhs.m_aConstituents)); + } // Functions for class CPointListGate *************** *** 314,318 **** // CPointListGate::CPointListGate(UInt_t nXId, UInt_t nYId, UInt_t nPts, ! CPoint* pPoints) : m_nxId(nXId), m_nyId(nYId) --- 338,342 ---- // CPointListGate::CPointListGate(UInt_t nXId, UInt_t nYId, UInt_t nPts, ! FPoint* pPoints) : m_nxId(nXId), m_nyId(nYId) *************** *** 333,342 **** // CPointListGate::CPointListGate(UInt_t nXId, UInt_t nYId, UInt_t nPts, ! UInt_t *xCoords, UInt_t *yCoords) : m_nxId(nXId), m_nyId(nYId) { for(UInt_t n = 0; n < nPts; n++) { ! CPoint pt(*xCoords, *yCoords); m_aConstituents.push_back(pt); xCoords++; --- 357,366 ---- // CPointListGate::CPointListGate(UInt_t nXId, UInt_t nYId, UInt_t nPts, ! Float_t *xCoords, Float_t *yCoords) : m_nxId(nXId), m_nyId(nYId) { for(UInt_t n = 0; n < nPts; n++) { ! FPoint pt(*xCoords, *yCoords); m_aConstituents.push_back(pt); xCoords++; *************** *** 423,429 **** CPointListIterator* pI = (CPointListIterator*)rIterator.getActualIterator(); ! std::vector<CPoint>::iterator p = pI->getPointIterator(); ! sprintf(Formatted, "%d %d", (*p).X(), (*p).Y()); return std::string(Formatted); --- 447,453 ---- CPointListIterator* pI = (CPointListIterator*)rIterator.getActualIterator(); ! std::vector<FPoint>::iterator p = pI->getPointIterator(); ! sprintf(Formatted, "%f %f", (*p).X(), (*p).Y()); return std::string(Formatted); *************** *** 454,470 **** */ int ! CPointListGate::Crosses(int x, int y, ! vector<CPoint>::iterator f, ! vector<CPoint>::iterator s) { ! int y1 = f->Y(); ! int y2 = s->Y(); if ((y < y1) && (y < y2)) return 0; // Segement is above point. if ((y >= y1) && (y >= y2)) return 0; // Segment is below point. ! int x1 = f->X(); ! int x2 = s->X(); if(( x < x1) && (x < x2)) return 0; // Segment is to right of point. --- 478,494 ---- */ int ! CPointListGate::Crosses(Float_t x, Float_t y, ! vector<FPoint>::iterator f, ! vector<FPoint>::iterator s) { ! Float_t y1 = f->Y(); ! Float_t y2 = s->Y(); if ((y < y1) && (y < y2)) return 0; // Segement is above point. if ((y >= y1) && (y >= y2)) return 0; // Segment is below point. ! Float_t x1 = f->X(); ! Float_t x2 = s->X(); if(( x < x1) && (x < x2)) return 0; // Segment is to right of point. Index: Makefile =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/Makefile,v retrieving revision 4.22 retrieving revision 4.23 diff -C2 -d -r4.22 -r4.23 *** Makefile 9 Jan 2003 19:13:45 -0000 4.22 --- Makefile 15 Apr 2003 19:15:42 -0000 4.23 *************** *** 124,125 **** --- 124,166 ---- GammaContour.o: GammaContour.cpp $(COMPILE) GammaContour.cpp + # DO NOT DELETE + + ActualIterator.o: ActualIterator.h + AndGate.o: AndGate.h CompoundGate.h Gate.h ConstituentIterator.h + AndGate.o: ActualIterator.h GateContainer.h + Band.o: Band.h PointlistGate.h Gate.h ConstituentIterator.h ActualIterator.h + C2Bands.o: C2Bands.h Contour.h PointlistGate.h Gate.h ConstituentIterator.h + C2Bands.o: ActualIterator.h Interior.h InteriorRow.h Band.h + CompoundGate.o: CompoundGate.h Gate.h ConstituentIterator.h ActualIterator.h + CompoundGate.o: GateContainer.h GateListIterator.h + ConstituentIterator.o: ConstituentIterator.h ActualIterator.h + Contour.o: Contour.h PointlistGate.h Gate.h ConstituentIterator.h + Contour.o: ActualIterator.h Interior.h InteriorRow.h + Cut.o: Cut.h Gate.h ConstituentIterator.h ActualIterator.h + Cut.o: SingleItemIterator.h + DeletedGate.o: DeletedGate.h FalseGate.h Gate.h ConstituentIterator.h + DeletedGate.o: ActualIterator.h + FalseGate.o: FalseGate.h Gate.h ConstituentIterator.h ActualIterator.h + FalseGate.o: SingleItemIterator.h + GammaBand.o: GammaBand.h Band.h PointlistGate.h Gate.h ConstituentIterator.h + GammaBand.o: ActualIterator.h + GammaContour.o: GammaContour.h Contour.h PointlistGate.h Gate.h + GammaContour.o: ConstituentIterator.h ActualIterator.h Interior.h + GammaContour.o: InteriorRow.h + GammaCut.o: GammaCut.h Cut.h Gate.h ConstituentIterator.h ActualIterator.h + GammaCut.o: SingleItemIterator.h + Gate.o: Gate.h ConstituentIterator.h ActualIterator.h + GateContainer.o: GateContainer.h + GateListIterator.o: GateListIterator.h + Interior.o: Interior.h InteriorRow.h + InteriorRow.o: InteriorRow.h + Not.o: Not.h GateContainer.h Gate.h ConstituentIterator.h ActualIterator.h + Not.o: SingleItemIterator.h + OrGate.o: OrGate.h CompoundGate.h Gate.h ConstituentIterator.h + OrGate.o: ActualIterator.h GateContainer.h + PointlistGate.o: PointlistGate.h Gate.h ConstituentIterator.h + PointlistGate.o: ActualIterator.h PointlistIterator.h + PointlistIterator.o: PointlistIterator.h + SingleItemIterator.o: SingleItemIterator.h + TrueGate.o: TrueGate.h Gate.h ConstituentIterator.h ActualIterator.h + TrueGate.o: SingleItemIterator.h Index: Gate.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/Gate.h,v retrieving revision 4.3 retrieving revision 4.4 diff -C2 -d -r4.3 -r4.4 *** Gate.h 2 Jan 2003 17:11:32 -0000 4.3 --- Gate.h 15 Apr 2003 19:15:44 -0000 4.4 *************** *** 344,348 **** //Operator== Equality Operator ! int operator== (const CGate& aCGate) { return ( --- 344,348 ---- //Operator== Equality Operator ! int operator== (const CGate& aCGate) const { return ( Index: GammaCut.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/GammaCut.h,v retrieving revision 4.2 retrieving revision 4.3 diff -C2 -d -r4.2 -r4.3 *** GammaCut.h 2 Jan 2003 17:11:32 -0000 4.2 --- GammaCut.h 15 Apr 2003 19:15:44 -0000 4.3 *************** *** 291,294 **** --- 291,302 ---- /////////////////////////////////////////////////////////////////// + /* + Change log: + $Log$ + Revision 4.3 2003/04/15 19:15:44 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + #ifndef __GAMMACUT_H // Required for current class #define __GAMMACUT_H *************** *** 297,317 **** #include "Cut.h" #endif ! class CGammaCut : public CCut { ! UInt_t m_nLow; // Low level of cut (inclusive) ! UInt_t m_nHigh; // High level of cut (inclusive) ! vector<string> m_vSpecs; // Vector of spectrum names to display gate on public: ! // Default Constructor ! CGammaCut (UInt_t am_nLow, UInt_t am_nHigh) : m_nLow (am_nLow), m_nHigh (am_nHigh), CCut(am_nLow, am_nHigh, 0) { ! vector<string> empty; ! m_vSpecs = empty; } --- 305,333 ---- #include "Cut.h" #endif ! /*! ! This class defines a cut or slice on gamma spectra. ! Gamma gates are rather ! weird spectcl entities. They are defined on a set of parameters ! and only have meaning when evaluated on gamma spectra. When ! evaluated on a gamma spectrum, a gamma cut is checked against all ! parameters on that spectrum. If a parameter makes the cut, ! the spectrum is incremented for all other parameters the ! spectrum is defined on. ! */ class CGammaCut : public CCut { ! Float_t m_nLow; //!< Low level of cut (inclusive) ! Float_t m_nHigh; //!< High level of cut (inclusive) ! vector<string> m_vSpecs; //!< Vector of spectrum names to display gate on public: ! //! Constructor ! CGammaCut (Float_t am_nLow, Float_t am_nHigh) : m_nLow (am_nLow), m_nHigh (am_nHigh), CCut(am_nLow, am_nHigh, 0) { ! // The default constructor of a vector yields an empty vector. } *************** *** 323,330 **** CCut(am_nLow, am_nHigh, 0) { } ! // Destructor ~CGammaCut () { } ! // Copy constructor CGammaCut (const CGammaCut& aCGammaCut) : CCut (aCGammaCut) { --- 339,346 ---- CCut(am_nLow, am_nHigh, 0) { } ! //! Destructor ~CGammaCut () { } ! //! Copy constructor CGammaCut (const CGammaCut& aCGammaCut) : CCut (aCGammaCut) { *************** *** 334,338 **** } ! // Assignment operator CGammaCut& operator= (const CGammaCut& aCGammaCut) { --- 350,354 ---- } ! //! Assignment operator CGammaCut& operator= (const CGammaCut& aCGammaCut) { *************** *** 346,362 **** } ! private: ! ! // Equality operator ! int operator== (const CGammaCut& aCGammaCut); public: // Get accessor functions ! UInt_t getLow() const { return m_nLow; } ! UInt_t getHigh() const { return m_nHigh; --- 362,376 ---- } ! //! Equality operator ! int operator== (const CGammaCut& aCGammaCut) const; public: // Get accessor functions ! Float_t getLow() const { return m_nLow; } ! Float_t getHigh() const { return m_nHigh; *************** *** 370,379 **** protected: // Set mutator functions ! void setm_nLow (UInt_t am_nLow) { m_nLow = am_nLow; } ! void setm_nHigh (UInt_t am_nHigh) { m_nHigh = am_nHigh; --- 384,393 ---- protected: // Set mutator functions ! void setLow (Float_t am_nLow) { m_nLow = am_nLow; } ! void setHigh (Float_t am_nHigh) { m_nHigh = am_nHigh; *************** *** 395,396 **** --- 409,414 ---- #endif + + + + Index: GammaCut.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/GammaCut.cpp,v retrieving revision 4.3 retrieving revision 4.4 diff -C2 -d -r4.3 -r4.4 *** GammaCut.cpp 2 Jan 2003 17:11:32 -0000 4.3 --- GammaCut.cpp 15 Apr 2003 19:15:44 -0000 4.4 *************** *** 294,299 **** --- 294,326 ---- #include <stdio.h> + /* + Change log: + $Log$ + Revision 4.4 2003/04/15 19:15:44 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + // Functions for class CGammaCut + /*! + Equality comparison operator. Gamma gates compare equal if the + base class comparison gives true and all constituents are the same + on both sides of the ==. + \param <TT>rhs (const CGammaCut& [in])</TT> + The gate to which this will be compared. + \retval + - kfTRUE if the gates are equal. + - kfFALSE if the gates are unequal. + */ + int + CGammaCut::operator==(const CGammaCut& rhs) const + { + return (CGate::operator==(rhs) && + (m_nLow == rhs.m_nLow) && + (m_nHigh == rhs.m_nHigh) && + (m_vSpecs== rhs.m_vSpecs)); + } + ///////////////////////////////////////////////////////////////////// // *************** *** 302,306 **** // Operation Type: // Construction ! // Purpose: // Returns a pointer to a gate which is a // copy of the current gate. --- 329,333 ---- // Operation Type: // Construction ! // Purpose // Returns a pointer to a gate which is a // copy of the current gate. *************** *** 328,332 **** if (rIterator != e) { char Text[100]; ! sprintf(Text, "%d %d", m_nLow, m_nHigh); return std::string(Text); } --- 355,359 ---- if (rIterator != e) { char Text[100]; ! sprintf(Text, "%f %f", m_nLow, m_nHigh); return std::string(Text); } *************** *** 369,373 **** else { if(rEvent[Par].isValid()) { ! UInt_t nPoint = rEvent[Par]; return((nPoint >= getLow()) && (nPoint <= getHigh())); } --- 396,400 ---- else { if(rEvent[Par].isValid()) { ! Float_t nPoint = rEvent[Par]; return((nPoint >= getLow()) && (nPoint <= getHigh())); } Index: GammaContour.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/GammaContour.h,v retrieving revision 4.3 retrieving revision 4.4 diff -C2 -d -r4.3 -r4.4 *** GammaContour.h 6 Feb 2003 18:18:16 -0000 4.3 --- GammaContour.h 15 Apr 2003 19:15:45 -0000 4.4 *************** *** 318,323 **** // Default constructor ! CGammaContour (const vector<CPoint>& rPoints); ! CGammaContour (const vector<CPoint>& rPoints, const vector<string>& rSpecs); --- 318,323 ---- // Default constructor ! CGammaContour (const vector<FPoint>& rPoints); ! CGammaContour (const vector<FPoint>& rPoints, const vector<string>& rSpecs); Index: GammaContour.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/GammaContour.cpp,v retrieving revision 4.4 retrieving revision 4.5 diff -C2 -d -r4.4 -r4.5 *** GammaContour.cpp 12 Feb 2003 20:13:22 -0000 4.4 --- GammaContour.cpp 15 Apr 2003 19:15:45 -0000 4.5 *************** *** 318,322 **** // // Function: ! // CGammaContour(const vector<CPoint>& rPoints) // Operation Type: // construction --- 318,322 ---- // // Function: ! // CGammaContour(const vector<FPoint>& rPoints) // Operation Type: // construction *************** *** 324,328 **** // GenerateInterior() is part of the base class // ! CGammaContour::CGammaContour(const vector<CPoint>& rPoints) : CContour(0,0, rPoints) { --- 324,328 ---- // GenerateInterior() is part of the base class // ! CGammaContour::CGammaContour(const vector<FPoint>& rPoints) : CContour(0,0, rPoints) { *************** *** 335,339 **** // // Function: ! // CGammaContour(const vector<CPoint>& rPoints) // Operation Type: // construction --- 335,339 ---- // // Function: ! // CGammaContour(const vector<FPoint>& rPoints) // Operation Type: // construction *************** *** 341,345 **** // GenerateInterior() is part of the base class // ! CGammaContour::CGammaContour(const vector<CPoint>& rPoints, const vector<string>& rSpecs) : CContour(0,0, rPoints) --- 341,345 ---- // GenerateInterior() is part of the base class // ! CGammaContour::CGammaContour(const vector<FPoint>& rPoints, const vector<string>& rSpecs) : CContour(0,0, rPoints) *************** *** 390,400 **** CGammaContour::inGate(CEvent& rEvent, const vector<UInt_t>& Params) { ! // The parameters should have been validated by this point ! UInt_t nx = Params[0]; ! UInt_t ny = Params[1]; if((nx < rEvent.size()) && (ny < rEvent.size())) { if(rEvent[nx].isValid() && rEvent[ny].isValid()) { ! Int_t x = (Int_t)rEvent[nx] - getLowerLeft().X(); ! Int_t y = (Int_t)rEvent[ny] - getLowerLeft().Y(); if((x < 0) || (y < 0)) return kfFALSE; --- 390,400 ---- CGammaContour::inGate(CEvent& rEvent, const vector<UInt_t>& Params) { ! ! Float_t nx = Params[0]; ! Float_t ny = Params[1]; if((nx < rEvent.size()) && (ny < rEvent.size())) { if(rEvent[nx].isValid() && rEvent[ny].isValid()) { ! Float_t x = (Int_t)rEvent[nx] - getLowerLeft().X(); ! Float_t y = (Int_t)rEvent[ny] - getLowerLeft().Y(); if((x < 0) || (y < 0)) return kfFALSE; Index: GammaBand.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/GammaBand.h,v retrieving revision 4.3 retrieving revision 4.4 diff -C2 -d -r4.3 -r4.4 *** GammaBand.h 10 Feb 2003 18:07:58 -0000 4.3 --- GammaBand.h 15 Apr 2003 19:15:45 -0000 4.4 *************** *** 291,294 **** --- 291,303 ---- ///////////////////////////////////////////////////////////////// + /* + Change Log: + $Log$ + Revision 4.4 2003/04/15 19:15:45 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + + #ifndef __GAMMABAND_H // Required for the current class #define __GAMMABAND_H *************** *** 313,328 **** public: ! // Default Constructor ! CGammaBand (const vector<CPoint>& rPoints); ! CGammaBand (const vector<CPoint>& rPoints, const vector<string> rSpecs); ! CGammaBand (UInt_t nPts, CPoint* pPoints); ! CGammaBand (UInt_t nPts, UInt_t* pX, UInt_t* pY); ! // Destructor ~CGammaBand () { } ! // Copy constructor CGammaBand (const CGammaBand& aCGammaBand) : CBand (aCGammaBand) { --- 322,337 ---- public: ! //! Default Constructor ! CGammaBand (const vector<FPoint>& rPoints); ! CGammaBand (const vector<FPoint>& rPoints, const vector<string> rSpecs); ! CGammaBand (UInt_t nPts, FPoint* pPoints); ! CGammaBand (UInt_t nPts, Float_t* pX, Float_t* pY); ! //! Destructor ~CGammaBand () { } ! //! Copy constructor CGammaBand (const CGammaBand& aCGammaBand) : CBand (aCGammaBand) { *************** *** 330,334 **** } ! // Assignment operator CGammaBand& operator= (const CGammaBand& aCGammaBand) { --- 339,343 ---- } ! //! Assignment operator CGammaBand& operator= (const CGammaBand& aCGammaBand) { *************** *** 340,347 **** } ! private: ! ! // Equality operator ! int operator== (const CGammaBand& aCGammaBand); public: // Get accessor functions --- 349,354 ---- } ! //! Equality comparison. ! int operator== (const CGammaBand& aCGammaBand) const; public: // Get accessor functions Index: GammaBand.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/GammaBand.cpp,v retrieving revision 4.3 retrieving revision 4.4 diff -C2 -d -r4.3 -r4.4 *** GammaBand.cpp 10 Feb 2003 18:07:58 -0000 4.3 --- GammaBand.cpp 15 Apr 2003 19:15:45 -0000 4.4 *************** *** 301,310 **** #include <iostream.h> // Functions for class CGammaBand //////////////////////////////////////////////////////////////////////// // // Function: ! // CGammaBand (const vector<CPoint>& rPoints) // Operation Type: // Constructor --- 301,329 ---- #include <iostream.h> + /* + Change Log: + $Log$ + Revision 4.4 2003/04/15 19:15:45 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + // Functions for class CGammaBand + /*! + Equality comparison. Two gamma bands are equal if their underlying + bands are equal and their spectrum list are equal: + + */ + int + CGammaBand::operator==(const CGammaBand& rhs) const + { + return (CBand::operator==(rhs) && + (m_vSpecs == rhs.m_vSpecs)); + } //////////////////////////////////////////////////////////////////////// // // Function: ! // CGammaBand (const vector<FPoint>& rPoints) // Operation Type: // Constructor *************** *** 312,316 **** // Function CreateLimits() is defined in the base class // ! CGammaBand::CGammaBand(const vector<CPoint>& rPoints) : CBand(0, 0, rPoints) { --- 331,335 ---- // Function CreateLimits() is defined in the base class // ! CGammaBand::CGammaBand(const vector<FPoint>& rPoints) : CBand(0, 0, rPoints) { *************** *** 323,337 **** // // Function: ! // CGammaBand (const vector<CPoint>& rPoints, // const vector<UInt_t> rIds) // Operation Type: // Constructor // ! CGammaBand::CGammaBand(const vector<CPoint>& rPoints, const vector<string> rSpecs) : CBand(0, 0, rPoints) { m_vSpecs = rSpecs; ! // CreateLimits(); } --- 342,356 ---- // // Function: ! // CGammaBand (const vector<FPoint>& rPoints, // const vector<UInt_t> rIds) // Operation Type: // Constructor // ! CGammaBand::CGammaBand(const vector<FPoint>& rPoints, const vector<string> rSpecs) : CBand(0, 0, rPoints) { m_vSpecs = rSpecs; ! } *************** *** 339,351 **** // // Function: ! // CGammaBand (UInt_t nPts, CPoint* pPoints) // Operation Type: // Constructor // ! CGammaBand::CGammaBand(UInt_t nPts, CPoint* pPoints) : CBand(0, 0, nPts, pPoints) { ! vector<string> empty; ! m_vSpecs = empty; } --- 358,369 ---- // // Function: ! // CGammaBand (UInt_t nPts, FPoint* pPoints) // Operation Type: // Constructor // ! CGammaBand::CGammaBand(UInt_t nPts, FPoint* pPoints) : CBand(0, 0, nPts, pPoints) { ! } *************** *** 395,408 **** UInt_t xPar = Params[0]; UInt_t yPar = Params[1]; ! if(xPar >= rEvent.size() || yPar >= rEvent.size()) return kfFALSE; else { ! if(rEvent[xPar].isValid() && rEvent[yPar].isValid()) { ! UInt_t x = rEvent[xPar]; ! UInt_t y = rEvent[yPar]; ! return Interior(x,y); ! } ! else ! return kfFALSE; } } --- 413,426 ---- UInt_t xPar = Params[0]; UInt_t yPar = Params[1]; ! if(xPar >= rEvent.size() || yPar >= rEvent.size()) { return kfFALSE; + } + if(rEvent[xPar].isValid() && rEvent[yPar].isValid()) { + Float_t x = rEvent[xPar]; + Float_t y = rEvent[yPar]; + return Interior(x,y); + } else { ! return kfFALSE; } } Index: Cut.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/Cut.h,v retrieving revision 4.3 retrieving revision 4.4 diff -C2 -d -r4.3 -r4.4 *** Cut.h 2 Jan 2003 17:11:32 -0000 4.3 --- Cut.h 15 Apr 2003 19:15:45 -0000 4.4 *************** *** 291,294 **** --- 291,302 ---- ///////////////////////////////////////////////////////////// + /* + Change Log: + $Log$ + Revision 4.4 2003/04/15 19:15:45 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + #ifndef __CUT_H //Required for current class #define __CUT_H *************** *** 302,353 **** #define __STRING #endif ! class CCut : public CGate { ! UInt_t m_nLow; // low level of cut (inclusive) ! UInt_t m_nHigh; // High level of cut (inclusive) ! UInt_t m_nId; // Id of parameter to cut. public: - //Default constructor ! CCut ( UInt_t am_nLow, UInt_t am_nHigh, UInt_t am_nId ) : m_nLow (am_nLow), m_nHigh (am_nHigh), m_nId (am_nId) { } ! ~ CCut ( ) { } //Destructor ! //Copy constructor CCut (const CCut& aCCut ) : CGate (aCCut) { ! m_nLow = aCCut.m_nLow; m_nHigh = aCCut.m_nHigh; ! m_nId = aCCut.m_nId; } ! //Operator= Assignment Operator ! CCut& operator= (const CCut& aCCut) { if (this == &aCCut) return *this; CGate::operator= (aCCut); ! m_nLow = aCCut.m_nLow; m_nHigh = aCCut.m_nHigh; ! m_nId = aCCut.m_nId; return *this; } ! //Operator== Equality Operator ! private: ! int operator== (const CCut& aCCut); ! public: // Selectors public: //Get accessor function for attribute ! UInt_t getLow() const { return m_nLow; --- 310,366 ---- #define __STRING #endif ! /*! Encapsulates a cut on a parameter. ! The cut is described by a high and low limit ! in parameter space. In this implementation the cut is expressed ! as a pair of floating point limits. ! */ class CCut : public CGate { ! Float_t m_nLow; //!< low level of cut (inclusive) ! Float_t m_nHigh; //!< High level of cut (inclusive) ! UInt_t m_nId; //!< Id of parameter to cut. public: ! //! Constructor (Requires parameterization). ! ! CCut ( Float_t am_nLow, Float_t am_nHigh, UInt_t am_nId ) : m_nLow (am_nLow), m_nHigh (am_nHigh), m_nId (am_nId) { } ! ~ CCut ( ) { } //!< Destructor ! //! Copy constructor CCut (const CCut& aCCut ) : CGate (aCCut) { ! m_nLow = aCCut.m_nLow; m_nHigh = aCCut.m_nHigh; ! m_nId = aCCut.m_nId; } ! //! Operator= Assignment Operator ! CCut& operator= (const CCut& aCCut) { if (this == &aCCut) return *this; CGate::operator= (aCCut); ! m_nLow = aCCut.m_nLow; m_nHigh = aCCut.m_nHigh; ! m_nId = aCCut.m_nId; return *this; } ! //!< Operator== Equality Operator ! ! int operator== (const CCut& aCCut) const; ! // Selectors public: //Get accessor function for attribute ! Float_t getLow() const { return m_nLow; *************** *** 355,359 **** //Get accessor function for attribute ! UInt_t getHigh() const { return m_nHigh; --- 368,372 ---- //Get accessor function for attribute ! Float_t getHigh() const { return m_nHigh; *************** *** 365,375 **** return m_nId; } ! virtual vector<string> getSpecs() const { } // Mutators. //Set accessor function for attribute protected: ! void setm_nLow (UInt_t am_nLow) { m_nLow = am_nLow; --- 378,392 ---- return m_nId; } + //!< Return involved spectra (for compatibility with gamma gates. ! virtual vector<string> getSpecs() const { ! vector<string> empty; ! return empty; // Must return an empty vector. ! } // Mutators. //Set accessor function for attribute protected: ! void setLow (Float_t am_nLow) { m_nLow = am_nLow; *************** *** 377,381 **** //Set accessor function for attribute ! void setm_nHigh (UInt_t am_nHigh) { m_nHigh = am_nHigh; --- 394,398 ---- //Set accessor function for attribute ! void setHigh (Float_t am_nHigh) { m_nHigh = am_nHigh; *************** *** 383,387 **** //Set accessor function for attribute ! void setm_nId (UInt_t am_nId) { m_nId = am_nId; --- 400,404 ---- //Set accessor function for attribute ! void setId (UInt_t am_nId) { m_nId = am_nId; Index: Cut.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/Cut.cpp,v retrieving revision 4.6 retrieving revision 4.7 diff -C2 -d -r4.6 -r4.7 *** Cut.cpp 2 Jan 2003 17:11:32 -0000 4.6 --- Cut.cpp 15 Apr 2003 19:15:45 -0000 4.7 *************** *** 292,295 **** --- 292,303 ---- //////////////////////////.cpp file///////////////////////////////////////////////////// + /* + Change Log: + $Log$ + Revision 4.7 2003/04/15 19:15:45 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + // // Header Files: *************** *** 303,306 **** --- 311,340 ---- // Functions for class CCut + /*! + Equality comparison operator. This object is equal to the rhs + iff the base class operator== is true and all member items + are equal + */ + int + CCut::operator==(const CCut& aCut) const + { + return (CGate::operator==(aCut) & + (m_nLow == aCut.m_nLow) & + (m_nHigh == aCut.m_nHigh) & + (m_nId == aCut.m_nId)); + } + // + /*! + Check the gate for an event. The event makes the gate true + iff the parameter associated with the event lies inside the + limits. No scaling is done, as the gate end points are + considered to be in parameter space. + \param <TT>rEvent (CEvent& [in]) </TT> + The event to check. The parameter to check is in + m_nId. + \retval Bool_t + - kfTRUE if the gate was made. + - kfFALSE if not. + */ Bool_t CCut::operator()(CEvent& rEvent) *************** *** 347,351 **** else { if(rEvent[id].isValid()) {; ! UInt_t nPoint = rEvent[id]; return((nPoint >= getLow()) && (nPoint <= getHigh())); } --- 381,385 ---- else { if(rEvent[id].isValid()) {; ! Float_t nPoint = rEvent[id]; return((nPoint >= getLow()) && (nPoint <= getHigh())); } *************** *** 441,445 **** if((rIterator != e)) { char Text[100]; ! sprintf(Text, "%d %d %d", m_nId, m_nLow, m_nHigh); return std::string(Text); } --- 475,479 ---- if((rIterator != e)) { char Text[100]; ! sprintf(Text, "%d %f %f", m_nId, m_nLow, m_nHigh); return std::string(Text); } Index: Contour.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/Contour.h,v retrieving revision 4.5 retrieving revision 4.6 diff -C2 -d -r4.5 -r4.6 *** Contour.h 10 Feb 2003 17:54:18 -0000 4.5 --- Contour.h 15 Apr 2003 19:15:45 -0000 4.6 *************** *** 291,294 **** --- 291,303 ---- ///////////////////////////////////////////////////////////// + /* + Change Log + $Log$ + Revision 4.6 2003/04/15 19:15:45 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + + #ifndef __CONTOUR_H //Required for current class #define __CONTOUR_H *************** *** 325,330 **** class CContour : public CPointListGate { ! CPoint m_LowerLeft; //!< Lower left corner of gate. ! CPoint m_UpperRight; //!< Upper right corner of gate. // mutable CInterior m_Interior; // An interior specification. --- 334,339 ---- class CContour : public CPointListGate { ! FPoint m_LowerLeft; //!< Lower left corner of gate. ! FPoint m_UpperRight; //!< Upper right corner of gate. // mutable CInterior m_Interior; // An interior specification. *************** *** 333,346 **** CContour (UInt_t nXId, UInt_t nYId, ! const vector<CPoint>& Points); CContour (UInt_t nXId, UInt_t NYId, UInt_t nPts, ! UInt_t *xCoords, UInt_t *yCoords); CContour (UInt_t nXId, UInt_t NYId, UInt_t nPts, ! CPoint* pPonts); ~CContour ( ) { } //Destructor //Copy constructor ! CContour (const CContour& aCContour ) : CPointListGate (aCContour) { m_LowerLeft = aCContour.m_LowerLeft; --- 342,356 ---- CContour (UInt_t nXId, UInt_t nYId, ! const vector<FPoint>& Points); CContour (UInt_t nXId, UInt_t NYId, UInt_t nPts, ! Float_t *xCoords, Float_t *yCoords); CContour (UInt_t nXId, UInt_t NYId, UInt_t nPts, ! FPoint* pPonts); ~CContour ( ) { } //Destructor //Copy constructor ! CContour (const CContour& aCContour ) : ! CPointListGate (aCContour) { m_LowerLeft = aCContour.m_LowerLeft; *************** *** 365,377 **** //Operator== Equality Operator ! // Gates have no concept of equality. ! private: ! int operator== (const CContour& aCContour); ! public: // // Selectors: // //Get accessor function for attribute ! CPoint getLowerLeft() const { return m_LowerLeft; --- 375,387 ---- //Operator== Equality Operator ! ! ! int operator== (const CContour& aCContour) const; ! // // Selectors: // //Get accessor function for attribute ! FPoint getLowerLeft() const { return m_LowerLeft; *************** *** 379,392 **** //Get accessor function for attribute ! CPoint getUpperRight() const { return m_UpperRight; } - //Get accessor function for attribute - // CInterior& getInterior() const - // { - // return m_Interior; - // } // Mutators: --- 389,397 ---- //Get accessor function for attribute ! FPoint getUpperRight() const { return m_UpperRight; } // Mutators: *************** *** 394,398 **** protected: //Set accessor function for attribute ! void setLowerLeft (const CPoint& am_Lower) { m_LowerLeft = am_Lower; --- 399,403 ---- protected: //Set accessor function for attribute ! void setLowerLeft (const FPoint& am_Lower) { m_LowerLeft = am_Lower; *************** *** 400,413 **** //Set accessor function for attribute ! void setUpperRight (const CPoint& am_Upper) { m_UpperRight = am_Upper; } - //Set accessor function for attribute - // void setInterior (const CInterior& am_aInterior) - // { - // m_Interior = am_aInterior; - /// } // Functions on the object: --- 405,413 ---- //Set accessor function for attribute ! void setUpperRight (const FPoint& am_Upper) { m_UpperRight = am_Upper; } // Functions on the object: *************** *** 425,429 **** protected: virtual void GenerateInterior(); ! Bool_t Inside(int x, int y); }; --- 425,429 ---- protected: virtual void GenerateInterior(); ! Bool_t Inside(Float_t x, Float_t y); }; Index: Contour.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/Contour.cpp,v retrieving revision 4.6 retrieving revision 4.7 diff -C2 -d -r4.6 -r4.7 *** Contour.cpp 10 Feb 2003 17:54:15 -0000 4.6 --- Contour.cpp 15 Apr 2003 19:15:45 -0000 4.7 *************** *** 302,306 **** class YCompare { public: ! int operator()(const CPoint& p1, const CPoint& p2) { return (p1.Y() < p2.Y()); } --- 302,306 ---- class YCompare { public: ! int operator()(const FPoint& p1, const FPoint& p2) { return (p1.Y() < p2.Y()); } *************** *** 308,312 **** class XCompare { public: ! int operator()(const CPoint& p1, CPoint& p2) { return (p1.X() < p2.X()); } --- 308,312 ---- class XCompare { public: ! int operator()(const FPoint& p1, FPoint& p2) { return (p1.X() < p2.X()); } *************** *** 318,363 **** // functions for class CContour ! ////////////////////////////////////////////////////////////////////////// ! // ! // Function: ! // CContour(UInt_t nXId, UInt_t nYId, ! // vector<CPoint>& Points) ! // Operation Type: ! // Constructor. ! // ! CContour::CContour(UInt_t nXId, UInt_t nYId, const vector<CPoint>& Points) : CPointListGate(nXId, nYId, Points) { GenerateInterior(); } ! ////////////////////////////////////////////////////////////////////////// ! // ! // Function: ! // CContour (UInt_t nXId, UInt_t NYId, UInt_t nPts, ! // UInt_t *xCoords, UInt_t *yCoords) ! // Operation type: ! // Construction: ! // CContour::CContour (UInt_t nXId, UInt_t nYId, UInt_t nPts, ! UInt_t *xCoords, UInt_t *yCoords) : CPointListGate(nXId, nYId, nPts, xCoords, yCoords) { GenerateInterior(); } ! ////////////////////////////////////////////////////////////////////////// ! // ! // Function: ! // CContour(UInt_t nXId, UInt_t NYId, UInt_t nPts, ! // CPOint* pPonts) ! // Operation Type: ! // Constructor ! // CContour::CContour (UInt_t nXId, UInt_t nYId, UInt_t nPts, ! CPoint* pPoints) : CPointListGate(nXId, nYId, nPts, pPoints) { GenerateInterior(); } ! Bool_t CContour::operator()(CEvent& rEvent) --- 318,404 ---- // functions for class CContour ! /*! ! Equality comparison. ! */ ! int ! CContour::operator==(const CContour& rhs) const ! { ! return (CPointListGate::operator==(rhs) && ! (m_LowerLeft == rhs.m_LowerLeft) && ! (m_UpperRight== rhs.m_UpperRight)); ! } ! ! /*! ! Construct a contour from an array of floating point points. ! The points define a polygon (last point connected to first ! point). ! ! \param <TT>nXId (UInt_t [in]): </TT> ! Id of the parameter on the x axis of the gate. ! \param <TT>nYId (UInt_t [in]): </TT> ! Id of the parameter on the y axis of the gate. ! \param <TT>Points (vector<FPoint>& [in]): ! Vector of points that define the exterior boundary of the gate. ! ! ! ! */ ! CContour::CContour(UInt_t nXId, UInt_t nYId, ! const vector<FPoint>& Points) : CPointListGate(nXId, nYId, Points) { GenerateInterior(); } ! /*! ! Overloaded contour contructor: ! ! \copydoc CContour(UInt_t,UInt_t,const vector<FPoint>&) ! \param <TT>nPts [UInt_t [in]):</TT> ! Number of points that define the boundary. The ! xCoords and yCoords arrays must have at least this ! many points. ! \param <TT>xCoords [UFloat_t* [in]):</TT> ! Pointer to the array of xcoordinates of the boundary ! points. ! \param <TT>yCoords (UFloat_t* [in]):</TT> ! Pointer to the array of y coordinates of the boundary ! points ! ! Only the first nPts points in the xCoords and yCoords arrays ! are used to construct the contour. ! */ CContour::CContour (UInt_t nXId, UInt_t nYId, UInt_t nPts, ! Float_t *xCoords, Float_t *yCoords) : CPointListGate(nXId, nYId, nPts, xCoords, yCoords) { GenerateInterior(); } ! /*! ! Overloaded contour constructor: ! ! \copydoc CContour(UInt_t,UInt_t,const vector<FPoint>&) ! \param <TT>nPts (UInt_t [in]): ! Number of points that define the boundary. ! \param <TT>pPoints (FPoint* [in]):</TT> ! A pointer to an array of FPoint objects. Each FPoint ! defines a boundary point for the contour. ! */ CContour::CContour (UInt_t nXId, UInt_t nYId, UInt_t nPts, ! FPoint* pPoints) : CPointListGate(nXId, nYId, nPts, pPoints) { GenerateInterior(); } ! /*! ! Evaluate the contour. Note that the gate has a cached ! value associated with it. Once evaluated, it will stubbornly ! return the same value without rechecking the gate until ! the cache is cleare via a call to: CGate::Reset(). ! \param <TT>rEvent (CEvent& [in]):</TT> ! The event for which the gate is evaluated. ! \retval Bool_t ! - kfTRUE if the gate was made. ! - kfFALSE if the gate was not made. ! */ Bool_t CContour::operator()(CEvent& rEvent) *************** *** 394,398 **** return inGate(rEvent); } ! // Parameterless inGate: /*! Determines if the event is inside the gate. This is done by countingin two --- 435,439 ---- return inGate(rEvent); } ! /*! Determines if the event is inside the gate. This is done by countingin two *************** *** 411,414 **** --- 452,461 ---- The gate's x/y id's determine which elemetns of the event are the x/y point coordinates. + + \retval Bool_t + - kfTRUE if gate's parameters for rEvent are inside the + contour as described above. + - kfFALSE if the gate's parameters for rEvent are outside + the contour. */ *************** *** 420,425 **** if((nx < rEvent.size()) && (ny < rEvent.size())) { if(rEvent[nx].isValid() && rEvent[ny].isValid()) { ! Int_t x = rEvent[nx]; ! Int_t y = rEvent[ny]; return Inside(x,y); } --- 467,472 ---- if((nx < rEvent.size()) && (ny < rEvent.size())) { if(rEvent[nx].isValid() && rEvent[ny].isValid()) { ! Float_t x = rEvent[nx]; ! Float_t y = rEvent[ny]; return Inside(x,y); } *************** *** 435,439 **** */ Bool_t ! CContour::Inside(int x, int y) { if((x < m_LowerLeft.X()) || (x > m_UpperRight.X()) || --- 482,486 ---- */ Bool_t ! CContour::Inside(Float_t x, Float_t y) { if((x < m_LowerLeft.X()) || (x > m_UpperRight.X()) || *************** *** 444,449 **** int nSegments = Size(); assert(nSegments > 2); // Required to make a contour. ! vector<CPoint>::iterator first = getBegin(); ! vector<CPoint>::iterator second= first; second++; int nCrossings = 0; for(int seg = 0; seg < nSegments; seg++) { --- 491,496 ---- int nSegments = Size(); assert(nSegments > 2); // Required to make a contour. ! vector<FPoint>::iterator first = getBegin(); ! vector<FPoint>::iterator second= first; second++; int nCrossings = 0; for(int seg = 0; seg < nSegments; seg++) { *************** *** 515,534 **** // corner members. // ! vector<CPoint> Polygon = getPoints(); ! vector<CPoint>::iterator p; YCompare yc; XCompare xc; p = min_element(Polygon.begin(), Polygon.end(), yc); ! UInt_t yl = (*p).Y(); p = max_element(Polygon.begin(), Polygon.end(), yc); ! UInt_t yh = (*p).Y(); p = min_element(Polygon.begin(), Polygon.end(), xc); ! UInt_t xl = (*p).X(); p = max_element(Polygon.begin(), Polygon.end(), xc); ! UInt_t xh = (*p).X(); ! m_LowerLeft = CPoint(xl, yl); ! m_UpperRight = CPoint(xh, yh); } --- 562,581 ---- // corner members. // ! vector<FPoint> Polygon = getPoints(); ! vector<FPoint>::iterator p; YCompare yc; XCompare xc; p = min_element(Polygon.begin(), Polygon.end(), yc); ! Float_t yl = (*p).Y(); p = max_element(Polygon.begin(), Polygon.end(), yc); ! Float_t yh = (*p).Y(); p = min_element(Polygon.begin(), Polygon.end(), xc); ! Float_t xl = (*p).X(); p = max_element(Polygon.begin(), Polygon.end(), xc); ! Float_t xh = (*p).X(); ! m_LowerLeft = FPoint(xl, yl); ! m_UpperRight = FPoint(xh, yh); } Index: C2Bands.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/C2Bands.h,v retrieving revision 4.1 retrieving revision 4.2 diff -C2 -d -r4.1 -r4.2 *** C2Bands.h 2 Jan 2003 17:11:32 -0000 4.1 --- C2Bands.h 15 Apr 2003 19:15:45 -0000 4.2 *************** *** 312,315 **** --- 312,323 ---- // + /* + Change Log + $Log$ + Revision 4.2 2003/04/15 19:15:45 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + #ifndef __2BANDS_H //Required for current class #define __2BANDS_H *************** *** 344,349 **** C2Bands (UInt_t nXId, UInt_t nYId, ! vector<CPoint>& rLowBand, ! vector<CPoint>& rHiBand); virtual ~ C2Bands ( ) { } //Destructor --- 352,357 ---- C2Bands (UInt_t nXId, UInt_t nYId, ! vector<FPoint>& rLowBand, ! vector<FPoint>& rHiBand); virtual ~ C2Bands ( ) { } //Destructor *************** *** 384,389 **** protected: ! std::vector<CPoint> MarshallPoints(vector<CPoint>& rLow, ! vector<CPoint>& rHi); }; --- 392,397 ---- protected: ! std::vector<FPoint> MarshallPoints(vector<FPoint>& rLow, ! vector<FPoint>& rHi); }; Index: C2Bands.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/C2Bands.cpp,v retrieving revision 4.1 retrieving revision 4.2 diff -C2 -d -r4.1 -r4.2 *** C2Bands.cpp 2 Jan 2003 17:11:32 -0000 4.1 --- C2Bands.cpp 15 Apr 2003 19:15:46 -0000 4.2 *************** *** 310,313 **** --- 310,321 ---- // //////////////////////////.cpp file///////////////////////////////////////////////////// + /* + Change Log + $Log$ + Revision 4.2 2003/04/15 19:15:46 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + #include "C2Bands.h" #include <algorithm> *************** *** 323,328 **** // Constructor. C2Bands:: C2Bands (UInt_t nXId, UInt_t nYId, ! vector<CPoint>& rLowBand, ! vector<CPoint>& rHiBand) : CContour(nXId, nYId, MarshallPoints(rLowBand, rHiBand)) --- 331,336 ---- // Constructor. C2Bands:: C2Bands (UInt_t nXId, UInt_t nYId, ! vector<FPoint>& rLowBand, ! vector<FPoint>& rHiBand) : CContour(nXId, nYId, MarshallPoints(rLowBand, rHiBand)) *************** *** 350,357 **** // Utility. // ! std::vector<CPoint> ! C2Bands::MarshallPoints(vector<CPoint>& rLow, vector<CPoint>& rHi) { ! std::vector<CPoint> MarshalledPoints; // First reverse the points if needed. --- 358,365 ---- // Utility. // ! std::vector<FPoint> ! C2Bands::MarshallPoints(vector<FPoint>& rLow, vector<FPoint>& rHi) { ! std::vector<FPoint> MarshalledPoints; // First reverse the points if needed. *************** *** 378,384 **** // Add the points in the lower band right to left. ! std::vector<CPoint>::reverse_iterator p = rLow.rbegin(); for(; p != rLow.rend(); p++) { ! CPoint pt = *p; MarshalledPoints.push_back(pt); } --- 386,392 ---- // Add the points in the lower band right to left. ! std::vector<FPoint>::reverse_iterator p = rLow.rbegin(); for(; p != rLow.rend(); p++) { ! FPoint pt = *p; MarshalledPoints.push_back(pt); } Index: Band.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/Band.h,v retrieving revision 4.5 retrieving revision 4.6 diff -C2 -d -r4.5 -r4.6 *** Band.h 10 Feb 2003 18:07:32 -0000 4.5 --- Band.h 15 Apr 2003 19:15:46 -0000 4.6 *************** *** 290,293 **** --- 290,300 ---- // ///////////////////////////////////////////////////////////// + /* + Change Log: + $Log$ + Revision 4.6 2003/04/15 19:15:46 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ #ifndef __BAND_H //Required for current class *************** *** 311,329 **** #define __STL_VECTOR #endif ! class CBand : public CPointListGate { private: ! CPoint m_LeftLimit; // Point at left most limit. ! CPoint m_RightLimit; // Point at right most limit.o public: //Default constructor CBand (UInt_t nXid, UInt_t nYid, ! const vector<CPoint>& points); CBand (UInt_t nXid, UInt_t nYid, ! UInt_t nPts, CPoint* pPoints); CBand (UInt_t nXid, UInt_t nYid, ! UInt_t nPts, UInt_t* pX, UInt_t* pY); virtual ~CBand ( ) { } --- 318,353 ---- #define __STL_VECTOR #endif ! ! /*! ! \par ! Defines a band gate. A band is a polyline in parameter space. ! All points \em below the polyline are considered to be in the gate ! The left most endpoint of the gate is assumed to represent a ! line extending to negative infinity as is the right most point. ! ! \par ! The algorithm used to check the gates is to extend a horizontal ! line from the point to check to x = negative infinity and to ! count the number of boundaries crossed by that line. An ! even number indicates outsidedness, an odd number insidedness. ! This algorithm works with bands that have sawtooths and other ! pathological shapes... including loops in a consistent and ! intuitive way. Note that 0 is even. ! ! */ class CBand : public CPointListGate { private: ! FPoint m_LeftLimit; //!< Point at left most limit. ! FPoint m_RightLimit; //!< Point at right most limit. public: //Default constructor CBand (UInt_t nXid, UInt_t nYid, ! const vector<FPoint>& points); CBand (UInt_t nXid, UInt_t nYid, ! UInt_t nPts, FPoint* pPoints); CBand (UInt_t nXid, UInt_t nYid, ! UInt_t nPts, Float_t* pX, Float_t* pY); virtual ~CBand ( ) { } *************** *** 353,359 **** // Operator== Equality Operator // Gates have no equality operator. ! private: ! int operator== (const CBand& aCBand); ! public: --- 377,382 ---- // Operator== Equality Operator // Gates have no equality operator. ! ! int operator== (const CBand& aCBand) const; *************** *** 371,375 **** protected: void GetLRLimits(); ! Bool_t Interior(int x, int y); }; --- 394,398 ---- protected: void GetLRLimits(); ! Bool_t Interior(Float_t x, Float_t y); }; Index: Band.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Gates/Band.cpp,v retrieving revision 4.6 retrieving revision 4.7 diff -C2 -d -r4.6 -r4.7 *** Band.cpp 10 Feb 2003 18:07:32 -0000 4.6 --- Band.cpp 15 Apr 2003 19:15:46 -0000 4.7 *************** *** 305,308 **** --- 305,316 ---- #include <iostream.h> + /* + Change log: + $Log$ + Revision 4.7 2003/04/15 19:15:46 ron-fox + To support real valued parameters, primitive gates must be internally stored as real valued coordinate pairs. + + */ + // X ordering comparison for CPoints: // *************** *** 310,314 **** class Xorder { public: ! int operator()(const CPoint& p1,const CPoint& p2) { return (p1.X() < p2.X()); --- 318,322 ---- class Xorder { public: ! int operator()(const FPoint& p1,const FPoint& p2) { return (p1.X() < p2.X()); *************** *** 318,330 **** // Functions for class CBand ! ////////////////////////////////////////////////////////////////////////// ! // ! // Function: ! // CBand (UInt_t nXid, UInt_t nYid, ! // vector<CPoint>& points) ! // Operation Type: ! // Constructor. ! // ! CBand::CBand(UInt_t nXid, UInt_t nYid,const vector<CPoint>& points) : CPointListGate(nXid, nYid, points) { --- 326,340 ---- // Functions for class CBand ! /*! ! Constructor. Creates a band given a set of points: ! \param <TT>nXid (UInt_t [in])</TT> ! Id of the x parameter involved in the gate. ! \param <TT>nYid (UInt_t [in])</TT> ! Id of the y parameter involved in the gate. ! \param <TT>points (const vector<FPoint>& points [in])</TT> ! array of points to make up the band. ! */ ! CBand::CBand(UInt_t nXid, UInt_t nYid, ! const vector<FPoint>& points) : CPointListGate(nXid, nYid, points) { *************** *** 335,344 **** // Function: // CBand (UInt_t nXid, UInt_t nYid, ! // UInt_t nPts, CPoint* pPoints); // Operation Type: // Constructor. // CBand::CBand(UInt_t nXid, UInt_t nYid, ! UInt_t nPts, CPoint* pPoints) : CPointListGate(nXid, nYid, nPts, pPoints) { --- 345,354 ---- // Function: // CBand (UInt_t nXid, UInt_t nYid, ! // UInt_t nPts, FPoint* pPoints); // Operation Type: // Constructor. // CBand::CBand(UInt_t nXid, UInt_t nYid, ! UInt_t nPts, FPoint* pPoints) : CPointListGate(nXid, nYid, nPts, pPoints) { *************** *** 350,359 **** // Function: // CBand (UInt_t nXid, UInt_t nYid, ! // UInt_t nPts, UInt_t* pX, UInt_t* pY) // Operation Type: // Constructor // CBand::CBand(UInt_t nXid, UInt_t nYid, ! UInt_t nPts, UInt_t* pX, UInt_t* pY) : CPointListGate(nXid, nYid, nPts, pX, pY) { --- 360,369 ---- // Function: // CBand (UInt_t nXid, UInt_t nYid, ! // UInt_t nPts, Float_t_t* pX, Float_t* pY) // Operation Type: // Constructor // CBand::CBand(UInt_t nXid, UInt_t nYid, ! UInt_t nPts, Float_t* pX, Float_t* pY) : CPointListGate(nXid, nYid, nPts, pX, pY) { *************** *** 422,428 **** return kfFALSE; } else { ! int x = rEvent[xPar]; // Pull the point out of the event array. ! int y = rEvent[yPar]; return Interior(x,y); --- 432,441 ---- return kfFALSE; } + if(!rEvent[xPar].isValid() || !rEvent[yPar].isValid()) { + return kfFALSE; // A parameter not supplied. + } else { ! Float_t x = rEvent[xPar]; // Pull ... [truncated message content] |