Update of /cvsroot/nsclspectcl/SpecTcl/Filter In directory sc8-pr-cvs1:/tmp/cvs-serv28727 Modified Files: EventSinkPipeline.h FilterDictionary.h GatedEventFilter.h EventFilter.h GatedEventFilter.cpp OutputEventStream.h EventFilter.cpp OutputEventStream.cpp Log Message: More filter updates. Index: EventSinkPipeline.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Filter/EventSinkPipeline.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** EventSinkPipeline.h 10 Feb 2003 19:22:16 -0000 1.1 --- EventSinkPipeline.h 3 Mar 2003 13:43:29 -0000 1.2 *************** *** 44,48 **** public: - // CONSTRUCTORS??? ***************** // Constructor. CEventSinkPipeline(); --- 44,47 ---- Index: FilterDictionary.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Filter/FilterDictionary.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FilterDictionary.h 21 Feb 2003 16:38:54 -0000 1.1 --- FilterDictionary.h 3 Mar 2003 13:43:29 -0000 1.2 *************** *** 68,76 **** static CFilterDictionary* m_pInstance; ! // Constructors. protected: CFilterDictionary(); - //CFilterDictionary(const CFilterDictionary&); - //CFilterDictionary& operator=(const CFilterDictionary&); // Additional functions. --- 68,74 ---- static CFilterDictionary* m_pInstance; ! // Constructors. (Destructor is never called.) protected: CFilterDictionary(); // Additional functions. *************** *** 78,81 **** --- 76,81 ---- static CFilterDictionary* GetInstance(); }; // CFilterDictionary. + + typedef CFilterDictionary::DictionaryIterator CFilterDictionaryIterator; #endif Index: GatedEventFilter.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Filter/GatedEventFilter.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** GatedEventFilter.h 21 Feb 2003 16:38:54 -0000 1.2 --- GatedEventFilter.h 3 Mar 2003 13:43:30 -0000 1.3 *************** *** 56,61 **** // Attributes. CGateContainer* m_pGateContainer; ! vector<Int_t> m_vParameterIds; ! COutputEventStream* m_pOutputEventStream; public: --- 56,60 ---- // Attributes. CGateContainer* m_pGateContainer; ! vector<UInt_t> m_vParameterIds; public: *************** *** 63,67 **** CGatedEventFilter(); CGatedEventFilter(COutputEventStream&); - CGatedEventFilter(const CGatedEventFilter&); ~CGatedEventFilter(); // Virtual. --- 62,65 ---- *************** *** 74,81 **** // Additional functions. void setGateContainer(CGateContainer&); protected: ! Bool_t CheckCondition(const CEvent& rEvent); public: ! void FormatOutputEvent(const CEvent& rEvent); // Virtual. }; // CGatedEventFilter. --- 72,82 ---- // Additional functions. void setGateContainer(CGateContainer&); + void setParameterIds(const vector<UInt_t>&); + std::string getGateName(); + UInt_t getGateID(); protected: ! Bool_t CheckCondition(CEvent&, const vector<UInt_t>&); public: ! void FormatOutputEvent(CEvent&, const vector<UInt_t>&); // Virtual. }; // CGatedEventFilter. Index: EventFilter.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Filter/EventFilter.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** EventFilter.h 21 Feb 2003 16:38:54 -0000 1.2 --- EventFilter.h 3 Mar 2003 13:43:30 -0000 1.3 *************** *** 59,63 **** class CEventFilter : public CEventSink { // Attributes. ! std::string m_Name; Bool_t m_fEnabled; COutputEventStream* m_pOutputEventStream; --- 59,63 ---- class CEventFilter : public CEventSink { // Attributes. ! protected: Bool_t m_fEnabled; COutputEventStream* m_pOutputEventStream; *************** *** 67,71 **** CEventFilter(); CEventFilter(COutputEventStream&); ! CEventFilter(const CEventFilter&); /*virtual*/ ~CEventFilter(); --- 67,71 ---- CEventFilter(); CEventFilter(COutputEventStream&); ! // CEventFilter(const CEventFilter&); /*virtual*/ ~CEventFilter(); *************** *** 73,94 **** virtual void operator()(CEventList&); // If flag is set, call event formatter. CEventFilter& operator=(const CEventFilter&); - Bool_t operator==(const CEventFilter&); - Bool_t operator!=(const CEventFilter&); // Additional functions. void Enable(); void Disable(); ! /*virtual*/ void FormatOutputEvent(CEvent&); // = 0; COutputEventStream& AttachOutputEventStream(COutputEventStream&); COutputEventStream& DetachOutputEventStream(); //protected: // Commented out for now. ! /*virtual*/ Bool_t CheckCondition(CEvent&); // = 0; }; // CEventFilter. - - // Dictionary types: - /* - typedef CDictionary<CEventFilter> CFilterDictionary; - typedef CFilterDictionary::DictionaryIterator CFilterDictionaryIterator; - */ #endif --- 73,87 ---- virtual void operator()(CEventList&); // If flag is set, call event formatter. CEventFilter& operator=(const CEventFilter&); // Additional functions. void Enable(); void Disable(); ! /*virtual*/ void FormatOutputEvent(CEvent&); COutputEventStream& AttachOutputEventStream(COutputEventStream&); COutputEventStream& DetachOutputEventStream(); //protected: // Commented out for now. ! /*virtual*/ Bool_t CheckEnabled(); ! /*virtual*/ Bool_t CheckCondition(CEvent&); }; // CEventFilter. #endif Index: GatedEventFilter.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Filter/GatedEventFilter.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** GatedEventFilter.cpp 10 Feb 2003 19:23:06 -0000 1.1 --- GatedEventFilter.cpp 3 Mar 2003 13:43:30 -0000 1.2 *************** *** 17,20 **** --- 17,24 ---- // Functions. // Constructors. + CGatedEventFilter::CGatedEventFilter() {} + + CGatedEventFilter::CGatedEventFilter(COutputEventStream& rOutputEventStream) {} + /* CGatedEventFilter::CGatedEventFilter(const CGatedEventFilter& rRhs) { *************** *** 25,32 **** */ ! CGatedEventFilter::~CGatedEventFilter() { ! } // Operators. CGatedEventFilter& CGatedEventFilter::operator=(const CGatedEventFilter& rRhs) { m_pGateContainer = rRhs.m_pGateContainer; --- 29,36 ---- */ ! CGatedEventFilter::~CGatedEventFilter() {} // Operators. + /* CGatedEventFilter& CGatedEventFilter::operator=(const CGatedEventFilter& rRhs) { m_pGateContainer = rRhs.m_pGateContainer; *************** *** 34,37 **** --- 38,53 ---- m_pOutputEventStream = rRhs.m_pOutputEventStream; } + */ + + Bool_t CGatedEventFilter::operator==(const CGatedEventFilter& rhs) { + return ((m_fEnabled == rhs.m_fEnabled) && + (m_pOutputEventStream == rhs.m_pOutputEventStream) && + (m_pGateContainer == rhs.m_pGateContainer) && + (m_vParameterIds == rhs.m_vParameterIds)); + }; + + Bool_t CGatedEventFilter::operator!=(const CGatedEventFilter& rhs) { + return !(operator==(rhs)); + }; // Additional functions. *************** *** 40,51 **** } ! Bool_t CGatedEventFilter::CheckCondition(const CEvent& rEvent) { // Formerly returned UInt_t. /* Note: CGateContainer always points to a gate, even if it is invalid. Also, we do not need to use getGate(). We simply just pass the event to the function call operator of the gate container. Furthermore, CGateContainer returns whether the event passed the gate so we can simply return this output without having to check the condition using inGate, CheckGate, or whatever else. Simple, complete, concise. */ ! return (Bool_t)m_pGateContainer; // Check this! ! // Write to COutputEventStream, or toss. } ! void CGatedEventFilter::FormatOutputEvent(const CEvent& rEvent) { } --- 56,98 ---- } ! void CGatedEventFilter::setParameterIds(const vector<UInt_t>& rvParameterIds) { ! m_vParameterIds = rvParameterIds; ! } ! ! std::string CGatedEventFilter::getGateName() { ! return m_pGateContainer->getName(); ! } ! ! UInt_t CGatedEventFilter::getGateID() { ! return m_pGateContainer->getNumber(); ! } ! ! Bool_t CGatedEventFilter::CheckCondition(CEvent& rEvent, const vector<UInt_t>& vParameterIds) { /* Note: CGateContainer always points to a gate, even if it is invalid. Also, we do not need to use getGate(). We simply just pass the event to the function call operator of the gate container. Furthermore, CGateContainer returns whether the event passed the gate so we can simply return this output without having to check the condition using inGate, CheckGate, or whatever else. Simple, complete, concise. */ ! return (m_pGateContainer->getGate())->inGate(rEvent, vParameterIds); } ! void CGatedEventFilter::FormatOutputEvent(CEvent& rEvent, const vector<UInt_t>& vParameterIds) { ! Bool_t passed = kfTRUE; ! UInt_t i = 0; ! ! // Check to see if event passes all parameters upon which it is being filtered. ! /* ! while(passed && i<m_vParameterIds.size()) { ! if(CheckCondition(rEvent, vParameterIds)) { ! passed = passed && true; // All previous checks must have passed to pass now. ! } else { ! passed = kfFALSE; ! } ! i++; ! } ! */ ! if(m_pOutputEventStream && CheckEnabled() && CheckCondition(rEvent, vParameterIds)) { // If all set up and the event passes the filter ... ! // Write to COutputEventStream, ! m_pOutputEventStream->ReceiveEvent(rEvent); ! } else { ! // or toss. ! } } Index: OutputEventStream.h =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Filter/OutputEventStream.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OutputEventStream.h 10 Feb 2003 19:22:17 -0000 1.1 --- OutputEventStream.h 3 Mar 2003 13:43:30 -0000 1.2 *************** *** 2,21 **** #define __OUTPUTEVENTSTREAM_H - /* - #ifndef __DICTIONARY_H - #include "Dictionary.h" - #endif - */ - #ifndef __PARAMETER_H #include "Parameter.h" #endif #ifndef __EVENTSINK_H #include "EventSink.h" #endif #ifndef __HISTOTYPES_H #include <histotypes.h> #endif --- 2,18 ---- #define __OUTPUTEVENTSTREAM_H #ifndef __PARAMETER_H #include "Parameter.h" + #define __PARAMETER_H #endif #ifndef __EVENTSINK_H #include "EventSink.h" + #define __EVENTSINK_H #endif #ifndef __HISTOTYPES_H #include <histotypes.h> + #define __HISTOTYPES_H #endif *************** *** 41,44 **** --- 38,42 ---- class COutputEventStream { + Bool_t m_fActive; UInt_t m_nMAXBUFFERSIZE; // Arbitrarily initialized to 16. vector<CEvent> Buffer; Index: EventFilter.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Filter/EventFilter.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** EventFilter.cpp 10 Feb 2003 19:23:05 -0000 1.1 --- EventFilter.cpp 3 Mar 2003 13:43:30 -0000 1.2 *************** *** 17,32 **** // Constructors. ! //CEventFilter::CEventFilter(){ ! //} ! ! CEventFilter::CEventFilter(COutputEventStream& rOutputEventStream) { ! } ! CEventFilter::CEventFilter(const CEventFilter& rRhs) { ! } ! CEventFilter::~CEventFilter() { ! //delete rOutputEventStream; // Is this needed? ! } // Operators. --- 17,31 ---- // Constructors. ! CEventFilter::CEventFilter() : ! m_fEnabled(false), ! m_pOutputEventStream((COutputEventStream*)kpNULL) ! {} ! CEventFilter::CEventFilter(COutputEventStream& rOutputEventStream) : ! m_fEnabled(false), ! m_pOutputEventStream(&rOutputEventStream) ! {} ! CEventFilter::~CEventFilter() {} // Operators. *************** *** 43,67 **** } - Bool_t CEventFilter::operator==(const CEventFilter& rRhs) { - return (m_Name == rRhs.m_Name && - m_fEnabled == rRhs.m_fEnabled); - } - - Bool_t CEventFilter::operator!=(const CEventFilter& aCEventFilter) { - return !(operator==(aCEventFilter)); - } - // Additional functions. void CEventFilter::Enable() { ! m_fEnabled = kfTRUE; } void CEventFilter::Disable() { ! m_fEnabled = kfFALSE; } Bool_t CEventFilter::CheckCondition(CEvent& rEvent) { ! // Overridden by sub-class. ! return kfTRUE; // Umm! ******************************************* } --- 42,75 ---- } // Additional functions. void CEventFilter::Enable() { ! if(!m_fEnabled) { ! if(m_pOutputEventStream == (COutputEventStream*)kpNULL) { ! m_pOutputEventStream = new COutputEventStream; ! } ! m_fEnabled = m_pOutputEventStream->Open(); ! } } void CEventFilter::Disable() { ! if(m_fEnabled) { ! if(m_pOutputEventStream != (COutputEventStream*)kpNULL) { ! if(m_pOutputEventStream->Close()) { // Successfully closed. ! delete m_pOutputEventStream; ! m_fEnabled = false; ! } ! } else { // No outputeventstream. ! m_fEnabled = false; ! } ! } ! } ! ! Bool_t CEventFilter::CheckEnabled() { ! return m_fEnabled; } Bool_t CEventFilter::CheckCondition(CEvent& rEvent) { ! // OVERRIDDEN BY SUB-CLASS. ! return kfTRUE; } Index: OutputEventStream.cpp =================================================================== RCS file: /cvsroot/nsclspectcl/SpecTcl/Filter/OutputEventStream.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OutputEventStream.cpp 10 Feb 2003 19:23:07 -0000 1.1 --- OutputEventStream.cpp 3 Mar 2003 13:43:30 -0000 1.2 *************** *** 8,27 **** // Header Files. - #include "OutputEventStream.h" - #include "EventFilter.h" #include <vector> ! #include "Histogrammer.h" ! #include "Parameter.h" #include "Event.h" #include "EventList.h" - #include <fstream.h> // Constructors. ! COutputEventStream::COutputEventStream() { m_nMAXBUFFERSIZE = 16; // Arbitrarily chosen. Open(); } ! COutputEventStream::COutputEventStream(const CEvent& rEvent) { m_nMAXBUFFERSIZE = 16; // Arbitrarily chosen. Open(); --- 8,30 ---- // Header Files. #include <vector> ! #include <fstream.h> ! ! #include "OutputEventStream.h" ! //#include "Parameter.h" #include "Event.h" #include "EventList.h" // Constructors. ! COutputEventStream::COutputEventStream() : ! m_fActive(false) ! { m_nMAXBUFFERSIZE = 16; // Arbitrarily chosen. Open(); } ! COutputEventStream::COutputEventStream(const CEvent& rEvent) : ! m_fActive(false) ! { m_nMAXBUFFERSIZE = 16; // Arbitrarily chosen. Open(); *************** *** 43,77 **** // Additional functions. Bool_t COutputEventStream::Open() { // Open for APPEND ************************* ! m_nFd.open("/tmp/coutputeventstream.txt"); // CHECK FOR EXCEPTIONS ************ ! return (m_nFd.good()); } Bool_t COutputEventStream::Close() { ! SendBuffer(); // Send whatever is left. ! m_nFd.close(); // CHECK FOR EXCEPTIONS ************************* ! return kfTRUE; } Bool_t COutputEventStream::ReceiveEvent(const CEvent& rEvent) { ! if(Buffer.size() >= m_nMAXBUFFERSIZE) { ! SendBuffer(); } - Buffer.push_back(rEvent); } Bool_t COutputEventStream::SendBuffer() { ! // Send buffer. ! for(int i=0; i<Buffer.size(); i++) { // For each and every CEvent in Buffer, ! for(int j=0; j<((CEvent)(Buffer[i])).size(); j++) { // For each and every Parameter in CEvent, ! // Output the parameter in the event in the buffer. ! m_nFd << ((CEvent)(Buffer[i]))[j] << " "; // Done with parameter. } ! // Done with event. m_nFd << endl; } - // Done with buffer. - m_nFd << endl; - m_nFd << flush; - Buffer.clear(); - return kfTRUE; } --- 46,100 ---- // Additional functions. Bool_t COutputEventStream::Open() { // Open for APPEND ************************* ! if(!m_fActive) { ! if(!m_nFd.is_open()) { ! m_nFd.open("/tmp/coutputeventstream.txt"); ! } ! if(m_nFd.good()) { ! m_fActive = true; ! return true; ! } else { ! return false; ! } ! } } Bool_t COutputEventStream::Close() { ! if(m_fActive) { // Attempt to close only if not already so. ! if(m_nFd.is_open()) { ! SendBuffer(); // Send whatever is left. ! m_nFd.close(); // No return value. No exceptions likely. ! } ! m_fActive = false; ! } ! return !m_fActive; // true always means success with me, but this is arbitrary. } Bool_t COutputEventStream::ReceiveEvent(const CEvent& rEvent) { ! if(m_fActive) { ! if(Buffer.size() >= m_nMAXBUFFERSIZE) { ! SendBuffer(); ! } ! Buffer.push_back(rEvent); } } Bool_t COutputEventStream::SendBuffer() { ! if(m_nFd.is_open() && m_nFd.good() && Buffer.size()>0) { ! // Send buffer. ! for(int i=0; i<Buffer.size(); i++) { // For each and every CEvent in Buffer, ! for(int j=0; j<((CEvent)(Buffer[i])).size(); j++) { // For each and every Parameter in CEvent, ! // Output the parameter in the event in the buffer. ! m_nFd << ((CEvent)(Buffer[i]))[j] << " "; // Done with parameter. ! } ! // Done with event. ! m_nFd << endl; } ! // Done with buffer. m_nFd << endl; + m_nFd << flush; + Buffer.clear(); + return kfTRUE; + } else { + return kfFALSE; } } |