12 #ifndef CARMA_OPTICALTELCOMMON_H
13 #define CARMA_OPTICALTELCOMMON_H
15 #include "carma/corba/corba.h"
17 #include "carma/antenna/common/Image.h"
18 #include "carma/antenna/common/OpticalTelControl.h"
19 #include "carma/monitor/AntennaCommon.h"
20 #include "carma/util/PthreadRWLock.h"
21 #include "carma/util/UserException.h"
38 class OpticalTelCommon
49 OpticalTelCommon( carma::monitor::AntennaCommon::OpticalTel &monObj,
51 float azFieldOfViewInArcminutes,
52 float elFieldOfViewInArcminutes,
53 float rotationInDegrees,
56 virtual ~OpticalTelCommon( );
58 void setFrameDimensions( CORBA::Short x, CORBA::Short y,
59 CORBA::Short x0 = 0, CORBA::Short y0 = 0 );
61 void setBrightness( CORBA::Float brightness );
63 void setContrast( CORBA::Float contrast );
65 void setFramegrabberResolution(
Resolution res );
67 void setRotationAndFieldsOfView( CORBA::Float rotationInDegrees,
68 CORBA::Float azFOVInArcminutes,
69 CORBA::Float elFOVInArcminutes );
71 flattenedOpticalImage * grabFrame();
73 flattenedOpticalImage * getImage( CORBA::UShort numFrames,
74 CORBA::Boolean subBackground,
75 CORBA::Boolean normalizeMedian,
76 CORBA::Boolean normalizeImage );
78 void takeBackgroundImage( CORBA::UShort numFrames,
81 flattenedOpticalImage * getStoredBackgroundImage( );
85 void findCentroid( CORBA::UShort numFramesPerImage,
86 CORBA::UShort minValidCentroids,
87 CORBA::UShort maxCentroidAttempts,
88 CORBA::UShort numEdgePixels,
89 CORBA::UShort apertureRadiusPixels,
90 CORBA::Float pixelThresholdSigma,
91 CORBA::Boolean subBackground,
92 CORBA::Boolean normalizeMedian,
95 CentroidResults * getCentroidResults( );
97 void applyTestOffset( CORBA::Double azInArcmin,
98 CORBA::Double elInArcmin );
100 void zeroTestOffset( );
102 static void copyFrameToFOI( Image & image,
103 flattenedOpticalImage * foi,
104 const FrameContext & frameContext,
105 const float rotationInDegrees,
106 const float azFieldOfViewInArcminutes,
107 const float elFieldOfViewInArcminutes,
108 bool normalizeImage );
113 void writeMonitorData( );
117 void setFakeStarHoldingWriteLock( );
119 struct FindCentroidThreadArgs {
121 FindCentroidThreadArgs( OpticalTelCommon & otcRef );
123 CORBA::UShort numFramesPerImage;
124 CORBA::UShort minValidCentroids;
125 CORBA::UShort maxCentroidAttempts;
126 CORBA::UShort numEdgePixels;
127 CORBA::UShort apertureRadiusPixels;
128 CORBA::Float pixelThresholdSigma;
129 CORBA::Boolean subBackground;
130 CORBA::Boolean normalizeMedian;
132 OpticalTelCommon & This;
136 findCentroidThread( FindCentroidThreadArgs & args );
138 struct TakeBackgroundThreadArgs {
140 TakeBackgroundThreadArgs( OpticalTelCommon & otcRef );
142 CORBA::UShort numFrames;
144 OpticalTelCommon & This;
148 takeBackgroundThread( TakeBackgroundThreadArgs & args );
168 carma::monitor::AntennaCommon::OpticalTel &mon_;
169 log4cpp::Category &log_;
171 float azFieldOfViewInArcminutes_;
172 float elFieldOfViewInArcminutes_;
173 const float grossRotationInDegrees_;
174 float fineRotationInDegrees_;
176 CentroidResults centroidResults_;
178 Image backgroundImage_;
180 std::auto_ptr< FrameContext > frameContext_;
182 ::std::pair<float, float> fakeStarPosition_;
183 ::std::pair<float, float> fakeStarOffset_;
184 const bool simulate_;
191 #endif // CARMA_OPTICALTELCOMMON_H
A simple wrapper class that makes use of ::pthread_rwlock_t easier in a C++ world.
Resolution
Resolutions supported by our framegrabber.
SwitchState
Generic switch state enumerator.