#ifndef __fevt_FEvent_h__ #define __fevt_FEvent_h__ #include #include #include #include #include #include #include namespace evt { class Event; } namespace fevt { class Eye; /*! \class FEvent \brief Top of Fluorescence Detector event hierarchy \author Stefano Argiro' \date Jan 29, 2003 \version $Id: FEvent.h 14717 2009-09-17 20:24:36Z lukas $ \ingroup fevt */ class FEvent { private: typedef std::list InternalEyeContainer; typedef InternalEyeContainer::iterator InternalEyeIterator; typedef InternalEyeContainer::const_iterator InternalConstEyeIterator; /// An iterator over all eyes for read and write typedef boost::indirect_iterator AllEyeIterator; /// An iterator over eyes for read only typedef boost::indirect_iterator ConstAllEyeIterator; AllEyeIterator AllEyesBegin() { return AllEyeIterator(fEyes.begin()); } AllEyeIterator AllEyesEnd() { return AllEyeIterator(fEyes.end()); } ConstAllEyeIterator AllEyesBegin() const { return ConstAllEyeIterator(fEyes.begin()); } ConstAllEyeIterator AllEyesEnd() const { return ConstAllEyeIterator(fEyes.end()); } public: FEvent(const FEvent& fEvent); FEvent& operator=(const FEvent& fEvent); /// selective Eye iterators typedef boost::filter_iterator EyeIterator; typedef boost::filter_iterator ConstEyeIterator; EyeIterator EyesBegin(const ComponentSelector::Status status) ///< iterator pointing to first eye of given status { return EyeIterator(ComponentSelector(status), AllEyesBegin(), AllEyesEnd()); } EyeIterator EyesBegin(); ///< iterator pointing to first available eye with status eHasData (DEPRECATED!) ConstEyeIterator EyesBegin(const ComponentSelector::Status status) const ///< first available eye of given status { return ConstEyeIterator(ComponentSelector(status), AllEyesBegin(), AllEyesEnd()); } ConstEyeIterator EyesBegin() const; ///< first available eye of status eHasData (DEPRECATED!) EyeIterator EyesEnd(const ComponentSelector::Status status) ///< iterator pointing to end of available eyes of given status { return EyeIterator(ComponentSelector(status), AllEyesEnd(), AllEyesEnd()); } EyeIterator EyesEnd(); ///< iterator pointing to end of available eyes with status eHasData (DEPRECATED!) ConstEyeIterator EyesEnd(const ComponentSelector::Status status) const ///< end of available eyes of given status { return ConstEyeIterator(ComponentSelector(status), AllEyesEnd(), AllEyesEnd()); } ConstEyeIterator EyesEnd() const; ///< iterator pointing to end of available eyes with status eHasData (DEPRECATED!) unsigned int GetNEyes() const { return fEyes.size(); } /// return Eye by id Eye& GetEye(const unsigned int eyeId, const ComponentSelector::Status status = ComponentSelector::eHasData); const Eye& GetEye(const unsigned int eyeId, const ComponentSelector::Status status = ComponentSelector::eHasData) const; void MakeEye(const unsigned int eyeId, const ComponentSelector::Status status = ComponentSelector::eHasData); bool HasEye(const unsigned int eyeId, const ComponentSelector::Status status = ComponentSelector::eHasData) const; /*! These are convenience methods to look up eyes by name rather than id. The association between name and numerical Id is defined in an external file or database handled by the Detector Description. */ Eye& GetEye(const std::string& eyeName, const ComponentSelector::Status status = ComponentSelector::eHasData); const Eye& GetEye(const std::string& eyeName, const ComponentSelector::Status status = ComponentSelector::eHasData) const; void MakeEye(const std::string& eyeName, const ComponentSelector::Status status = ComponentSelector::eHasData); bool HasEye(const std::string& eyeName, const ComponentSelector::Status status = ComponentSelector::eHasData) const; Header& GetHeader() { return fHeader; } //< FD EventHeader const Header& GetHeader() const { return fHeader; } //< FD EventHeader void SetHeader(const Header& header) { fHeader = header; } private: FEvent() { } ~FEvent(); private: unsigned int GetIdFromName(const std::string& eyeName) const; InternalEyeContainer fEyes; fevt::Header fHeader; friend class evt::Event; friend class utl::LameShadowPtr; }; } #endif // Configure (x)emacs for this file ... // Local Variables: // mode: c++ // compile-command: "make -C .. FEvent/FEvent.o -k" // End: