VR-Vantage 3.1 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
seDetector.h
Go to the documentation of this file.
1 
3 // Copyright JRM Enterprises, Inc. 2004 - 2010
4 // All rights reserved.
5 //
6 // This code is the intellectual property of JRM Enterprises, Inc.
7 // It may not be used or released as source or compiled binary form
8 // without the prior written consent of JRM Enterprises, Inc.
9 //
10 // Original Author: Ken George Date: October 2004
12 
13 #ifndef _seDetector_
14 #define _seDetector_
15 
16 //#include "seIncAll.h"
17 
18 #include "sedllexport.h"
19 
27 {
28 public:
29 
36  {
37  InvalidScanDirection = -1,
38  ScanDirectionNone = 0,
39  HorizontalScanDirection = 1,
40  VerticalScanDirection = 2,
41  FullImageScan = 3,
42  NumScanDirection = 4 // Handy enumeration count. Always keep as last entry.
43  };
44 
51  {
55  ANTI_BLOOMING_NUM
56  };
57 
59  // seDetector
63  seDetector();
64 
66  //seDetector
70  ~seDetector();
71 
72 
74  //loadDefaults
78  void loadDefaults();
79 
80 
82  //setBandpass
88  void setBandpass(const double ax, const double bx);
89 
91  //getBandpass
97  void getBandpass(double &ax, double &bx) const
98  {
99  ax = m_ax;
100  bx = m_bx;
101  }
102 
104  //setNumDetectors
110  void setNumDetectors(const long width, const long height) {
111  if ((m_detectorWidth != width) ||
112  (m_detectorHeight != height)) {
113  m_detectorWidth = width;
114  m_detectorHeight = height;
115  setDirty();
116  }
117  }
118 
120  //getNumDetectors
126  void getNumDetectors(long &width, long &height) const
127  {
128  width = m_detectorWidth;
129  height = m_detectorHeight;
130  }
131 
132 
133 
135  //setPitchDetectors
141  void setPitchDetectors(const double pitchHorz, const double pitchVert) {
142  if (m_horizontalPitch != pitchHorz ||
143  m_verticalPitch != pitchVert)
144  {
145  m_horizontalPitch = pitchHorz;
146  m_verticalPitch = pitchVert;
147  setDirty();
148  }
149  }
150 
152  //getPitchDetectors
158  void getPitchDetectors(double &pitchHorz, double &pitchVert) const
159  {
160  pitchHorz = m_horizontalPitch;
161  pitchVert = m_verticalPitch;
162  }
163 
165  //setSampleSize
172  void setSampleSize(const double Horz, const double Vert);
173 
175  //getSampleSize
181  void getSampleSize(double &Horz, double &Vert) const
182  {
183  Horz = m_horizontalSampleSize;
184  Vert = m_verticalSampleSize;
185  }
186 
187 
189  //setDwellTime
194  void setDwellTime(const double dwellTime) {
195  if (m_dwellTime != dwellTime) {
196  m_dwellTime = dwellTime;
197  setDirty();
198  }
199  }
200 
202  //getDwellTime
207  double getDwellTime() const {return m_dwellTime;}
208 
210  //setJitterAmplitude
217  void setJitterAmplitude(const double amplitudeX, const double amplitudeY)
218  {
219  bool dirty = false;
220  if (m_jitterAmplitudeX != amplitudeX)
221  {
222  m_jitterAmplitudeX = amplitudeX;
223  dirty = true;
224  }
225  if (m_jitterAmplitudeY != amplitudeY)
226  {
227  m_jitterAmplitudeY = amplitudeY;
228  dirty = true;
229  }
230 
231  if ( dirty )
232  setDirty();
233  }
234 
236  //getJitterAmplitude
242  void getJitterAmplitude(double &jitterAmplitudeX, double &jitterAmplitudeY) const
243  {
244  jitterAmplitudeX = m_jitterAmplitudeX;
245  jitterAmplitudeY = m_jitterAmplitudeY;
246  }
247 
249  //setJitterFrequency
256  void setJitterFrequency(const double jitterfrequencyX, const double jitterfrequencyY)
257  {
258  bool dirty = false;
259  if (m_jitterFrequencyX != jitterfrequencyX)
260  {
261  m_jitterFrequencyX = jitterfrequencyX;
262  dirty = true;
263  }
264  if (m_jitterFrequencyY != jitterfrequencyY)
265  {
266  m_jitterFrequencyY = jitterfrequencyY;
267  dirty = true;
268  }
269 
270  if ( dirty )
271  setDirty();
272  }
273 
275  //getJitterFrequency
281  void getJitterFrequency(double &jitterFrequencyX, double &jitterFrequencyY) const
282  {
283  jitterFrequencyX = m_jitterFrequencyX;
284  jitterFrequencyY = m_jitterFrequencyY;
285  }
286 
287 
289  //setNoiseFrequencyKnee
294  void setNoiseFrequencyKnee(const double freqKnee) {
295  if (m_noiseFrequencyKnee != freqKnee) {
296  m_noiseFrequencyKnee = freqKnee;
297  setDirty();
298  }
299  }
301  //setPoissonNoisePercent
306  void setPoissonNoisePercent(double percent){m_percentPoisson = percent;}
307 
309  //getPoissonNoisePercent
314  double getPoissonNoisePercent() const {return m_percentPoisson;}
315 
317  //setFInverseNoisePercent
322  void setFInverseNoisePercent(double percent){m_percentFInverse = percent;}
323 
325  //getFInverseNoisePercent
330  double getFInverseNoisePercent() const {return m_percentFInverse;}
331 
333  //getNoiseFrequencyKnee
338  double getNoiseFrequencyKnee() const {return m_noiseFrequencyKnee;}
339 
340 
342  //setNoiseFrequencyExp
347  void setNoiseFrequencyExp(const double freqExp) {
348  if (m_noiseFrequencyExp != freqExp) {
349  m_noiseFrequencyExp = freqExp;
350  setDirty();
351  }
352  }
353 
355  //getNoiseFrequencyExp
360  double getNoiseFrequencyExp() const {return m_noiseFrequencyExp;}
361 
362 
364  //setNoiseEquivalentTemp
369  void setNoiseEquivalentTemp(const double temp) {
370  if (m_noiseEquivalentTemp != temp) {
371  m_noiseEquivalentTemp = temp;
372  setDirty();
373  }
374  }
375 
377  //getNoiseEquivalentTemp
382  double getNoiseEquivalentTemp() const {return m_noiseEquivalentTemp;}
383 
384 
386  //setBackgroundTemp
391  void setBackgroundTemp(const double temp);
392 
394  //getBackgroundTemp
399  double getBackgroundTemp() const {return m_BackgroundTemp;}
400 
402  //getBackgroundRadiance
407  double getBackgroundRadiance() const {return m_BackgroundRadiance;}
408 
409 
411  //setFixedPatternNoisePercent
416  void setFixedPatternNoisePercent(double temp) {
417  m_percentFixedNoise = temp;
418  }
419 
421  //getFixedPatternNoisePercent
426  double getFixedPatternNoisePercent() const {return m_percentFixedNoise;}
427 
428 
430  //setNoiseEquivalentRadiance
435  void setNoiseEquivalentRadiance(double temp) {
436  if (m_noiseEquivRadiance != temp) {
437  m_noiseEquivRadiance = temp;
438  setDirty();
439  }
440  }
441 
443  //getNoiseEquivalentRadiance
448  double getNoiseEquivalentRadiance() const {return m_noiseEquivRadiance;}
449 
450 
452  //setPercentPixelFill
458  void setPercentPixelFill(double temp) {
459  if (m_percentPixelFill != temp) {
460  m_percentPixelFill = temp;
461  m_percentHorzPixelFill = temp;
462  m_percentVertPixelFill = temp;
463  setDirty();
464  }
465  }
466 
468  //getPercentPixelFill
473  double getPercentPixelFill() const {return m_percentPixelFill;}
474 
476  //setPercentPixelFill
482  void setPercentPixelFill(double fillHorz, double fillVert);
483 
485  //getPercentPixelFill
489  void getPercentPixelFill(double &fillHorz, double &fillVert) const
490  {
491  fillHorz = m_percentHorzPixelFill;
492  fillVert = m_percentVertPixelFill;
493  }
494 
495 
497  //setPercentDeadPixel
502  void setPercentDeadPixel(double temp) {
503  m_percentDeadPixel = temp;
504  }
505 
507  //getPercentDeadPixel
512  double getPercentDeadPixel() const {return m_percentDeadPixel;}
513 
514 
516  //setNoiseEnable
521  void setNoiseEnable(const bool flag) {
522  m_noiseEnable = flag;
523  }
524 
526  //isFullColorEnable
531  bool isFullColorEnable() const {return m_FullColorEnable;}
532 
534  //setFullColorEnable
539  void setFullColorEnable(const bool flag) {
540  if (m_FullColorEnable != flag) {
541  m_FullColorEnable = flag;
542  setDirty();
543  }
544  }
545 
547  //getChannelSelects
556  void getChannelSelects(float &redSelect, float &greenSelect, float &blueSelect ) const
557  {
558  redSelect = m_redSelect;
559  greenSelect = m_greenSelect;
560  blueSelect = m_blueSelect;
561  }
562 
564  //setChannelSelects
573  void setChannelSelects(float redSelect, float greenSelect, float blueSelect ) {
574  m_redSelect = redSelect;
575  m_greenSelect = greenSelect;
576  m_blueSelect = blueSelect;
577  }
578 
579 
581  //isScanningSensorEnable
586  bool isScanningSensorEnable() const {return m_scanningSensorEnable;}
587 
589  //setScanningSensorEnable
594  void setScanningSensorEnable(const bool flag) {
595  m_scanningSensorEnable = flag;
596  }
597 
599  //getNonUniformityEnable
604  bool getNonUniformityEnable() const { return m_nonUniformityEnable; }
605 
607  //setNonUniformityEnable
612  void setNonUniformityEnable(const bool flag)
613  {
614  m_nonUniformityEnable = flag;
615  }
616 
618  //setScanMaskFilename
623  inline void setScanMaskFilename(char *scanMaskFileName) { setScanMaskGainFilename(scanMaskFileName); }
624 
626  //getScanMaskImage
631  inline char *getScanMaskFilename() { return getScanMaskGainFilename(); }
632 
633 
635  //setScanMaskGainFilename
640  void setScanMaskGainFilename(char *scanMaskFileName);
641 
643  //getScanMaskGainImage
648  char *getScanMaskGainFilename();
649 
651  //setScanMaskLevelFilename
656  void setScanMaskLevelFilename(char *scanMaskFileName);
657 
659  //getScanMaskLevelImage
664  char *getScanMaskLevelFilename();
665 
667  //setScanMask
677  void setScanMask(float minGain, float maxGain, ScanDirectionType scanDirection, int lineSpacing = 1, float minLevel = 0.0, float maxLevel = 0.0);
678 
680  //getScanMaskMaxGain
685  float getScanMaskMaxGain() const {return m_scanMaskMaxGain;}
686 
688  //setScanMaskMaxGain
693  void setScanMaskMaxGain(float val);
694 
696  //getScanMaskMinGain
701  float getScanMaskMinGain() const {return m_scanMaskMinGain;}
702 
704  //setScanMaskMinGain
709  void setScanMaskMinGain(float val);
710 
712  //getScanMaskMaxLevel
717  float getScanMaskMaxLevel() const {return m_scanMaskMaxLevel;}
718 
720  //setScanMaskMaxLevel
725  void setScanMaskMaxLevel(float val);
726 
728  //getScanMaskMinLevel
733  float getScanMaskMinLevel() const {return m_scanMaskMinLevel;}
734 
736  //setScanMaskMinLevel
741  void setScanMaskMinLevel(float val);
742 
744  //getScanMaskDirection
749  ScanDirectionType getScanMaskDirection() const {return m_scanMaskDirection;}
750 
752  //setScanMaskMaskDirection
757  void setScanMaskDirection(ScanDirectionType val);
758 
760  //getScanMaskLineSpacing
765  int getScanMaskLineSpacing() const {return m_scanMaskLineSpacing;}
766 
768  //setScanMaskLineSpacing
773  void setScanMaskLineSpacing(int val);
774 
776  //getScanMaskLevelAdjustment
782  void setScanMaskLevelAdjustment(double adjustment) {
783  m_scanMaskLevelAdjustment = adjustment;
784  }
786  //getScanMaskLevelAdjustment
792  double getScanMaskLevelAdjustment() const {return m_scanMaskLevelAdjustment;}
793 
795  //getScanMaskUserDefined
800  bool getScanMaskUserDefined() const;
801 
803  //setScanMaskUserDefined
808  void setScanMaskUserDefined(bool userDefined);
809 
811  //getUserDefinedNonUniformityGainData
815  float *getUserDefinedNonUniformityGainData() const;
816 
818  //setUserDefinedNonUniformityGainData
822  void setUserDefinedNonUniformityGainData(float *data);
823 
825  //getUserDefinedNonUniformityLevelData
829  float *getUserDefinedNonUniformityLevelData() const;
830 
832  //setUserDefinedNonUniformityLevelData
836  void setUserDefinedNonUniformityLevelData(float *data);
837 
839  //isNoiseEnable
844  bool isNoiseEnable() const {return m_noiseEnable;}
845 
847  //setNoiseAdjustment
853  void setNoiseAdjustment(double adjustment) {
854  m_noiseAdjustment = adjustment;
855  }
858 
863  double getNoiseAdjustment() const {return m_noiseAdjustment;}
864 
866  // setMotionBlurEnable
871  void setMotionBlurEnable (const bool flag) {
872  m_motionBlurEnable = flag;
873  }
874 
876  // isMotionBlurEnable
881  bool isMotionBlurEnable() const { return m_motionBlurEnable; }
882 
884  // setMotionBlurWeight
890  if ((weight >= 0.0) &&
891  (weight <= 1.0))
892  m_motionBlurWeight = weight;
893  }
895  // getMotionBlurWeight
900  double getMotionBlurWeight() const { return m_motionBlurWeight; }
901 
902 
904  //setWeightThreshold
910  void setWeightThreshold(double threshold) {
911  if (m_weightThreshold != threshold) {
912  m_weightThreshold = threshold;
913  setDirty();
914  }
915  }
916 
918  //getWeightThreshold
923  double getWeightThreshold() const {return m_weightThreshold;}
924 
926  //getChargeWellCapacity
931  double getChargeWellCapacity() const
932  {
933  return m_chargeWellCapacity;
934  }
935 
937  //setChargeWellCapacity
942  void setChargeWellCapacity(double threshold)
943  {
944  if (m_chargeWellCapacity != threshold)
945  {
946  m_chargeWellCapacity = threshold;
947  setDirty();
948  }
949  }
950 
952  //getQuantumEfficiency
957  double getQuantumEfficiency() const
958  {
959  return m_quantumEfficiency;
960  }
961 
963  //setQuantumEfficiency
968  void setQuantumEfficiency(double efficiency)
969  {
970  if (m_quantumEfficiency != efficiency)
971  {
972  m_quantumEfficiency = efficiency;
973  setDirty();
974  }
975  }
976 
978  //getAntiBloomingType
984  AntiBloomingType getAntiBloomingType() const
985  {
986  return m_antiBloomDirection;
987  }
988 
990  //setAntiBloomingType
996  void setAntiBloomingType(AntiBloomingType antibloomDirection)
997  {
998  if (m_antiBloomDirection != antibloomDirection)
999  {
1000  m_antiBloomDirection = antibloomDirection;
1001  setDirty();
1002  }
1003  }
1004 
1006  //getMaterialWavelengthCutOnCutOff
1010  void getMaterialWavelengthCutOnCutOff(double &cuton, double &cutoff) const
1011  {
1012  cuton = m_wavelengthCutOn;
1013  cutoff = m_wavelengthCutOff;
1014  }
1015 
1017  //setMaterialWavelengthCutOnCutOff
1022  void setMaterialWavelengthCutOnCutOff(double cuton, double cutoff)
1023  {
1024  if (m_wavelengthCutOn != cuton)
1025  {
1026  m_wavelengthCutOn = cuton;
1027  setDirty();
1028  }
1029 
1030  if (m_wavelengthCutOff != cutoff)
1031  {
1032  m_wavelengthCutOff = cutoff;
1033  setDirty();
1034  }
1035  }
1036 
1038  //getMicroChannelPlateDistance
1043  double getMicroChannelPlateDistance() const
1044  {
1045  return m_microChannelPlateDistance;
1046  }
1047 
1049  //setMicroChannelPlateDistance
1054  void setMicroChannelPlateDistance(double distance)
1055  {
1056  if (m_microChannelPlateDistance != distance)
1057  {
1058  m_microChannelPlateDistance = distance;
1059  setDirty();
1060  }
1061  }
1062 
1064  //getPhotoCathodeVoltage
1069  double getPhotoCathodeVoltage() const
1070  {
1071  return m_photoCathodeVoltage;
1072  }
1073 
1075  //setPhotoCathodeVoltage
1080  void setPhotoCathodeVoltage(double voltage)
1081  {
1082  if (m_photoCathodeVoltage != voltage)
1083  {
1084  m_photoCathodeVoltage = voltage;
1085  setDirty();
1086  }
1087  }
1088 
1090  //getReadoutNoiseNumElectron
1095  double getReadoutNoiseNumElectron() const
1096  {
1097  return m_electronReadoutNoise;
1098  }
1099 
1101  //setReadoutNoiseNumElectron
1106  void setReadoutNoiseNumElectron(double electrons)
1107  {
1108  if (m_electronReadoutNoise != electrons)
1109  {
1110  m_electronReadoutNoise = electrons;
1111  setDirty();
1112  }
1113  }
1114 
1116  //getWellCapacityPercentage
1121  double getWellCapacityPercentage() const
1122  {
1123  return m_wellCapacityPercentage;
1124  }
1125 
1127  //setWellCapacityPercentage
1132  void setWellCapacityPercentage(double percentage);
1133 
1135  //get3DNoiseEnable
1140  bool get3DNoiseEnable() const
1141  {
1142  return m_enable3DNoise;
1143  }
1144 
1146  //set3DNoiseEnable
1151  void set3DNoiseEnable(bool enable)
1152  {
1153  if (m_enable3DNoise != enable)
1154  {
1155  m_enable3DNoise = enable;
1156  setDirty();
1157  }
1158  }
1159 
1161  //get3DNoiseSigmaH
1166  float get3DNoiseSigmaH() const
1167  {
1168  return m_3DNoiseSigmaH;
1169  }
1170 
1172  //set3DNoiseSigmaH
1177  void set3DNoiseSigmaH(float STD)
1178  {
1179  if (m_3DNoiseSigmaH != STD)
1180  {
1181  m_3DNoiseSigmaH = STD;
1182  setDirty();
1183  }
1184  }
1185 
1187  //get3DNoiseSigmaV
1192  float get3DNoiseSigmaV() const
1193  {
1194  return m_3DNoiseSigmaV;
1195  }
1196 
1198  //set3DNoiseSigmaV
1203  void set3DNoiseSigmaV(float STD)
1204  {
1205  if (m_3DNoiseSigmaV != STD)
1206  {
1207  m_3DNoiseSigmaV = STD;
1208  setDirty();
1209  }
1210  }
1211 
1213  //get3DNoiseSigmaVH
1218  float get3DNoiseSigmaVH() const
1219  {
1220  return m_3DNoiseSigmaVH;
1221  }
1222 
1224  //set3DNoiseSigmaVH
1229  void set3DNoiseSigmaVH(float STD)
1230  {
1231  if (m_3DNoiseSigmaVH != STD)
1232  {
1233  m_3DNoiseSigmaVH = STD;
1234  setDirty();
1235  }
1236  }
1237 
1239  //get3DNoiseSigmaT
1244  float get3DNoiseSigmaT() const
1245  {
1246  return m_3DNoiseSigmaT;
1247  }
1248 
1250  //set3DNoiseSigmaT
1255  void set3DNoiseSigmaT(float STD)
1256  {
1257  if (m_3DNoiseSigmaT != STD)
1258  {
1259  m_3DNoiseSigmaT = STD;
1260  setDirty();
1261  }
1262  }
1263 
1265  //get3DNoiseSigmaTH
1270  float get3DNoiseSigmaTH() const
1271  {
1272  return m_3DNoiseSigmaTH;
1273  }
1274 
1276  //set3DNoiseSigmaTH
1281  void set3DNoiseSigmaTH(float STD)
1282  {
1283  if (m_3DNoiseSigmaTH != STD)
1284  {
1285  m_3DNoiseSigmaTH = STD;
1286  setDirty();
1287  }
1288  }
1289 
1291  //get3DNoiseSigmaTV
1296  float get3DNoiseSigmaTV() const
1297  {
1298  return m_3DNoiseSigmaTV;
1299  }
1300 
1302  //set3DNoiseSigmaTV
1307  void set3DNoiseSigmaTV(float STD)
1308  {
1309  if (m_3DNoiseSigmaTV != STD)
1310  {
1311  m_3DNoiseSigmaTV = STD;
1312  setDirty();
1313  }
1314  }
1315 
1317  //get3DNoiseSigmaTVH
1322  float get3DNoiseSigmaTVH() const
1323  {
1324  return m_3DNoiseSigmaTVH;
1325  }
1326 
1328  //set3DNoiseSigmaTVH
1333  void set3DNoiseSigmaTVH(float STD)
1334  {
1335  if (m_3DNoiseSigmaTVH != STD)
1336  {
1337  m_3DNoiseSigmaTVH = STD;
1338  setDirty();
1339  }
1340  }
1341 
1343  //computeVariables
1346  void computeVariables(double focalLen, double horzFOV, double vertFOV, double frameRate);
1347 
1349  //getDetectorAngularSubtense
1352  void getDetectorAngularSubtense(double &DASHorz, double &DASVert) const
1353  {
1354  DASHorz = m_DASHorz;
1355  DASVert = m_DASVert;
1356  }
1357 
1359  //getNyquistSamplingFrequency
1362  void getNyquistSamplingFrequency(double &nyquistHorz, double &nyquistVert) const
1363  {
1364  nyquistHorz = m_nyquistHorz;
1365  nyquistVert = m_nyquistVert;
1366  }
1367 
1369  //getScanVelocity
1374  double getScanVelocity() const
1375  {
1376  return m_scanVelocity;
1377  }
1378 
1380  //isDirty
1385  bool isDirty() const {return m_dirty;}
1386 
1388  //setDirty
1392  void setDirty() {m_dirty = true;}
1394  //clrDirty
1398  void clrDirty() {m_dirty = false;}
1399 
1401  //isScanMaskDirty
1406  bool isScanMaskDirty() const {return m_scanMaskDirty;}
1408  //setScanMaskDirty
1412  void setScanMaskDirty() {m_scanMaskDirty = true;}
1414  //clrScanMaskDirty
1418  void clrScanMaskDirty() {m_scanMaskDirty = false;}
1419 
1420 private:
1421 
1422  double m_ax;
1423  double m_bx;
1430  double m_dwellTime;
1432  double m_DASHorz;
1433  double m_DASVert;
1434  double m_nyquistHorz;
1435  double m_nyquistVert;
1457 
1460 
1462  float m_redSelect;
1465 
1468  char m_scanMaskGainFileName[255]; // Set to 255 to match SIGSIM_STRING_SIZE ///< A single channel *.bmp for per channel gain
1469  char m_scanMaskLevelFileName[255];
1470 
1482 
1491 
1500 
1501 
1502  bool m_dirty;
1503 
1504 };
1505 
1506 
1507 #endif // _seDetector_


Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)