HiRISE
 Observation

Science_Channel_Header.hh
Go to the documentation of this file.
1 /* HiRISE Science_Channel_Header
2 
3 PIRL CVS ID: Science_Channel_Header.hh,v 1.42 2020/05/12 22:59:48 schaller Exp
4 
5 Copyright (C) 2003-2020 Arizona Board of Regents on behalf of the Lunar and
6 Planetary Laboratory at the University of Arizona.
7 
8 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
9 this file except in compliance with the License. You may obtain a copy of the
10 License at
11 
12  http://www.apache.org/licenses/LICENSE-2.0
13 
14 Unless required by applicable law or agreed to in writing, software distributed
15 under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
16 CONDITIONS OF ANY KIND, either express or implied. See the License for the
17 specific language governing permissions and limitations under the License.
18 */
19 #ifndef _HiRISE_Science_Channel_Header_
20 #define _HiRISE_Science_Channel_Header_
21 
22 // UA::HiRISE
23 #include "Data_Component.hh"
24 
25 // PIRL
26 #include "Data_Block.hh"
27 
28 #if defined (INCLUDE_PVL)
29 // idaeim::PVL
30 #include "PVL.hh"
31 #endif
32 
33 #include <iostream>
34 #include <string>
35 
36 namespace UA
37 {
38 namespace HiRISE
39 {
40 /*******************************************************************************
41  Science Channel Header
42 */
242 : public Data_Component
243 {
244 public:
245 /*==============================================================================
246  Constants:
247 */
249 static const char* const
250  ID;
251 
253 static const char* const
255 
267  {
285 
304 
323 
355 
381 
388 
394 
400 
401  // The total number of Elements:
403  };
404 
406 static const char*
407  NAMES[];
408 
410 static const Index
412 
414 static const Index
416 
434 static const Index
436 
438 static const u_int_32
440 
442 static const int
444 
446 static const u_int_32
456 
459  {
462  };
463 
466  {
468  HIGH
469  };
470 
473  {
476  };
477 
480 
493  {
497  const char* units;
500  };
501 
503 static const Conversion_Coefficients
505 
507 static const double
509 
510 // Note: There was a typo in the above constant name ("CELCIUS"). Nothing seems
511 // to use it at the moment, so I've renamed it.
512 
514 static const char* const
516 
517 /*==============================================================================
518  Constructors
519 */
527 
538 explicit Science_Channel_Header (std::istream& stream);
539 
549  bool data_duplicate = true);
550 
557 
558 /*==============================================================================
559  Accessors
560 */
567 std::string id () const;
568 
574 const char* name () const;
575 
576 // Times:
577 
601 std::string clock_count (Index element, Index index = 0) const;
602 
623  (const std::string& counter, Index element, Index index = 0);
624 
648 double time (Index element, Index index = 0) const;
649 
670 Science_Channel_Header& time (double seconds, Index element, Index index = 0);
671 
672 // Bit fields:
673 
682 
692 
701 
711 
721 
731 
741 
751 
760 
770 
778 bool FPGA_last_response_FM_moving () const;
779 
789 
800 
812 
823 
835 
836 // Conversion from sensor to real world units:
837 
848 const Conversion_Coefficients* conversion (Index element) const;
849 
861 double convert (Index element, Index index = 0) const;
862 
872 const char* converted_units (Index element) const;
873 
874 /*==============================================================================
875  Printing
876 */
889 std::ostream& print
890  (std::ostream& stream = std::cout, bool verbose = false) const;
891 
892 #if defined (INCLUDE_PVL)
893 /*==============================================================================
894  PVL
895 */
904 idaeim::PVL::Aggregate* PVL () const;
905 
917 
918 #endif // defined (INCLUDE_PVL)
919 
920 /*==============================================================================
921  Validation
922 */
931 bool is_valid () const;
932 
933 /*==============================================================================
934  Functions:
935 */
946 static bool is_sync (const void* data_at);
947 
964 static void* sync_at (void* begin, void* end);
965 
966 }; // class Science_Channel_Header
967 
968 } // namespace HiRISE
969 } // namespace UA
970 #endif
unsigned int Index
A Data_Component provides a common, virtual interface for all HiRISE Observation data blocks.
Definition: Data_Component.hh:124
A Science_Channel_Header contains the science metadata describing the observation channel data.
Definition: Science_Channel_Header.hh:243
static const u_int_32 FPGA_RESPONSE_FM_RELAY_PHB_CLOSED_BIT_MASK
Definition: Science_Channel_Header.hh:449
static const u_int_32 FPGA_RESPONSE_FM_OVERHEATED_BIT_MASK
Definition: Science_Channel_Header.hh:451
std::ostream & print(std::ostream &stream=std::cout, bool verbose=false) const
Prints the component structure and contents.
Definition: Science_Channel_Header.cc:1600
std::string clock_count(Index element, Index index=0) const
Gets a formatted clock count string for a Time Element.
Definition: Science_Channel_Header.cc:875
bool FPGA_last_response_CPMM_PWS_enabled() const
Tests if the FPGA_Last_Response Element indicates that the CPMM power supply was enabled during the o...
Definition: Science_Channel_Header.cc:983
static const int SYNC_BYTES
The number of bytes in the sync pattern.
Definition: Science_Channel_Header.hh:443
static const u_int_32 FPGA_RESPONSE_FM_RELAY_PHA_CLOSED_BIT_MASK
Definition: Science_Channel_Header.hh:450
const char * converted_units(Index element) const
Gets the stadard units of representation for an Element.
Definition: Science_Channel_Header.cc:1176
Heater_Mode
Heater_Control_Mode values: determines the Heater_Controls value meanings.
Definition: Science_Channel_Header.hh:459
@ CLOSED_LOOP
Definition: Science_Channel_Header.hh:460
@ DUTY_CYCLES
Definition: Science_Channel_Header.hh:461
static const u_int_32 FPGA_RESPONSE_TELEMETRY_GATHERING_BIT_MASK
Definition: Science_Channel_Header.hh:448
bool FPGA_last_response_FM_relay_PHB_closed() const
Tests if the FPGA_Last_Response Element indicates that the focus mechanism relay PhB was closed at th...
Definition: Science_Channel_Header.cc:1019
static const u_int_32 FPGA_RESPONSE_STIM_LEDS_BIT_MASK
Definition: Science_Channel_Header.hh:453
static const char *const FORMAT_FILENAME
The name of the external PDS format description file.
Definition: Science_Channel_Header.hh:515
static const char * NAMES[]
The name of each Element.
Definition: Science_Channel_Header.hh:407
static void * sync_at(void *begin, void *end)
Searches a range of bytes for a Science Channel Header sync pattern.
Definition: Science_Channel_Header.cc:1864
std::string id() const
Provides the class ID on a line followed by the base Data_Component::id.
Definition: Science_Channel_Header.cc:864
bool FPGA_last_response_telemetry_gathering() const
Tests if the FPGA_Last_Response Element indicates that telemetry gathering was enabled at the time of...
Definition: Science_Channel_Header.cc:1001
static const Index OFFSETS[]
Data_Block data storage address offset for each Element.
Definition: Science_Channel_Header.hh:415
Science_Channel_Header & operator=(const Science_Channel_Header &component)
Assigns another Science_Channel_Header to this one.
Definition: Science_Channel_Header.cc:851
static const u_int_32 FPGA_RESPONSE_STIM_LEDS_BIT_MASK_SHIFT
Definition: Science_Channel_Header.hh:454
Science_Channel_Header()
Constructs an empty Science_Channel_Header.
Definition: Science_Channel_Header.cc:815
const char * name() const
Gets the NAME of this class.
Definition: Science_Channel_Header.cc:868
static const u_int_32 SYNC
Expected Sync Element values.
Definition: Science_Channel_Header.hh:439
const Conversion_Coefficients * conversion(Index element) const
Gets a Conversion_Coefficients set for an Element.
Definition: Science_Channel_Header.cc:1130
Element
An Element refers to a data containing constituent of a component.
Definition: Science_Channel_Header.hh:267
@ IEA_Positive_15_Voltage
Definition: Science_Channel_Header.hh:379
@ CPMM_Positive_29_Voltage
Definition: Science_Channel_Header.hh:356
@ LUT_Operation
Definition: Science_Channel_Header.hh:303
@ Extra_Pixels
Definition: Science_Channel_Header.hh:309
@ CPMM_Positive_2_5_Current
Definition: Science_Channel_Header.hh:365
@ Total_Image_Bytes
Definition: Science_Channel_Header.hh:284
@ Secondary_Mirror_Metering_Ring_Temperature
Definition: Science_Channel_Header.hh:350
@ Pad_0
Definition: Science_Channel_Header.hh:296
@ Metering_Structure_Truss_Leg_120_B_Temperature
Definition: Science_Channel_Header.hh:342
@ Pad_2
Definition: Science_Channel_Header.hh:398
@ Total_Lines_Collected
Definition: Science_Channel_Header.hh:317
@ Total_Elements
Definition: Science_Channel_Header.hh:402
@ Max_Storable_Lines
Definition: Science_Channel_Header.hh:315
@ Heater_Control_Mode
Definition: Science_Channel_Header.hh:389
@ Optical_Bench_FPE_Temperature
Definition: Science_Channel_Header.hh:328
@ Channel_Readout_Response
Definition: Science_Channel_Header.hh:321
@ Mech_TLM_FPGA_Positive_2_5_Voltage
Definition: Science_Channel_Header.hh:376
@ Expose_Command
Definition: Science_Channel_Header.hh:287
@ Default_Binning
Definition: Science_Channel_Header.hh:386
@ Trimming_Operation
Definition: Science_Channel_Header.hh:299
@ Focus_Motor_Temperature
Definition: Science_Channel_Header.hh:354
@ CPMM_Positive_10_Voltage
Definition: Science_Channel_Header.hh:358
@ TDI_Command_Received
Definition: Science_Channel_Header.hh:291
@ Binning_Command_Received
Definition: Science_Channel_Header.hh:290
@ Barrel_Baffle_Temperature
Definition: Science_Channel_Header.hh:345
@ Default_Line_Count
Definition: Science_Channel_Header.hh:385
@ Line_Time_Nanoseconds
Definition: Science_Channel_Header.hh:319
@ Metering_Structure_Truss_Leg_0_A_Temperature
Definition: Science_Channel_Header.hh:339
@ CPMM_Positive_5_Current
Definition: Science_Channel_Header.hh:361
@ Last_Command_Time
Definition: Science_Channel_Header.hh:397
@ Analog_Power_Operation
Definition: Science_Channel_Header.hh:298
@ Sun_Shade_Temperature
Definition: Science_Channel_Header.hh:346
@ IEA_Positive_5_Voltage
Definition: Science_Channel_Header.hh:380
@ Secondary_Mirror_Baffle_Temperature
Definition: Science_Channel_Header.hh:352
@ Pixels_Per_Line
Definition: Science_Channel_Header.hh:308
@ IEA_Negative_15_Voltage
Definition: Science_Channel_Header.hh:378
@ Line_Header_Bytes
Definition: Science_Channel_Header.hh:312
@ Field_Stop_Temperature
Definition: Science_Channel_Header.hh:332
@ CPMM_Positive_29_Current
Definition: Science_Channel_Header.hh:357
@ Pixel_Data_Bytes
Definition: Science_Channel_Header.hh:311
@ Optical_Bench_Fold_Flat_Temperature
Definition: Science_Channel_Header.hh:326
@ Exposure_Readout_Count
Definition: Science_Channel_Header.hh:382
@ CPMM_Positive_10_Current
Definition: Science_Channel_Header.hh:359
@ CPMM_Negative_5_Voltage
Definition: Science_Channel_Header.hh:368
@ Expose_HiRISE_Time
Definition: Science_Channel_Header.hh:279
@ LUT_Command_Received
Definition: Science_Channel_Header.hh:295
@ IEA_Temperature
Definition: Science_Channel_Header.hh:353
@ Total_Lines_Exposed
Definition: Science_Channel_Header.hh:318
@ Channel
Definition: Science_Channel_Header.hh:273
@ FPE_Temperature
Definition: Science_Channel_Header.hh:335
@ Secondary_Mirror_Temperature
Definition: Science_Channel_Header.hh:351
@ Transaction_ID
Definition: Science_Channel_Header.hh:275
@ TDI_Operation
Definition: Science_Channel_Header.hh:300
@ CPMM_Positive_1_8_Current
Definition: Science_Channel_Header.hh:367
@ FPA_Positive_Y_Temperature
Definition: Science_Channel_Header.hh:333
@ FPGA_Last_Response
Definition: Science_Channel_Header.hh:395
@ Optical_Bench_Box_Beam_Temperature
Definition: Science_Channel_Header.hh:330
@ Readout_Pad_Bytes
Definition: Science_Channel_Header.hh:307
@ Heater_Controls
Definition: Science_Channel_Header.hh:396
@ Instrument_Control_FPGA_Positive_2_5_Voltage
Definition: Science_Channel_Header.hh:375
@ Expose_Time_Command_Received
Definition: Science_Channel_Header.hh:294
@ Metering_Structure_Truss_Leg_240_B_Temperature
Definition: Science_Channel_Header.hh:344
@ IE_PWS_Board_Temperature
Definition: Science_Channel_Header.hh:370
@ Optical_Bench_Flexure_Temperature
Definition: Science_Channel_Header.hh:324
@ Line_Time_Command_Received
Definition: Science_Channel_Header.hh:289
@ Metering_Structure_Truss_Leg_120_A_Temperature
Definition: Science_Channel_Header.hh:341
@ CPMM_Power_Command_Received
Definition: Science_Channel_Header.hh:293
@ IEA_Positive_28_Voltage
Definition: Science_Channel_Header.hh:377
@ CPMM
Definition: Science_Channel_Header.hh:272
@ CPMM_Positive_1_8_Voltage
Definition: Science_Channel_Header.hh:366
@ Metering_Structure_Truss_Leg_0_B_Temperature
Definition: Science_Channel_Header.hh:340
@ Post_Binned_Lines
Definition: Science_Channel_Header.hh:270
@ Powered_CPMMs_Map
Definition: Science_Channel_Header.hh:277
@ Readout_Start_Time
Definition: Science_Channel_Header.hh:306
@ Pad_1
Definition: Science_Channel_Header.hh:322
@ Metering_Structure_Truss_Leg_240_A_Temperature
Definition: Science_Channel_Header.hh:343
@ Powered_CPMMs_Count
Definition: Science_Channel_Header.hh:276
@ Line_Time_Operation
Definition: Science_Channel_Header.hh:286
@ Exposure_Start_Time
Definition: Science_Channel_Header.hh:282
@ Sync
Definition: Science_Channel_Header.hh:268
@ Primary_Mirror_Baffle_Temperature
Definition: Science_Channel_Header.hh:338
@ Heater_Zones_State
Definition: Science_Channel_Header.hh:391
@ Channel_Readout_Bytes
Definition: Science_Channel_Header.hh:313
@ Analog_Power_On_Time
Definition: Science_Channel_Header.hh:280
@ Line_Count_Command_Received
Definition: Science_Channel_Header.hh:292
@ Primary_Mirror_Temperature
Definition: Science_Channel_Header.hh:337
@ Expose_Time_Milliseconds
Definition: Science_Channel_Header.hh:305
@ Line_Count_Operation
Definition: Science_Channel_Header.hh:301
@ Optical_Bench_Cover_Temperature
Definition: Science_Channel_Header.hh:331
@ Alignment
Definition: Science_Channel_Header.hh:271
@ CPMM_Positive_3_3_Voltage
Definition: Science_Channel_Header.hh:362
@ Optical_Bench_Tertiary_Mirror_Temperature
Definition: Science_Channel_Header.hh:325
@ CPMM_Positive_5_Voltage
Definition: Science_Channel_Header.hh:360
@ Instrument_Control_Board_Temperature
Definition: Science_Channel_Header.hh:374
@ Expose_Response
Definition: Science_Channel_Header.hh:288
@ Spider_Leg_270_Temperature
Definition: Science_Channel_Header.hh:349
@ Post_Binned_Pixels_Per_Line
Definition: Science_Channel_Header.hh:269
@ Spider_Leg_30_Temperature
Definition: Science_Channel_Header.hh:347
@ Checksum
Definition: Science_Channel_Header.hh:399
@ Expose_Time_Ticks
Definition: Science_Channel_Header.hh:283
@ Spider_Leg_150_Temperature
Definition: Science_Channel_Header.hh:348
@ Analog_Power_On_Start_Time
Definition: Science_Channel_Header.hh:281
@ Optical_Bench_Living_Room_Temperature
Definition: Science_Channel_Header.hh:329
@ Observation_ID
Definition: Science_Channel_Header.hh:274
@ Binning_Operation
Definition: Science_Channel_Header.hh:302
@ Heater_Current
Definition: Science_Channel_Header.hh:372
@ CPMM_Positive_3_3_Current
Definition: Science_Channel_Header.hh:363
@ FPA_Negative_Y_Temperature
Definition: Science_Channel_Header.hh:334
@ Channel_Readout_Ticks
Definition: Science_Channel_Header.hh:314
@ CPMM_Positive_2_5_Voltage
Definition: Science_Channel_Header.hh:364
@ Heater_Disabled_For_Exposure
Definition: Science_Channel_Header.hh:392
@ Digital_Power_Operation
Definition: Science_Channel_Header.hh:297
@ Focus_Position
Definition: Science_Channel_Header.hh:387
@ Heater_Zones_Pre_Exposure_State
Definition: Science_Channel_Header.hh:393
@ CPMM_PWS_Board_Temperature
Definition: Science_Channel_Header.hh:371
@ Optical_Bench_FPA_Temperature
Definition: Science_Channel_Header.hh:327
@ Channel_Readout_Command
Definition: Science_Channel_Header.hh:320
@ Expose_MRO_Time
Definition: Science_Channel_Header.hh:278
@ Heater_Zones_Enabled
Definition: Science_Channel_Header.hh:390
@ CPMM_Negative_5_Current
Definition: Science_Channel_Header.hh:369
@ Pixel_Bytes
Definition: Science_Channel_Header.hh:310
@ Primary_Mirror_Mount_Temperature
Definition: Science_Channel_Header.hh:336
@ Default_Trimming
Definition: Science_Channel_Header.hh:384
@ Mech_TLM_Board_Temperature
Definition: Science_Channel_Header.hh:373
@ Default_TDI
Definition: Science_Channel_Header.hh:383
@ Max_Storable_Lines_Exceeded
Definition: Science_Channel_Header.hh:316
bool is_valid() const
Tests if the component data is valid.
Definition: Science_Channel_Header.cc:1787
Setpoint
Heater_Controls word value type when the Heater_Mode is CLOSED_LOOP.
Definition: Science_Channel_Header.hh:466
@ HIGH
Definition: Science_Channel_Header.hh:468
@ LOW
Definition: Science_Channel_Header.hh:467
double time(Index element, Index index=0) const
Gets a Time Element value as a single real seconds value.
Definition: Science_Channel_Header.cc:936
bool FPGA_last_response_FM_moving() const
Tests if the FPGA_Last_Response Element indicates that the optics focus mechanism was moving during t...
Definition: Science_Channel_Header.cc:1073
Duty_Cycle
Heater_Controls word value type when the Heater_Mode is DUTY_CYCLES.
Definition: Science_Channel_Header.hh:473
@ ON_SECONDS
Definition: Science_Channel_Header.hh:474
@ OFF_SECONDS
Definition: Science_Channel_Header.hh:475
bool FPGA_last_response_FM_overheated() const
Tests if the FPGA_Last_Response Element indicates that the focus mechanism was overheated at the time...
Definition: Science_Channel_Header.cc:1055
static const u_int_32 FPGA_RESPONSE_CPMM_PWS_ENABLED_BIT_MASK
FPGA_Last_Response Element bit fields.
Definition: Science_Channel_Header.hh:447
static const u_int_32 FPGA_RESPONSE_HEATERS_ON_BIT_MASK
Definition: Science_Channel_Header.hh:455
u_int_32 FPGA_last_response_heaters_on() const
Gets the bit map from the FPGA_Last_Response Element that indicate which CCD heater elements were on ...
Definition: Science_Channel_Header.cc:1110
static const Index ARRAY_COUNTS[][2]
Data_Block array element value counts each keyed to an Element Index.
Definition: Science_Channel_Header.hh:435
static const u_int_32 FPGA_RESPONSE_FM_MOVING_BIT_MASK
Definition: Science_Channel_Header.hh:452
u_int_32 FPGA_last_response_stim_LEDs_on() const
Gets the bit map from the FPGA_Last_Response Element that indicate which stim lamps were on during th...
Definition: Science_Channel_Header.cc:1091
static const Conversion_Coefficients CONVERSION_COEFFICIENTS[]
The array of all Conversion_Coefficients.
Definition: Science_Channel_Header.hh:504
@ TOTAL_CONVERSION_COEFFICIENTS
Definition: Science_Channel_Header.hh:479
static bool is_sync(const void *data_at)
Tests if some data contains a sync sequence.
Definition: Science_Channel_Header.cc:1835
double convert(Index element, Index index=0) const
Converts an Element sensor value to its standard units.
Definition: Science_Channel_Header.cc:1147
static const char *const ID
Class identification name with source code version and date.
Definition: Science_Channel_Header.hh:250
static const char *const NAME
The component name.
Definition: Science_Channel_Header.hh:254
static const double CELSIUS_TO_KELVINS_OFFSET
Offset to be added to Celsius degrees to obtain Kelvins.
Definition: Science_Channel_Header.hh:508
idaeim::PVL::Aggregate * PVL_description() const
Produces a PVL description of the component for a PDS label.
Definition: Science_Channel_Header.cc:1538
idaeim::PVL::Aggregate * PVL() const
Produces a PVL rendition of the component.
Definition: Science_Channel_Header.cc:1250
bool FPGA_last_response_FM_relay_PHA_closed() const
Tests if the FPGA_Last_Response Element indicates that the focus mechanism relay PhA was closed at th...
Definition: Science_Channel_Header.cc:1037
static const Index COMPONENT_BYTES
Total number of bytes in the Data_Block.
Definition: Science_Channel_Header.hh:411
unsigned int u_int_32
PIRL::Data_Block::Index Index
Data_Block element index type.
Definition: Data_Component.hh:95
double seconds(const std::string &clock_count, Clock_Selector clock)
Converts a clock count representation to time in seconds.
Definition: Data_Component.cc:1021
University of Arizona.
Sensor conversion coefficients.
Definition: Science_Channel_Header.hh:493
const char * units
Units of measure after the conversion.
Definition: Science_Channel_Header.hh:497
double coefficient[TOTAL_CONVERSION_COEFFICIENTS]
Coefficient array for ploynomial.
Definition: Science_Channel_Header.hh:499
Index element
Element to which conversion applies.
Definition: Science_Channel_Header.hh:495