OpticalModulator.h revision 10447
110447Snilay@cs.wisc.edu#ifndef __DSENT_MODEL_OPTICALGRAPH_OPTICALMODULATOR_H__
210447Snilay@cs.wisc.edu#define __DSENT_MODEL_OPTICALGRAPH_OPTICALMODULATOR_H__
310447Snilay@cs.wisc.edu
410447Snilay@cs.wisc.edu#include "model/optical_graph/OpticalNode.h"
510447Snilay@cs.wisc.edu#include "util/CommonType.h"
610447Snilay@cs.wisc.edu
710447Snilay@cs.wisc.edunamespace DSENT
810447Snilay@cs.wisc.edu{
910447Snilay@cs.wisc.edu    class OpticalTransmitter;
1010447Snilay@cs.wisc.edu
1110447Snilay@cs.wisc.edu    class OpticalModulator : public OpticalNode
1210447Snilay@cs.wisc.edu    {
1310447Snilay@cs.wisc.edu        public:
1410447Snilay@cs.wisc.edu            OpticalModulator(const String& instance_name_, OpticalModel* model_, const WavelengthGroup& wavelengths_, bool opt_loss_, OpticalTransmitter* transmitter_);
1510447Snilay@cs.wisc.edu            ~OpticalModulator();
1610447Snilay@cs.wisc.edu
1710447Snilay@cs.wisc.edu        public:
1810447Snilay@cs.wisc.edu            // Set losses
1910447Snilay@cs.wisc.edu            void setLosses(double IL_dB_, double ER_dB_);
2010447Snilay@cs.wisc.edu            // Tell the modulator to set a new insertion loss and extinction ratio
2110447Snilay@cs.wisc.edu            bool setModulatorSpec(double IL_dB_, double ER_dB_);
2210447Snilay@cs.wisc.edu            // Get modulator insertion loss
2310447Snilay@cs.wisc.edu            double getInsertionLoss() const;
2410447Snilay@cs.wisc.edu            // Get modulator extinction ratio
2510447Snilay@cs.wisc.edu            double getExtinctionRatio() const;
2610447Snilay@cs.wisc.edu            // Ask whether the model is able to optimize for insertion loss
2710447Snilay@cs.wisc.edu            // and extinction ratios
2810447Snilay@cs.wisc.edu            bool canOptimizeLoss() const;
2910447Snilay@cs.wisc.edu            // Ask the modulator for its power at a given utilization
3010447Snilay@cs.wisc.edu            double getPower(double util_) const;
3110447Snilay@cs.wisc.edu
3210447Snilay@cs.wisc.edu        private:
3310447Snilay@cs.wisc.edu            // Disable copy constructor
3410447Snilay@cs.wisc.edu            OpticalModulator(const OpticalModulator& node_);
3510447Snilay@cs.wisc.edu
3610447Snilay@cs.wisc.edu        private:
3710447Snilay@cs.wisc.edu            // Optical sender of the modulator
3810447Snilay@cs.wisc.edu            OpticalTransmitter* m_transmitter_;
3910447Snilay@cs.wisc.edu            // Insertion loss of the modulator
4010447Snilay@cs.wisc.edu            double m_insertion_loss_;
4110447Snilay@cs.wisc.edu            // Extinction ratio of the modulator
4210447Snilay@cs.wisc.edu            double m_extinction_ratio_;
4310447Snilay@cs.wisc.edu            // Whether the modulator can be optimized
4410447Snilay@cs.wisc.edu            bool m_opt_loss_;
4510447Snilay@cs.wisc.edu
4610447Snilay@cs.wisc.edu    };
4710447Snilay@cs.wisc.edu
4810447Snilay@cs.wisc.edu} // namespace DSENT
4910447Snilay@cs.wisc.edu
5010447Snilay@cs.wisc.edu#endif // __DSENT_MODEL_OPTICALGRAPH_OPTICALMODULATOR_H__
5110447Snilay@cs.wisc.edu
52