RingDetector.h revision 10447
110447Snilay@cs.wisc.edu#ifndef __DSENT_MODEL_OPTICAL_RINGDETECTOR_H__
210447Snilay@cs.wisc.edu#define __DSENT_MODEL_OPTICAL_RINGDETECTOR_H__
310447Snilay@cs.wisc.edu
410447Snilay@cs.wisc.edu#include "util/CommonType.h"
510447Snilay@cs.wisc.edu#include "model/OpticalModel.h"
610447Snilay@cs.wisc.edu#include "model/optical_graph/OpticalReceiver.h"
710447Snilay@cs.wisc.edu
810447Snilay@cs.wisc.edunamespace DSENT
910447Snilay@cs.wisc.edu{
1010447Snilay@cs.wisc.edu    class RingDetector : public OpticalModel, public OpticalReceiver
1110447Snilay@cs.wisc.edu    {
1210447Snilay@cs.wisc.edu        public:
1310447Snilay@cs.wisc.edu            // Receiver topolgy strings
1410447Snilay@cs.wisc.edu            static const String INTEGRATINGSENSEAMP;
1510447Snilay@cs.wisc.edu
1610447Snilay@cs.wisc.edu        public:
1710447Snilay@cs.wisc.edu            RingDetector(const String& instance_name_, const TechModel* tech_model_);
1810447Snilay@cs.wisc.edu            virtual ~RingDetector();
1910447Snilay@cs.wisc.edu
2010447Snilay@cs.wisc.edu        public:
2110447Snilay@cs.wisc.edu            // Set a list of properties' name needed to construct model
2210447Snilay@cs.wisc.edu            void initParameters();
2310447Snilay@cs.wisc.edu            // Set a list of properties' name needed to construct model
2410447Snilay@cs.wisc.edu            void initProperties();
2510447Snilay@cs.wisc.edu            // Returns the sensitivity of the receiver given an extinction ratio
2610447Snilay@cs.wisc.edu            double getSensitivity(double ER_dB_) const;
2710447Snilay@cs.wisc.edu
2810447Snilay@cs.wisc.edu        private:
2910447Snilay@cs.wisc.edu            // Precompute values based on tech parameters
3010447Snilay@cs.wisc.edu            void precomputeTech();
3110447Snilay@cs.wisc.edu            // Design the receiver helper function
3210447Snilay@cs.wisc.edu            void designReceiver();
3310447Snilay@cs.wisc.edu            // Calculates inverse normal cdf
3410447Snilay@cs.wisc.edu            double calcInvNormCdf(double num_);
3510447Snilay@cs.wisc.edu
3610447Snilay@cs.wisc.edu        protected:
3710447Snilay@cs.wisc.edu            // Build the model
3810447Snilay@cs.wisc.edu            virtual void constructModel();
3910447Snilay@cs.wisc.edu            virtual void updateModel();
4010447Snilay@cs.wisc.edu            virtual void useModel();
4110447Snilay@cs.wisc.edu            virtual void propagateTransitionInfo();
4210447Snilay@cs.wisc.edu
4310447Snilay@cs.wisc.edu        private:
4410447Snilay@cs.wisc.edu            // Precomputed numbers
4510447Snilay@cs.wisc.edu            double m_quad_a_;
4610447Snilay@cs.wisc.edu            double m_quad_b1_;
4710447Snilay@cs.wisc.edu            double m_quad_b2_;
4810447Snilay@cs.wisc.edu            double m_quad_c_;
4910447Snilay@cs.wisc.edu
5010447Snilay@cs.wisc.edu    }; // class RingDetector
5110447Snilay@cs.wisc.edu} // namespace DSENT
5210447Snilay@cs.wisc.edu
5310447Snilay@cs.wisc.edu#endif // __DSENT_MODEL_OPTICAL_RINGDETECTOR_H__
5410447Snilay@cs.wisc.edu
55