OpticalWavelength.h revision 10447
110447Snilay@cs.wisc.edu#ifndef __DSENT_MODEL_OPTICALGRAPH_OPTICALWAVELENGTH_H__ 210447Snilay@cs.wisc.edu#define __DSENT_MODEL_OPTICALGRAPH_OPTICALWAVELENGTH_H__ 310447Snilay@cs.wisc.edu 410447Snilay@cs.wisc.edu#include "model/OpticalModel.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 // Optical datapath structure storing a detector table consisting of a 1010447Snilay@cs.wisc.edu // detector, the loss to that detector, and the modulator driving 1110447Snilay@cs.wisc.edu // the wavelength for that detector 1210447Snilay@cs.wisc.edu struct OpticalDataPath 1310447Snilay@cs.wisc.edu { 1410447Snilay@cs.wisc.edu OpticalLaser* laser; 1510447Snilay@cs.wisc.edu OpticalModulator* modulator; 1610447Snilay@cs.wisc.edu vector<OpticalDetector*> detectors; 1710447Snilay@cs.wisc.edu vector<double> losses; 1810447Snilay@cs.wisc.edu 1910447Snilay@cs.wisc.edu OpticalDataPath(OpticalLaser* laser_, OpticalModulator* modulator_, OpticalDetector* detector_, double loss_) 2010447Snilay@cs.wisc.edu : laser(laser_), modulator(modulator_), detectors(1, detector_), losses(1, loss_) {} 2110447Snilay@cs.wisc.edu }; 2210447Snilay@cs.wisc.edu 2310447Snilay@cs.wisc.edu class OpticalWavelength 2410447Snilay@cs.wisc.edu { 2510447Snilay@cs.wisc.edu // A data structure of a wavelength (or a group of wavelengths). This 2610447Snilay@cs.wisc.edu // keeps track of all lasers sources, modulators, and detectors that 2710447Snilay@cs.wisc.edu // the wavelength hits. 2810447Snilay@cs.wisc.edu public: 2910447Snilay@cs.wisc.edu OpticalWavelength(const String& instance_name_, const WavelengthGroup& wavelengths_); 3010447Snilay@cs.wisc.edu ~OpticalWavelength(); 3110447Snilay@cs.wisc.edu 3210447Snilay@cs.wisc.edu public: 3310447Snilay@cs.wisc.edu // Get tree name 3410447Snilay@cs.wisc.edu const String& getInstanceName() const; 3510447Snilay@cs.wisc.edu // Get wavelength groups 3610447Snilay@cs.wisc.edu WavelengthGroup getWavelengths() const; 3710447Snilay@cs.wisc.edu // Add a datapath for this wavelength 3810447Snilay@cs.wisc.edu void addDataPath(OpticalLaser* laser_, OpticalModulator* modulator_, OpticalDetector* detector_, double loss_); 3910447Snilay@cs.wisc.edu const vector<OpticalDataPath>* getDataPaths() const; 4010447Snilay@cs.wisc.edu // Calculate required wavelength power to reach some number of detectors 4110447Snilay@cs.wisc.edu // If number_detectors < the number of total detectors this wavelength hits then 4210447Snilay@cs.wisc.edu // it simply returns the laser power required to reach the worst-case detectors 4310447Snilay@cs.wisc.edu double getLaserPower(unsigned int number_detectors_) const; 4410447Snilay@cs.wisc.edu 4510447Snilay@cs.wisc.edu private: 4610447Snilay@cs.wisc.edu // Name of the wavelength 4710447Snilay@cs.wisc.edu const String m_instance_name_; 4810447Snilay@cs.wisc.edu // Keeps track of the wavelengths 4910447Snilay@cs.wisc.edu const WavelengthGroup m_wavelengths_; 5010447Snilay@cs.wisc.edu // Keeps track of a table of laser, detector, modulator mappings 5110447Snilay@cs.wisc.edu vector<OpticalDataPath>* m_data_paths_; 5210447Snilay@cs.wisc.edu }; 5310447Snilay@cs.wisc.edu 5410447Snilay@cs.wisc.edu} // namespace DSENT 5510447Snilay@cs.wisc.edu 5610447Snilay@cs.wisc.edu#endif // __DSENT_MODEL_OPTICALGRAPH_OPTICALWAVEGUIDE_H__ 5710447Snilay@cs.wisc.edu 58