OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
update_scan_metadata.c
Go to the documentation of this file.
1 #include "L1A_prototype.h"
2 #include "PGS_SMF.h"
3 #include "PGS_MODIS_35005.h"
4 #include "MD_metadata.h"
5 #include "PH_pkt_hdr.h"
6 #include "SC_scan.h"
7 
8 
10  PGSt_SMF_status packetStatus,
11  MD_SCAN_MET_t *scan_meta,
12  int16 *qual_value)
13 
14 /*
15 !C************************************************************************
16 
17 !Description: This function will set the scan-level metadata fields by
18  looking at the last packet.
19 
20 !Input Parameters:
21  PH_PACKET_HEADER_t packet_header ** Packet header **
22  PGSt_SMF_status packetStatus ** Results of the validation
23  of this packet **
24 
25 !Output Parameters:
26  int16 *qual_value ** Pixel quality value **
27 
28 !Input/Output Parameters:
29  MD_SCAN_MET_t *scan_meta ** Scan metadata **
30 
31 Return Values:
32  None
33 
34 Externally Defined:
35  MODIS_S_SUCCESS (PGS_SMF.h)
36  MODIS_E_CHECKSUM_NOT_VALID (PGS_MODIS_35005.h)
37  MD_SCAN_MET_t (MD_metadata.h)
38  MD_SCAN_DATA_PRESENCE (MD_metadata.h)
39  MD_BAD_CHECKSUM_PACKET (MD_metadata.h)
40  MD_DISCARDED_PACKET (MD_metadata.h)
41  MD_SOME_VALID_DATA_IN_SCAN (MD_metadata.h)
42  MD_SD_FRAMES_IN_SCAN (MD_metadata.h)
43  MD_SRCA_FRAMES_IN_SCAN (MD_metadata.h)
44  MD_BB_FRAMES_IN_SCAN (MD_metadata.h)
45  MD_SV_FRAMES_IN_SCAN (MD_metadata.h)
46  MD_EV_FRAMES_IN_SCAN (MD_metadata.h)
47  MD_DAY_SCAN (MD_metadata.h)
48  MD_NIGHT_SCAN (MD_metadata.h)
49  PH_PACKET_HEADER_t (PH_pkt_hdr.h)
50  PH_SEC_PKT_TYPE_ENG1_GROUP (PH_pkt_hdr.h)
51  PH_SEC_PKT_TYPE_ENG2_GROUP (PH_pkt_hdr.h)
52  PH_SEC_PKT_TYPE_DAY_GROUP (PH_pkt_hdr.h)
53  PH_MOD_SOURCE_ID_TYPE_FLAG_EARTH (PH_pkt_hdr.h)
54  PH_MOD_SOURCE_ID_CAL_TYPE_SOLAR_DIFFUSER_SOURCE (PH_pkt_hdr.h)
55  PH_MOD_SOURCE_ID_CAL_TYPE_SRCA_CAL_SOURCE (PH_pkt_hdr.h)
56  PH_MOD_SOURCE_ID_CAL_TYPE_BLACKBODY_SOURCE (PH_pkt_hdr.h)
57  PH_MOD_SOURCE_ID_CAL_TYPE_SPACE_SOURCE (PH_pkt_hdr.h)
58  SC_GOOD_PIXEL_PACKET (SC_scan.h)
59  SC_BAD_CHECKSUM_PACKET (SC_scan.h)
60  SC_DISCARDED_PACKET (SC_scan.h)
61  int16 (hdfi.h)
62 
63 Called By:
64  process_a_scan
65 
66 Routines Called:
67  None
68 
69 !Revision History:
70  Revision 2.1 1997/08/25 11:50 EDT
71  Timi Adelekan/SAIC/GSC (adelekan@ltpmail.gsfc.nasa.gov)
72  Original design.
73 
74  Revision 2.0 1997/07/25 10:00
75  Tom Johnson/GSC (johnson@ltpmail.gsfc.nasa.gov)
76  Updated for Version 2 from Version 1
77 
78  Revision 1.0 1997/06/18 16:40 EDT
79  Timi Adelekan/SAIC/GSC (adelekan@ltpmail.gsfc.nasa.gov)
80  Baseline from Version 1.
81 
82 !Team-unique Header:
83  This software is developed by the MODIS Science
84  Data Support Team (SDST) for the National Aeronautics
85  and Space Administration (NASA), Goddard Space Flight
86  Center (GSFC), under contract NAS5-32373.
87 
88 !References and Credits:
89  None
90 
91 !Design Notes:
92  This routine assumes that the packet has been validated
93  before this routine is executed. No validation of data
94  is performed in this routine.
95 
96 !END*************************************************************************
97 */
98 {
99  if (packetStatus == MODIS_S_SUCCESS) {
100  *qual_value = SC_GOOD_PIXEL_PACKET;
101  scan_meta->packet_scan_count = packet_header.scan_cnt;
102 
103  if ((scan_meta->ccsds_apids[0] == SC_FILL_VALUE) ||
104  (scan_meta->ccsds_apids[0] == packet_header.apid))
105  scan_meta->ccsds_apids[0] = packet_header.apid;
106  else if ((scan_meta->ccsds_apids[1] == SC_FILL_VALUE) ||
107  (scan_meta->ccsds_apids[1] == packet_header.apid))
108  scan_meta->ccsds_apids[1] = packet_header.apid;
109  else if ((scan_meta->ccsds_apids[2] == SC_FILL_VALUE) ||
110  (scan_meta->ccsds_apids[2] == packet_header.apid))
111  scan_meta->ccsds_apids[2] = packet_header.apid;
112 
113  scan_meta->packet_expedited_data_flag = packet_header.QL_flag;
114  scan_meta->mirror_side = packet_header.mirror_side;
117 
118  if ((packet_header.pkt_type == PH_SEC_PKT_TYPE_ENG1_GROUP) ||
119  (packet_header.pkt_type == PH_SEC_PKT_TYPE_ENG2_GROUP)) {
120  if (scan_meta->ev_start_time < 0.0)
121  scan_meta->ev_start_time = packet_header.pkt_TAI_time;
122  }
123  else if (packet_header.source_ID_type_flag ==
125  scan_meta->ev_start_time = packet_header.pkt_TAI_time;
126  if(scan_meta->frame_count_array[MD_EV_FRAMES_IN_SCAN] <
127  packet_header.earth_frame_cnt)
129  packet_header.earth_frame_cnt;
130 
131  if (packet_header.pkt_type == PH_SEC_PKT_TYPE_DAY_GROUP)
132  {
133  memset(scan_meta->scan_type, '\0', sizeof(scan_meta->scan_type));
134  strcpy(scan_meta->scan_type, MD_DAY_SCAN);
135  }
136  else
137  {
138  memset(scan_meta->scan_type, '\0', sizeof(scan_meta->scan_type));
139  strcpy(scan_meta->scan_type, MD_NIGHT_SCAN);
140  }
141  }
142  else {
143  switch (packet_header.cal_type) {
145  scan_meta->sd_start_time = packet_header.pkt_TAI_time;
146  if(scan_meta->frame_count_array[MD_SD_FRAMES_IN_SCAN] <
147  packet_header.cal_frame_cnt)
149  packet_header.cal_frame_cnt;
150  break;
151 
153  scan_meta->srca_start_time = packet_header.pkt_TAI_time;
155  packet_header.cal_frame_cnt)
157  packet_header.cal_frame_cnt;
158  scan_meta->srca_cal_mode = packet_header.cal_mode;
159  break;
160 
162  scan_meta->bb_start_time = packet_header.pkt_TAI_time;
163  if(scan_meta->frame_count_array[MD_BB_FRAMES_IN_SCAN] <
164  packet_header.cal_frame_cnt)
166  packet_header.cal_frame_cnt;
167  break;
168 
170  scan_meta->sv_start_time = packet_header.pkt_TAI_time;
171  if(scan_meta->frame_count_array[MD_SV_FRAMES_IN_SCAN] <
172  packet_header.cal_frame_cnt)
174  packet_header.cal_frame_cnt;
175  break;
176  }
177  }
178  }
179  else {
180  if (packetStatus == MODIS_E_CHECKSUM_NOT_VALID) {
181  *qual_value = (int16)SC_BAD_CHECKSUM_PACKET;
183  scan_meta->scan_qual_array[MD_BAD_CHECKSUM_PACKET] + 1;
184  scan_meta->scan_qual_array[MD_DISCARDED_PACKET] =
185  scan_meta->scan_qual_array[MD_DISCARDED_PACKET] + 1;
186  }
187  else {
188  *qual_value = (int16)SC_DISCARDED_PACKET;
189  scan_meta->scan_qual_array[MD_DISCARDED_PACKET] =
190  scan_meta->scan_qual_array[MD_DISCARDED_PACKET] + 1;
191  }
192  }
193 
194 }
integer, parameter int16
Definition: cubeio.f90:3
#define MD_BB_FRAMES_IN_SCAN
Definition: MD_metadata.h:138
int16 srca_cal_mode
Definition: MD_metadata.h:226
int16 packet_expedited_data_flag
Definition: MD_metadata.h:229
#define MD_EV_FRAMES_IN_SCAN
Definition: MD_metadata.h:135
#define MODIS_E_CHECKSUM_NOT_VALID
#define MD_SCAN_DATA_PRESENCE
Definition: MD_metadata.h:146
#define SC_BAD_CHECKSUM_PACKET
Definition: SC_scan.h:133
#define PH_MOD_SOURCE_ID_CAL_TYPE_BLACKBODY_SOURCE
Definition: PH_pkt_hdr.h:202
#define MD_SOME_VALID_DATA_IN_SCAN
Definition: MD_metadata.h:128
#define MD_DAY_SCAN
Definition: MD_metadata.h:97
#define PH_SEC_PKT_TYPE_ENG2_GROUP
Definition: PH_pkt_hdr.h:164
#define PH_MOD_SOURCE_ID_CAL_TYPE_SOLAR_DIFFUSER_SOURCE
Definition: PH_pkt_hdr.h:200
float64 bb_start_time
Definition: MD_metadata.h:223
#define PH_MOD_SOURCE_ID_CAL_TYPE_SPACE_SOURCE
Definition: PH_pkt_hdr.h:203
int16 mirror_side
Definition: MD_metadata.h:230
#define MD_BAD_CHECKSUM_PACKET
Definition: MD_metadata.h:148
float64 sv_start_time
Definition: MD_metadata.h:224
#define PH_MOD_SOURCE_ID_TYPE_FLAG_EARTH
Definition: PH_pkt_hdr.h:188
#define MD_SD_FRAMES_IN_SCAN
Definition: MD_metadata.h:136
#define SC_FILL_VALUE
Definition: SC_scan.h:141
#define MD_NIGHT_SCAN
Definition: MD_metadata.h:98
int32 scan_qual_array[4]
Definition: MD_metadata.h:231
float64 ev_start_time
Definition: MD_metadata.h:225
PGSt_double pkt_TAI_time
Definition: PH_pkt_hdr.h:251
#define MD_SV_FRAMES_IN_SCAN
Definition: MD_metadata.h:139
int16 frame_count_array[6]
Definition: MD_metadata.h:219
#define PH_SEC_PKT_TYPE_DAY_GROUP
Definition: PH_pkt_hdr.h:161
#define PH_SEC_PKT_TYPE_ENG1_GROUP
Definition: PH_pkt_hdr.h:163
#define PH_MOD_SOURCE_ID_CAL_TYPE_SRCA_CAL_SOURCE
Definition: PH_pkt_hdr.h:201
#define MODIS_S_SUCCESS
float64 sd_start_time
Definition: MD_metadata.h:221
#define MD_DISCARDED_PACKET
Definition: MD_metadata.h:149
float64 srca_start_time
Definition: MD_metadata.h:222
#define SC_DISCARDED_PACKET
Definition: SC_scan.h:134
#define SC_GOOD_PIXEL_PACKET
Definition: SC_scan.h:131
#define MD_SRCA_FRAMES_IN_SCAN
Definition: MD_metadata.h:137
How many dimensions is the output array Default is Not sure if anything above will work correctly strcpy(l2prod->title, "no title yet")
int16 ccsds_apids[3]
Definition: MD_metadata.h:228
int16 packet_scan_count
Definition: MD_metadata.h:227
void update_scan_metadata(PH_PACKET_HEADER_t packet_header, PGSt_SMF_status packetStatus, MD_SCAN_MET_t *scan_meta, int16 *qual_value)
char scan_type[10]
Definition: MD_metadata.h:220