MISR Toolkit  1.5.1
MtkPathTimeRangeToOrbitList.c
Go to the documentation of this file.
1 /*===========================================================================
2 = =
3 = MtkPathTimeRangeToOrbitList =
4 = =
5 =============================================================================
6 
7  Jet Propulsion Laboratory
8  MISR
9  MISR Toolkit
10 
11  Copyright 2005, California Institute of Technology.
12  ALL RIGHTS RESERVED.
13  U.S. Government Sponsorship acknowledged.
14 
15 ============================================================================*/
16 
17 #include "MisrOrbitPath.h"
18 #include "MisrError.h"
19 #include <math.h>
20 #include <stdlib.h>
21 #include <string.h>
22 
41  int path,
42  const char *start_time,
43  const char *end_time,
44  int *orbitcnt,
45  int **orbitlist )
46 {
47  MTKt_status status_code; /* Return code of this function */
48  MTKt_status status; /* Return status */
49  int start_orbit;
50  int start_path;
51  int end_orbit;
52  int end_path;
53  int i;
54  int num_orbits;
55  int num_paths = 0;
56  int ret_path;
57  int *olist = NULL;
58 
59  if (path < 1 || path > 233)
61 
62  if (start_time == NULL || end_time == NULL || orbitcnt == NULL ||
63  orbitlist == NULL)
65 
66  status = MtkTimeToOrbitPath(start_time,&start_orbit,&start_path);
67  if (status == MTK_BAD_ARGUMENT)
68  {
69  status = MtkTimeToOrbitPath("2000-03-03T00:00:00Z",&start_orbit,&start_path);
70  MTK_ERR_COND_JUMP(status);
71  }
72  else if (status != MTK_SUCCESS)
73  MTK_ERR_CODE_JUMP(status)
74 
75  status = MtkTimeToOrbitPath(end_time,&end_orbit,&end_path);
76  MTK_ERR_COND_JUMP(status)
77 
78  if (start_orbit > end_orbit)
80 
81  num_orbits = end_orbit - start_orbit + 1;
82  olist = (int*)malloc((size_t)ceil(num_orbits / 233.0) * sizeof(int));
83  if (olist == NULL)
85 
86  for (i = 0; i < num_orbits; ++i)
87  {
88  status = MtkOrbitToPath(start_orbit + i,&ret_path);
89  if (status != MTK_SUCCESS)
90  MTK_ERR_CODE_JUMP(status);
91 
92  if (ret_path == path)
93  olist[num_paths++] = start_orbit + i;
94  }
95 
96  *orbitlist = (int*)malloc(num_paths * sizeof(int));
97  if (*orbitlist == NULL)
99 
100  *orbitcnt = num_paths;
101 
102  memcpy(*orbitlist,olist,num_paths * sizeof(int));
103 
104  free(olist);
105 
106  return MTK_SUCCESS;
107 
108 ERROR_HANDLE:
109  if (olist != NULL)
110  free(olist);
111 
112  return status_code;
113 }
MTKt_status MtkTimeToOrbitPath(const char *datetime, int *orbit, int *path)
Given time return orbit number and path number.
#define MTK_ERR_CODE_JUMP(code)
Definition: MisrError.h:175
MTKt_status MtkOrbitToPath(int orbit, int *path)
Given orbit number return path number.
MTKt_status MtkPathTimeRangeToOrbitList(int path, const char *start_time, const char *end_time, int *orbitcnt, int **orbitlist)
Given path and time range return list of orbits on path.
#define MTK_ERR_COND_JUMP(code)
Definition: MisrError.h:188
MTKt_status
Definition: MisrError.h:11

MISR Toolkit - Copyright © 2005 - 2020 Jet Propulsion Laboratory
Generated on Fri Jun 19 2020 22:49:51