roc-film 1.13.4__py3-none-any.whl → 1.14.0__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- roc/__init__.py +2 -1
- roc/film/__init__.py +2 -2
- roc/film/commands.py +372 -323
- roc/film/config/__init__.py +0 -1
- roc/film/constants.py +101 -65
- roc/film/descriptor.json +126 -95
- roc/film/exceptions.py +28 -27
- roc/film/tasks/__init__.py +16 -16
- roc/film/tasks/cat_solo_hk.py +86 -74
- roc/film/tasks/cdf_postpro.py +438 -309
- roc/film/tasks/check_dds.py +39 -45
- roc/film/tasks/db_to_anc_bia_sweep_table.py +381 -0
- roc/film/tasks/dds_to_l0.py +232 -180
- roc/film/tasks/export_solo_coord.py +147 -0
- roc/film/tasks/file_handler.py +91 -75
- roc/film/tasks/l0_to_hk.py +117 -103
- roc/film/tasks/l0_to_l1_bia_current.py +38 -30
- roc/film/tasks/l0_to_l1_bia_sweep.py +417 -329
- roc/film/tasks/l0_to_l1_sbm.py +250 -208
- roc/film/tasks/l0_to_l1_surv.py +185 -130
- roc/film/tasks/make_daily_tm.py +40 -37
- roc/film/tasks/merge_tcreport.py +77 -71
- roc/film/tasks/merge_tmraw.py +102 -89
- roc/film/tasks/parse_dds_xml.py +21 -20
- roc/film/tasks/set_l0_utc.py +51 -49
- roc/film/tests/cdf_compare.py +565 -0
- roc/film/tests/hdf5_compare.py +84 -62
- roc/film/tests/test_dds_to_l0.py +93 -51
- roc/film/tests/test_dds_to_tc.py +8 -11
- roc/film/tests/test_dds_to_tm.py +8 -10
- roc/film/tests/test_film.py +161 -116
- roc/film/tests/test_l0_to_hk.py +64 -36
- roc/film/tests/test_l0_to_l1_bia.py +10 -14
- roc/film/tests/test_l0_to_l1_sbm.py +14 -19
- roc/film/tests/test_l0_to_l1_surv.py +68 -41
- roc/film/tests/test_metadata.py +21 -20
- roc/film/tests/tests.py +743 -396
- roc/film/tools/__init__.py +5 -5
- roc/film/tools/dataset_tasks.py +34 -2
- roc/film/tools/file_helpers.py +390 -269
- roc/film/tools/l0.py +402 -324
- roc/film/tools/metadata.py +147 -127
- roc/film/tools/skeleton.py +12 -17
- roc/film/tools/tools.py +109 -92
- roc/film/tools/xlsx2skt.py +161 -139
- {roc_film-1.13.4.dist-info → roc_film-1.14.0.dist-info}/LICENSE +127 -125
- roc_film-1.14.0.dist-info/METADATA +60 -0
- roc_film-1.14.0.dist-info/RECORD +50 -0
- {roc_film-1.13.4.dist-info → roc_film-1.14.0.dist-info}/WHEEL +1 -1
- roc/film/tasks/l0_to_anc_bia_sweep_table.py +0 -348
- roc_film-1.13.4.dist-info/METADATA +0 -120
- roc_film-1.13.4.dist-info/RECORD +0 -48
roc/film/commands.py
CHANGED
@@ -13,15 +13,12 @@ from poppy.core.logger import logger
|
|
13
13
|
|
14
14
|
from roc.film.tools.file_helpers import get_output_dir, get_products_dir, is_output_dir
|
15
15
|
from roc.film.tools import IDBToExcel
|
16
|
-
from roc.film.tools import paths,
|
17
|
-
valid_time, \
|
18
|
-
valid_single_file, \
|
19
|
-
setup_lock, valid_date
|
16
|
+
from roc.film.tools import paths, valid_time, valid_single_file, setup_lock, valid_date
|
20
17
|
|
21
18
|
from roc.film.tasks import L0ToHk
|
22
19
|
from roc.film.tasks import L0ToL1Surv
|
23
20
|
from roc.film.tasks import L0ToL1Sbm
|
24
|
-
from roc.film.tasks.
|
21
|
+
from roc.film.tasks.db_to_anc_bia_sweep_table import DbToAncBiaSweepTable
|
25
22
|
from roc.film.tasks.l0_to_l1_bia_current import L0ToL1BiaCurrent
|
26
23
|
from roc.film.tasks import L0ToL1BiaSweep
|
27
24
|
from roc.film.tasks import MoveFailedFiles, MoveToProdDir
|
@@ -35,17 +32,24 @@ from roc.film.tasks.make_daily_tm import MakeDailyTm
|
|
35
32
|
from roc.film.tasks.merge_tcreport import MergeTcReport
|
36
33
|
from roc.film.tasks.merge_tmraw import MergeTmRaw
|
37
34
|
from roc.film.tasks.parse_dds_xml import ParseDdsXml
|
38
|
-
from roc.film.
|
35
|
+
from roc.film.tasks.export_solo_coord import ExportSoloHeeCoord
|
36
|
+
from roc.film.constants import (
|
37
|
+
SCOS_HEADER_BYTES,
|
38
|
+
TEMP_DIR,
|
39
|
+
CDFCONVERT_PATH,
|
40
|
+
CDF_POST_PRO_OPTS_ARGS,
|
41
|
+
)
|
39
42
|
|
40
43
|
|
41
44
|
class FilmCommands(Command):
|
42
45
|
"""
|
43
46
|
Manage the commands relative to the FILM plugin.
|
44
47
|
"""
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
48
|
+
|
49
|
+
__command__ = "film"
|
50
|
+
__command_name__ = "film"
|
51
|
+
__parent__ = "master"
|
52
|
+
__parent_arguments__ = ["base"]
|
49
53
|
__help__ = """
|
50
54
|
Commands relative to the FILM plugin, responsible for generating and
|
51
55
|
storing data products files from the ROC pipeline.
|
@@ -64,8 +68,8 @@ class FilmCommands(Command):
|
|
64
68
|
# To indicate that output file production is in progress
|
65
69
|
# lock file is automatically deleted at the end.
|
66
70
|
parser.add_argument(
|
67
|
-
|
68
|
-
help=
|
71
|
+
"--lock-file",
|
72
|
+
help="Name of the lock temporary file.",
|
69
73
|
default=None,
|
70
74
|
nargs=1,
|
71
75
|
)
|
@@ -74,34 +78,34 @@ class FilmCommands(Command):
|
|
74
78
|
# Output files will be moved into this directory at the end of the run
|
75
79
|
# (If not passed, output files will stay in the output directory)
|
76
80
|
parser.add_argument(
|
77
|
-
|
81
|
+
"--products-dir",
|
78
82
|
type=str,
|
79
|
-
help=
|
80
|
-
|
83
|
+
help="Path of the directory where output file(s) folder"
|
84
|
+
" must be moved at the end of the process",
|
81
85
|
default=None,
|
82
86
|
nargs=1,
|
83
87
|
)
|
84
88
|
|
85
89
|
# specify the IDB version to use
|
86
90
|
parser.add_argument(
|
87
|
-
|
88
|
-
help=
|
91
|
+
"--idb-version",
|
92
|
+
help="IDB version to use.",
|
89
93
|
default=None,
|
90
94
|
nargs=1,
|
91
95
|
)
|
92
96
|
|
93
97
|
# specify the IDB source to use
|
94
98
|
parser.add_argument(
|
95
|
-
|
96
|
-
help=
|
99
|
+
"--idb-source",
|
100
|
+
help="IDB source to use (MIB, SRDB or PALISADE).",
|
97
101
|
default=None,
|
98
102
|
nargs=1,
|
99
103
|
)
|
100
104
|
|
101
105
|
# Get path of the master binary CDF directory
|
102
106
|
parser.add_argument(
|
103
|
-
|
104
|
-
|
107
|
+
"-m",
|
108
|
+
"--master-cdf-dir",
|
105
109
|
help="""
|
106
110
|
The absolute path to the directory where the master binary CDF are stored.
|
107
111
|
If not provided, try to check the value of
|
@@ -115,17 +119,17 @@ class FilmCommands(Command):
|
|
115
119
|
|
116
120
|
# Specify the value of the Data_version attribute (and filename)
|
117
121
|
parser.add_argument(
|
118
|
-
|
119
|
-
|
120
|
-
help=
|
122
|
+
"-v",
|
123
|
+
"--data-version",
|
124
|
+
help="Define the Data_version attribute value for output CDF.",
|
121
125
|
default=None,
|
122
|
-
nargs=1
|
126
|
+
nargs=1,
|
123
127
|
)
|
124
128
|
|
125
129
|
parser.add_argument(
|
126
|
-
|
127
|
-
|
128
|
-
help=
|
130
|
+
"-s",
|
131
|
+
"--start-time",
|
132
|
+
help="Data file production start time. "
|
129
133
|
"Expected datetime format is 'YYYY-MM-DDThh:mm:ss'.",
|
130
134
|
type=valid_time,
|
131
135
|
default=None,
|
@@ -133,10 +137,10 @@ class FilmCommands(Command):
|
|
133
137
|
)
|
134
138
|
|
135
139
|
parser.add_argument(
|
136
|
-
|
137
|
-
|
138
|
-
help=
|
139
|
-
|
140
|
+
"-e",
|
141
|
+
"--end-time",
|
142
|
+
help="Data file production end time. "
|
143
|
+
"Expected datetime format is 'YYYY-MM-DDThh:mm:ss'.",
|
140
144
|
type=valid_time,
|
141
145
|
default=None,
|
142
146
|
nargs=1,
|
@@ -144,28 +148,28 @@ class FilmCommands(Command):
|
|
144
148
|
|
145
149
|
# Give the month to process (will replace start_time/end_time values)
|
146
150
|
parser.add_argument(
|
147
|
-
|
148
|
-
action=
|
151
|
+
"--monthly",
|
152
|
+
action="store_true",
|
149
153
|
default=False,
|
150
|
-
help=
|
154
|
+
help="Generate output monthly files",
|
151
155
|
)
|
152
156
|
|
153
157
|
# Remove SCOS2000 header in the binary packet
|
154
158
|
parser.add_argument(
|
155
|
-
|
159
|
+
"--scos-header",
|
156
160
|
nargs=1,
|
157
161
|
type=int,
|
158
162
|
default=[SCOS_HEADER_BYTES],
|
159
|
-
help=
|
160
|
-
|
161
|
-
|
163
|
+
help="Length (in bytes) of SCOS2000 header to be removed"
|
164
|
+
" from the TM packet in the DDS file."
|
165
|
+
f" (Default value is {SCOS_HEADER_BYTES} bytes.)",
|
162
166
|
)
|
163
167
|
|
164
168
|
# Do no process/write invalid packet(s)
|
165
169
|
parser.add_argument(
|
166
|
-
|
167
|
-
action=
|
168
|
-
help=
|
170
|
+
"--no-invalid-packet",
|
171
|
+
action="store_true",
|
172
|
+
help="Do not keep invalid packet(s).",
|
169
173
|
)
|
170
174
|
|
171
175
|
# If True, tag any output file with "-cdag" suffix in the descriptor field
|
@@ -173,24 +177,31 @@ class FilmCommands(Command):
|
|
173
177
|
# Indicating that it is a preliminary files to be distributed to the
|
174
178
|
# Calibration Data Access Group (CDAG) only
|
175
179
|
parser.add_argument(
|
176
|
-
|
177
|
-
action=
|
180
|
+
"--cdag",
|
181
|
+
action="store_true",
|
178
182
|
help='If True, add the "cdag" suffix to the descriptor field of L1 CDF filename.',
|
179
183
|
default=False,
|
180
184
|
)
|
181
185
|
|
182
186
|
# Do not use NAIF SPICE toolkit to compute time/ancillary data
|
183
187
|
parser.add_argument(
|
184
|
-
|
185
|
-
action=
|
186
|
-
help=
|
188
|
+
"--no-spice",
|
189
|
+
action="store_true",
|
190
|
+
help="Do not use NAIF SPICE toolkit to compute time/ancillary data.",
|
191
|
+
)
|
192
|
+
|
193
|
+
# Do not move output files in the final target directory ("products")
|
194
|
+
parser.add_argument(
|
195
|
+
"--no-move",
|
196
|
+
action="store_true",
|
197
|
+
help="Do not move output files in the final target directory.",
|
187
198
|
)
|
188
199
|
|
189
200
|
# Force data file creation
|
190
201
|
parser.add_argument(
|
191
|
-
|
192
|
-
action=
|
193
|
-
help=
|
202
|
+
"--force",
|
203
|
+
action="store_true",
|
204
|
+
help="Force data file creation.",
|
194
205
|
)
|
195
206
|
|
196
207
|
|
@@ -203,30 +214,30 @@ class ClassifyTmRawCommand(Command):
|
|
203
214
|
by default new version of the daily file is created and
|
204
215
|
only new DDS packets have been inserted.
|
205
216
|
"""
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
217
|
+
|
218
|
+
__command__ = "film_classify_tmraw"
|
219
|
+
__command_name__ = "classify_tmraw"
|
220
|
+
__parent__ = "film"
|
221
|
+
__parent_arguments__ = ["base"]
|
210
222
|
__help__ = """
|
211
223
|
Command to classify input SolO DDS TmRaw files as daily file(s).
|
212
224
|
"""
|
213
225
|
|
214
226
|
def add_arguments(self, parser):
|
215
|
-
|
216
227
|
# path of input DDS TmRaw response file(s)
|
217
228
|
parser.add_argument(
|
218
|
-
|
229
|
+
"--dds-files",
|
219
230
|
help="""
|
220
231
|
List of input SolO DDS TmRaw response XML file(s) to classify.
|
221
232
|
""",
|
222
233
|
type=str,
|
223
|
-
nargs=
|
234
|
+
nargs="+",
|
224
235
|
required=True,
|
225
236
|
)
|
226
237
|
|
227
238
|
parser.add_argument(
|
228
|
-
|
229
|
-
help=
|
239
|
+
"--processed-dds-dir",
|
240
|
+
help="""
|
230
241
|
Directory where processed DDS file(s) must be moved at the end.
|
231
242
|
""",
|
232
243
|
type=str,
|
@@ -235,8 +246,8 @@ class ClassifyTmRawCommand(Command):
|
|
235
246
|
)
|
236
247
|
|
237
248
|
parser.add_argument(
|
238
|
-
|
239
|
-
help=
|
249
|
+
"--failed-dds-dir",
|
250
|
+
help="""
|
240
251
|
Directory where failed DDS file(s) must be moved at the end.
|
241
252
|
""",
|
242
253
|
type=str,
|
@@ -245,28 +256,28 @@ class ClassifyTmRawCommand(Command):
|
|
245
256
|
)
|
246
257
|
|
247
258
|
parser.add_argument(
|
248
|
-
|
259
|
+
"--archive-path",
|
249
260
|
type=str,
|
250
261
|
default=None,
|
251
|
-
help=
|
252
|
-
|
262
|
+
help="Root path of the archive local directory."
|
263
|
+
"If defined, the pipeline first check if daily file(s) already exist(s) in the archive",
|
253
264
|
nargs=1,
|
254
265
|
)
|
255
266
|
|
256
267
|
# Clear input DDS files
|
257
268
|
parser.add_argument(
|
258
|
-
|
259
|
-
action=
|
260
|
-
help=
|
269
|
+
"--clear-dds",
|
270
|
+
action="store_true",
|
271
|
+
help="If passed, then remove input list of processed/failed Dds.",
|
261
272
|
default=False,
|
262
273
|
)
|
263
274
|
|
264
275
|
parser.add_argument(
|
265
|
-
|
276
|
+
"--filter-date",
|
266
277
|
type=valid_date,
|
267
278
|
default=[],
|
268
|
-
help=
|
269
|
-
nargs=
|
279
|
+
help="List of date(s) to process (format is YYYYMMDD)",
|
280
|
+
nargs="+",
|
270
281
|
)
|
271
282
|
|
272
283
|
def setup_tasks(self, pipeline):
|
@@ -283,9 +294,16 @@ class ClassifyTmRawCommand(Command):
|
|
283
294
|
# create the tasks and their dependencies :
|
284
295
|
# load an input DDS TmRaw, then extract time,
|
285
296
|
# then generate or update daily files
|
286
|
-
|
287
|
-
|
288
|
-
|
297
|
+
(
|
298
|
+
pipeline
|
299
|
+
| start
|
300
|
+
| loop_start
|
301
|
+
| loop_end
|
302
|
+
| MakeDailyTm()
|
303
|
+
| MoveFailedFiles()
|
304
|
+
| CopyFailedDds()
|
305
|
+
| end
|
306
|
+
)
|
289
307
|
|
290
308
|
# define the start points of the pipeline
|
291
309
|
pipeline.start = start
|
@@ -306,30 +324,30 @@ class ClassifyTcReportCommand(Command):
|
|
306
324
|
by default new version of the daily file is created and
|
307
325
|
only new DDS packets have been inserted.
|
308
326
|
"""
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
327
|
+
|
328
|
+
__command__ = "film_classify_tcreport"
|
329
|
+
__command_name__ = "classify_tcreport"
|
330
|
+
__parent__ = "film"
|
331
|
+
__parent_arguments__ = ["base"]
|
313
332
|
__help__ = """
|
314
333
|
Command to classify input SolO DDS TcReport files as daily file(s).
|
315
334
|
"""
|
316
335
|
|
317
336
|
def add_arguments(self, parser):
|
318
|
-
|
319
337
|
# List of input DDS TcReport response files
|
320
338
|
parser.add_argument(
|
321
|
-
|
339
|
+
"--dds-files",
|
322
340
|
help="""
|
323
341
|
List of SolO DDS TcReport response XML file(s) to classify.
|
324
342
|
""",
|
325
343
|
type=str,
|
326
|
-
nargs=
|
344
|
+
nargs="+",
|
327
345
|
required=True,
|
328
346
|
)
|
329
347
|
|
330
348
|
parser.add_argument(
|
331
|
-
|
332
|
-
help=
|
349
|
+
"--processed-dds-dir",
|
350
|
+
help="""
|
333
351
|
Directory where processed DDS file(s) must be moved at the end.
|
334
352
|
""",
|
335
353
|
type=str,
|
@@ -338,8 +356,8 @@ class ClassifyTcReportCommand(Command):
|
|
338
356
|
)
|
339
357
|
|
340
358
|
parser.add_argument(
|
341
|
-
|
342
|
-
help=
|
359
|
+
"--failed-dds-dir",
|
360
|
+
help="""
|
343
361
|
Directory where failed DDS file(s) must be moved at the end.
|
344
362
|
""",
|
345
363
|
type=str,
|
@@ -348,28 +366,28 @@ class ClassifyTcReportCommand(Command):
|
|
348
366
|
)
|
349
367
|
|
350
368
|
parser.add_argument(
|
351
|
-
|
369
|
+
"--archive-path",
|
352
370
|
type=str,
|
353
371
|
default=None,
|
354
372
|
nargs=1,
|
355
|
-
help=
|
356
|
-
|
373
|
+
help="Root path of the archive local directory."
|
374
|
+
"If defined, the pipeline first check if daily file(s) already exist(s) in the archive",
|
357
375
|
)
|
358
376
|
|
359
377
|
# Clear input DDS files
|
360
378
|
parser.add_argument(
|
361
|
-
|
362
|
-
action=
|
363
|
-
help=
|
379
|
+
"--clear-dds",
|
380
|
+
action="store_true",
|
381
|
+
help="If passed, then remove input list of processed/failed Dds.",
|
364
382
|
default=False,
|
365
383
|
)
|
366
384
|
|
367
385
|
parser.add_argument(
|
368
|
-
|
386
|
+
"--filter-date",
|
369
387
|
type=valid_date,
|
370
388
|
default=[],
|
371
|
-
help=
|
372
|
-
nargs=
|
389
|
+
help="List of date(s) to process (format is YYYYMMDD)",
|
390
|
+
nargs="+",
|
373
391
|
)
|
374
392
|
|
375
393
|
def setup_tasks(self, pipeline):
|
@@ -385,9 +403,15 @@ class ClassifyTcReportCommand(Command):
|
|
385
403
|
# create the tasks and their dependencies :
|
386
404
|
# load an input DDS TcReport, then extract time,
|
387
405
|
# then generate or update daily files
|
388
|
-
|
389
|
-
|
390
|
-
|
406
|
+
(
|
407
|
+
pipeline
|
408
|
+
| start
|
409
|
+
| loop_start
|
410
|
+
| MergeTcReport()
|
411
|
+
| CopyProcessedDds()
|
412
|
+
| loop_end
|
413
|
+
| MoveFailedFiles()
|
414
|
+
)
|
391
415
|
|
392
416
|
# define the start points of the pipeline
|
393
417
|
pipeline.start = start
|
@@ -403,38 +427,38 @@ class ProcessSoloHkCommand(Command):
|
|
403
427
|
"""
|
404
428
|
Command to process input set of SolO DDS Param file(s) containing
|
405
429
|
Solar Orbiter HK data.
|
406
|
-
Input data are
|
430
|
+
Input data are saved into daily XML files when parameters are sorted
|
407
431
|
by ascending times
|
408
432
|
|
409
433
|
If output files already found for a given date in the local archive,
|
410
434
|
by default new version of the daily file is created and
|
411
435
|
only new Param elements have been inserted.
|
412
436
|
"""
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
437
|
+
|
438
|
+
__command__ = "film_process_solohk"
|
439
|
+
__command_name__ = "process_solohk"
|
440
|
+
__parent__ = "film"
|
441
|
+
__parent_arguments__ = ["base"]
|
417
442
|
__help__ = """
|
418
443
|
Command to make daily XML file(s) from an
|
419
444
|
input set of SolO DDS Solo HK param files
|
420
445
|
"""
|
421
446
|
|
422
447
|
def add_arguments(self, parser):
|
423
|
-
|
424
448
|
# path of input DDS TmRaw response file(s)
|
425
449
|
parser.add_argument(
|
426
|
-
|
450
|
+
"--dds-files",
|
427
451
|
help="""
|
428
452
|
List of input SolO DDS Param response XML file(s) to process.
|
429
453
|
""",
|
430
454
|
type=str,
|
431
|
-
nargs=
|
455
|
+
nargs="+",
|
432
456
|
required=True,
|
433
457
|
)
|
434
458
|
|
435
459
|
parser.add_argument(
|
436
|
-
|
437
|
-
help=
|
460
|
+
"--processed-dds-dir",
|
461
|
+
help="""
|
438
462
|
Directory where processed DDS file(s) must be moved at the end.
|
439
463
|
""",
|
440
464
|
type=str,
|
@@ -443,8 +467,8 @@ class ProcessSoloHkCommand(Command):
|
|
443
467
|
)
|
444
468
|
|
445
469
|
parser.add_argument(
|
446
|
-
|
447
|
-
help=
|
470
|
+
"--failed-dds-dir",
|
471
|
+
help="""
|
448
472
|
Directory where failed DDS file(s) must be moved at the end.
|
449
473
|
""",
|
450
474
|
type=str,
|
@@ -453,28 +477,28 @@ class ProcessSoloHkCommand(Command):
|
|
453
477
|
)
|
454
478
|
|
455
479
|
parser.add_argument(
|
456
|
-
|
480
|
+
"--archive-path",
|
457
481
|
type=str,
|
458
482
|
default=None,
|
459
|
-
help=
|
460
|
-
|
483
|
+
help="Root path of the archive local directory."
|
484
|
+
"If defined, the pipeline first check if daily file(s) already exist(s) in the archive",
|
461
485
|
nargs=1,
|
462
486
|
)
|
463
487
|
|
464
488
|
# Clear input DDS files
|
465
489
|
parser.add_argument(
|
466
|
-
|
467
|
-
action=
|
468
|
-
help=
|
490
|
+
"--clear-dds",
|
491
|
+
action="store_true",
|
492
|
+
help="If passed, then remove input list of processed/failed Dds.",
|
469
493
|
default=False,
|
470
494
|
)
|
471
495
|
|
472
496
|
parser.add_argument(
|
473
|
-
|
497
|
+
"--filter-date",
|
474
498
|
type=valid_date,
|
475
499
|
default=[],
|
476
|
-
help=
|
477
|
-
nargs=
|
500
|
+
help="List of date(s) to process (format is YYYYMMDD)",
|
501
|
+
nargs="+",
|
478
502
|
)
|
479
503
|
|
480
504
|
def setup_tasks(self, pipeline):
|
@@ -489,9 +513,7 @@ class ProcessSoloHkCommand(Command):
|
|
489
513
|
# create the tasks and their dependencies :
|
490
514
|
# load an input DDS SOLO HK Param, then extract time,
|
491
515
|
# then generate or update daily files
|
492
|
-
pipeline | start | CopyProcessedDds()
|
493
|
-
| CopyFailedDds() \
|
494
|
-
| end
|
516
|
+
pipeline | start | CopyProcessedDds() | CopyFailedDds() | end
|
495
517
|
|
496
518
|
# define the start points of the pipeline
|
497
519
|
pipeline.start = start
|
@@ -503,23 +525,23 @@ class DdsToLOCommand(Command):
|
|
503
525
|
Command to produce a RPW L0 file for a given day
|
504
526
|
from an input set of MOC DDS response XML file(s).
|
505
527
|
"""
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
528
|
+
|
529
|
+
__command__ = "film_dds_to_l0"
|
530
|
+
__command_name__ = "dds_to_l0"
|
531
|
+
__parent__ = "film"
|
532
|
+
__parent_arguments__ = ["base"]
|
510
533
|
__help__ = """
|
511
534
|
Command to generate a RPW L0 XML daily file
|
512
535
|
from an input set of MOC DDS response XML files.
|
513
536
|
"""
|
514
537
|
|
515
538
|
def add_arguments(self, parser):
|
516
|
-
|
517
539
|
# add lstable argument
|
518
540
|
# LSTableMixin.add_arguments(parser)
|
519
541
|
|
520
542
|
#
|
521
543
|
parser.add_argument(
|
522
|
-
|
544
|
+
"datetime",
|
523
545
|
help="""
|
524
546
|
Date for which L0 file must produced.
|
525
547
|
""",
|
@@ -528,29 +550,29 @@ class DdsToLOCommand(Command):
|
|
528
550
|
|
529
551
|
# path to input DDS TmRaw response file(s)
|
530
552
|
parser.add_argument(
|
531
|
-
|
553
|
+
"--dds-tmraw-xml",
|
532
554
|
help="""
|
533
555
|
Input DDS TmRaw response XML file(s) to convert.
|
534
556
|
""",
|
535
|
-
nargs=
|
557
|
+
nargs="*",
|
536
558
|
type=str,
|
537
559
|
default=[],
|
538
560
|
)
|
539
561
|
|
540
562
|
# path to input DDS TcReport XML response file(s)
|
541
563
|
parser.add_argument(
|
542
|
-
|
564
|
+
"--dds-tcreport-xml",
|
543
565
|
help="""
|
544
566
|
Input DDS TcReport response XML file(s) (to add TC in the output file).
|
545
567
|
""",
|
546
|
-
nargs=
|
568
|
+
nargs="*",
|
547
569
|
type=str,
|
548
570
|
default=[],
|
549
571
|
)
|
550
572
|
|
551
573
|
parser.add_argument(
|
552
|
-
|
553
|
-
help=
|
574
|
+
"--chunk",
|
575
|
+
help="""
|
554
576
|
Number of DDS packets to write in the L0 in one shot.
|
555
577
|
""",
|
556
578
|
type=int,
|
@@ -563,13 +585,15 @@ class DdsToLOCommand(Command):
|
|
563
585
|
"""
|
564
586
|
|
565
587
|
# Check if output dir already exists
|
566
|
-
force = pipeline.get(
|
588
|
+
force = pipeline.get("force", default=False)
|
567
589
|
output_dir = get_output_dir(pipeline)
|
568
590
|
products_dir = get_products_dir(pipeline)
|
569
|
-
if
|
570
|
-
not force):
|
591
|
+
if is_output_dir(output_dir, products_dir=products_dir) and not force:
|
571
592
|
# if yes exit
|
572
|
-
logger.info(
|
593
|
+
logger.info(
|
594
|
+
"Input request has been already processed. "
|
595
|
+
"(Use --force keyword to force execution)"
|
596
|
+
)
|
573
597
|
pipeline.exit()
|
574
598
|
|
575
599
|
start = DdsToL0()
|
@@ -579,15 +603,15 @@ class DdsToLOCommand(Command):
|
|
579
603
|
pipeline.start = start
|
580
604
|
|
581
605
|
# Check mandatory arguments
|
582
|
-
for arg in [
|
606
|
+
for arg in ["idb_source", "idb_version"]:
|
583
607
|
if not pipeline.get(arg, default=None, args=True):
|
584
|
-
raise MissingArgument(f
|
608
|
+
raise MissingArgument(f"{arg} input argument not defined, aborting!")
|
585
609
|
|
586
|
-
#
|
610
|
+
# Set up the lock file
|
587
611
|
setup_lock(pipeline)
|
588
612
|
|
589
613
|
# Force setting of start_time/end_time value for the input datetime
|
590
|
-
if pipeline.get(
|
614
|
+
if pipeline.get("datetime", args=True):
|
591
615
|
pipeline.properties.start_time = None
|
592
616
|
pipeline.properties.end_time = None
|
593
617
|
|
@@ -596,10 +620,11 @@ class SetL0UtcCommand(Command):
|
|
596
620
|
"""
|
597
621
|
Command to set the UTC times of the input L0 file using SPICE kernels.
|
598
622
|
"""
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
623
|
+
|
624
|
+
__command__ = "film_set_l0_utc"
|
625
|
+
__command_name__ = "set_l0_utc"
|
626
|
+
__parent__ = "film"
|
627
|
+
__parent_arguments__ = ["base"]
|
603
628
|
__help__ = """
|
604
629
|
Command to set the packet UTC times of
|
605
630
|
the input L0 file using SPICE kernels.
|
@@ -607,9 +632,8 @@ class SetL0UtcCommand(Command):
|
|
607
632
|
"""
|
608
633
|
|
609
634
|
def add_arguments(self, parser):
|
610
|
-
|
611
635
|
parser.add_argument(
|
612
|
-
|
636
|
+
"l0_file",
|
613
637
|
help="""
|
614
638
|
L0 file to update.
|
615
639
|
""",
|
@@ -618,7 +642,7 @@ class SetL0UtcCommand(Command):
|
|
618
642
|
)
|
619
643
|
|
620
644
|
parser.add_argument(
|
621
|
-
|
645
|
+
"--kernel-date",
|
622
646
|
help="""
|
623
647
|
Date of the SPICE kernels to use.
|
624
648
|
""",
|
@@ -627,15 +651,13 @@ class SetL0UtcCommand(Command):
|
|
627
651
|
)
|
628
652
|
|
629
653
|
def setup_tasks(self, pipeline):
|
630
|
-
|
631
654
|
start = SetL0Utc()
|
632
|
-
pipeline | start |
|
633
|
-
MoveFailedFiles() | MoveToProdDir()
|
655
|
+
pipeline | start | MoveFailedFiles() | MoveToProdDir()
|
634
656
|
|
635
657
|
# define the start points of the pipeline
|
636
658
|
pipeline.start = start
|
637
659
|
|
638
|
-
#
|
660
|
+
# Set up the lock file
|
639
661
|
setup_lock(pipeline)
|
640
662
|
|
641
663
|
|
@@ -643,10 +665,11 @@ class L0ToHkCommand(Command):
|
|
643
665
|
"""
|
644
666
|
Command to generate RPW HK "digest" CDF files from a given L0 file.
|
645
667
|
"""
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
668
|
+
|
669
|
+
__command__ = "film_l0_to_hk"
|
670
|
+
__command_name__ = "l0_to_hk"
|
671
|
+
__parent__ = "film"
|
672
|
+
__parent_arguments__ = ["base"]
|
650
673
|
__help__ = """
|
651
674
|
Command to generate RPW HK CDF files from
|
652
675
|
a given L0 file.
|
@@ -655,7 +678,7 @@ class L0ToHkCommand(Command):
|
|
655
678
|
def add_arguments(self, parser):
|
656
679
|
# path to XML file of the IDB
|
657
680
|
parser.add_argument(
|
658
|
-
|
681
|
+
"l0_file",
|
659
682
|
help="""
|
660
683
|
The L0 file to parse.
|
661
684
|
""",
|
@@ -665,12 +688,12 @@ class L0ToHkCommand(Command):
|
|
665
688
|
|
666
689
|
# Specify the list of dataset for which files must be generated
|
667
690
|
parser.add_argument(
|
668
|
-
|
669
|
-
|
670
|
-
help=
|
671
|
-
|
691
|
+
"-d",
|
692
|
+
"--dataset",
|
693
|
+
help="List of RPW HK dataset(s) for which files must be produced."
|
694
|
+
"If not defined, then produce all file(s).",
|
672
695
|
type=str,
|
673
|
-
nargs=
|
696
|
+
nargs="+",
|
674
697
|
default=[None],
|
675
698
|
)
|
676
699
|
|
@@ -680,13 +703,15 @@ class L0ToHkCommand(Command):
|
|
680
703
|
"""
|
681
704
|
|
682
705
|
# Check if output dir already exists
|
683
|
-
force = pipeline.get(
|
706
|
+
force = pipeline.get("force", default=False)
|
684
707
|
output_dir = get_output_dir(pipeline)
|
685
708
|
products_dir = get_products_dir(pipeline)
|
686
|
-
if
|
687
|
-
not force):
|
709
|
+
if is_output_dir(output_dir, products_dir=products_dir) and not force:
|
688
710
|
# if yes exit
|
689
|
-
logger.info(
|
711
|
+
logger.info(
|
712
|
+
"Input request has been already processed. "
|
713
|
+
"(Use --force keyword to force execution)"
|
714
|
+
)
|
690
715
|
pipeline.exit()
|
691
716
|
|
692
717
|
# the task
|
@@ -696,7 +721,7 @@ class L0ToHkCommand(Command):
|
|
696
721
|
pipeline | task | MoveFailedFiles() | MoveToProdDir()
|
697
722
|
pipeline.start = task
|
698
723
|
|
699
|
-
#
|
724
|
+
# Set up the lock file
|
700
725
|
setup_lock(pipeline)
|
701
726
|
|
702
727
|
|
@@ -704,10 +729,11 @@ class L0ToL1SurvCommand(Command):
|
|
704
729
|
"""
|
705
730
|
Command to generate RPW L1 survey data CDF files from a given L0 file.
|
706
731
|
"""
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
732
|
+
|
733
|
+
__command__ = "film_l0_to_l1_surv"
|
734
|
+
__command_name__ = "l0_to_l1_surv"
|
735
|
+
__parent__ = "film"
|
736
|
+
__parent_arguments__ = ["base"]
|
711
737
|
__help__ = """
|
712
738
|
Command to generate RPW L1 survey data files from
|
713
739
|
a given L0 file.
|
@@ -716,22 +742,22 @@ class L0ToL1SurvCommand(Command):
|
|
716
742
|
def add_arguments(self, parser):
|
717
743
|
# path to XML file of the IDB
|
718
744
|
parser.add_argument(
|
719
|
-
|
745
|
+
"l0_file",
|
720
746
|
help="""
|
721
747
|
The L0 file to parse.
|
722
748
|
""",
|
723
749
|
type=valid_single_file,
|
724
|
-
nargs=1
|
750
|
+
nargs=1,
|
725
751
|
)
|
726
752
|
|
727
753
|
# Specify the list of dataset for which files must be generated
|
728
754
|
parser.add_argument(
|
729
|
-
|
730
|
-
|
731
|
-
help=
|
732
|
-
|
755
|
+
"-d",
|
756
|
+
"--dataset",
|
757
|
+
help="List of RPW L1 dataset(s) for which files must be produced."
|
758
|
+
"If not defined, then produce all file(s).",
|
733
759
|
type=str,
|
734
|
-
nargs=
|
760
|
+
nargs="+",
|
735
761
|
default=[None],
|
736
762
|
)
|
737
763
|
|
@@ -741,13 +767,15 @@ class L0ToL1SurvCommand(Command):
|
|
741
767
|
"""
|
742
768
|
|
743
769
|
# Check if output dir already exists
|
744
|
-
force = pipeline.get(
|
770
|
+
force = pipeline.get("force", default=False)
|
745
771
|
output_dir = get_output_dir(pipeline)
|
746
772
|
products_dir = get_products_dir(pipeline)
|
747
|
-
if
|
748
|
-
not force):
|
773
|
+
if is_output_dir(output_dir, products_dir=products_dir) and not force:
|
749
774
|
# if yes exit
|
750
|
-
logger.info(
|
775
|
+
logger.info(
|
776
|
+
"Input request has been already processed. "
|
777
|
+
"(Use --force keyword to force execution)"
|
778
|
+
)
|
751
779
|
pipeline.exit()
|
752
780
|
|
753
781
|
# the task
|
@@ -765,10 +793,11 @@ class L0ToL1SbmCommand(Command):
|
|
765
793
|
"""
|
766
794
|
Command to generate RPW L1 SBM1/SBM2 data CDF files from a given set of L0 files.
|
767
795
|
"""
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
796
|
+
|
797
|
+
__command__ = "film_l0_to_l1_sbm"
|
798
|
+
__command_name__ = "l0_to_l1_sbm"
|
799
|
+
__parent__ = "film"
|
800
|
+
__parent_arguments__ = ["base"]
|
772
801
|
__help__ = """
|
773
802
|
Command to generate RPW L1 SBM1/SBM2 data files from
|
774
803
|
a given set of L0 file(s).
|
@@ -777,60 +806,60 @@ class L0ToL1SbmCommand(Command):
|
|
777
806
|
def add_arguments(self, parser):
|
778
807
|
# path to RPW L0 file(s) to process
|
779
808
|
parser.add_argument(
|
780
|
-
|
809
|
+
"l0_files",
|
781
810
|
help="""
|
782
811
|
The L0 file(s) to process.
|
783
812
|
""",
|
784
813
|
type=str,
|
785
|
-
nargs=
|
814
|
+
nargs="+",
|
786
815
|
)
|
787
816
|
|
788
817
|
# Specify the list of dataset for which files must be generated
|
789
818
|
parser.add_argument(
|
790
|
-
|
791
|
-
|
792
|
-
help=
|
793
|
-
|
819
|
+
"-d",
|
820
|
+
"--dataset",
|
821
|
+
help="List of RPW dataset(s) for which files must be produced."
|
822
|
+
"If not defined, then produce all file(s).",
|
794
823
|
type=str,
|
795
|
-
nargs=
|
824
|
+
nargs="+",
|
796
825
|
default=[None],
|
797
826
|
)
|
798
827
|
|
799
828
|
# No process SBM1
|
800
829
|
parser.add_argument(
|
801
|
-
|
802
|
-
action=
|
803
|
-
help=
|
830
|
+
"--no-sbm1",
|
831
|
+
action="store_true",
|
832
|
+
help="If passed, then do no process SBM1 data.",
|
804
833
|
default=False,
|
805
834
|
)
|
806
835
|
|
807
836
|
# No process SBM2
|
808
837
|
parser.add_argument(
|
809
|
-
|
810
|
-
action=
|
811
|
-
help=
|
838
|
+
"--no-sbm2",
|
839
|
+
action="store_true",
|
840
|
+
help="If passed, then do no process SBM2 data.",
|
812
841
|
default=False,
|
813
842
|
)
|
814
843
|
|
815
844
|
# Process any SBM TM packets found in input L0 files, without using
|
816
845
|
# TM_DPU_EVENT_PR_DPU_SBM1 or TM_DPU_EVENT_PR_DPU_SBM1 packets information
|
817
846
|
parser.add_argument(
|
818
|
-
|
819
|
-
action=
|
820
|
-
help=
|
821
|
-
|
822
|
-
|
823
|
-
|
847
|
+
"--manual",
|
848
|
+
action="store_true",
|
849
|
+
help="Process any SBM TM packets found in input L0 files "
|
850
|
+
"(i.e., without using TM_DPU_EVENT_PR_DPU_SBM1 or TM_DPU_EVENT_PR_DPU_SBM1 packets). "
|
851
|
+
"Use this option with --start-time, --end-time and --sbm-type keywords to process SBM science packets"
|
852
|
+
" dumped by TC.",
|
824
853
|
default=False,
|
825
854
|
)
|
826
855
|
|
827
856
|
#
|
828
857
|
parser.add_argument(
|
829
|
-
|
858
|
+
"--sbm-type",
|
830
859
|
nargs=1,
|
831
860
|
type=int,
|
832
861
|
default=[None],
|
833
|
-
help=
|
862
|
+
help="Indicate the type of SBM event (1=SBM1 or 2=SBM2) processed when --manual option is passed.",
|
834
863
|
)
|
835
864
|
|
836
865
|
def setup_tasks(self, pipeline):
|
@@ -839,13 +868,15 @@ class L0ToL1SbmCommand(Command):
|
|
839
868
|
"""
|
840
869
|
|
841
870
|
# Check if output dir already exists
|
842
|
-
force = pipeline.get(
|
871
|
+
force = pipeline.get("force", default=False)
|
843
872
|
output_dir = get_output_dir(pipeline)
|
844
873
|
products_dir = get_products_dir(pipeline)
|
845
|
-
if
|
846
|
-
not force):
|
874
|
+
if is_output_dir(output_dir, products_dir=products_dir) and not force:
|
847
875
|
# if yes exit
|
848
|
-
logger.info(
|
876
|
+
logger.info(
|
877
|
+
"Input request has been already processed. "
|
878
|
+
"(Use --force keyword to force execution)"
|
879
|
+
)
|
849
880
|
pipeline.exit()
|
850
881
|
|
851
882
|
# the task
|
@@ -859,57 +890,38 @@ class L0ToL1SbmCommand(Command):
|
|
859
890
|
setup_lock(pipeline)
|
860
891
|
|
861
892
|
|
862
|
-
class
|
893
|
+
class DbToAncBiaSweepTableCommand(Command):
|
863
894
|
"""
|
864
|
-
Command to run the pipeline to generate
|
895
|
+
Command to run the pipeline to generate csv file
|
896
|
+
containing Bias Sweep table in the roc database
|
865
897
|
"""
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
898
|
+
|
899
|
+
__command__ = "film_db_to_anc_bia_sweep_table"
|
900
|
+
__command_name__ = "db_to_anc_bia_sweep_table"
|
901
|
+
__parent__ = "film"
|
902
|
+
__parent_arguments__ = ["base"]
|
870
903
|
__help__ = """
|
871
|
-
Command to generate
|
904
|
+
Command to generate Bias sweep table report csv file.
|
872
905
|
"""
|
873
906
|
|
874
907
|
def add_arguments(self, parser):
|
875
|
-
|
876
|
-
parser.add_argument(
|
877
|
-
'--l0-files',
|
878
|
-
help="""
|
879
|
-
List of input l0 files used to make output ANC Bias sweep table file.
|
880
|
-
""",
|
881
|
-
type=str,
|
882
|
-
nargs='+',
|
883
|
-
required=True,
|
884
|
-
)
|
885
|
-
|
886
|
-
# Existing anc_bia_sweep_table csv file containing previous sweep table data
|
887
|
-
# (can be used to ensure the continuity of sweep table mapping)
|
888
|
-
parser.add_argument(
|
889
|
-
'--sweep-tables',
|
890
|
-
help="""
|
891
|
-
Existing anc_bia_sweep_table file containing previous sweep table data.
|
892
|
-
(can be used to ensure the continuity of sweep table mapping
|
893
|
-
or check if new data must be saved)
|
894
|
-
""",
|
895
|
-
type=str,
|
896
|
-
nargs=1
|
897
|
-
)
|
908
|
+
pass
|
898
909
|
|
899
910
|
def setup_tasks(self, pipeline):
|
900
|
-
|
901
911
|
# Check if output dir already exists
|
902
|
-
force = pipeline.get(
|
912
|
+
force = pipeline.get("force", default=False)
|
903
913
|
output_dir = get_output_dir(pipeline)
|
904
914
|
products_dir = get_products_dir(pipeline)
|
905
|
-
if
|
906
|
-
not force):
|
915
|
+
if is_output_dir(output_dir, products_dir=products_dir) and not force:
|
907
916
|
# if yes exit
|
908
|
-
logger.info(
|
917
|
+
logger.info(
|
918
|
+
"Output directory already exists. "
|
919
|
+
"(Use --force keyword to force execution)"
|
920
|
+
)
|
909
921
|
pipeline.exit()
|
910
922
|
|
911
923
|
# starting task
|
912
|
-
start =
|
924
|
+
start = DbToAncBiaSweepTable()
|
913
925
|
|
914
926
|
# create the tasks and their dependencies
|
915
927
|
pipeline | start | MoveFailedFiles() | MoveToProdDir()
|
@@ -925,47 +937,39 @@ class L0ToL1BiaSweepCommand(Command):
|
|
925
937
|
"""
|
926
938
|
Command to run the pipeline to generate Bias Sweep L1 CDF.
|
927
939
|
"""
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
940
|
+
|
941
|
+
__command__ = "film_l0_to_l1_bia_sweep"
|
942
|
+
__command_name__ = "l0_to_l1_bia_sweep"
|
943
|
+
__parent__ = "film"
|
944
|
+
__parent_arguments__ = ["base"]
|
932
945
|
__help__ = """
|
933
946
|
Command to generate Bias sweep L1 CDF.
|
934
947
|
"""
|
935
948
|
|
936
949
|
def add_arguments(self, parser):
|
937
|
-
|
938
|
-
parser.add_argument(
|
939
|
-
'--sweep-tables',
|
940
|
-
help="""
|
941
|
-
List of CSV file(s) containing Bias sweep table data.
|
942
|
-
""",
|
943
|
-
type=str,
|
944
|
-
nargs='+',
|
945
|
-
required=True,
|
946
|
-
)
|
947
|
-
|
948
950
|
# path to input L0 files
|
949
951
|
parser.add_argument(
|
950
|
-
|
952
|
+
"-l0",
|
953
|
+
"--l0-files",
|
951
954
|
help="""
|
952
955
|
List of input l0 files used to make output L1 Bias sweep CDF.
|
953
956
|
""",
|
954
957
|
type=str,
|
955
|
-
nargs=
|
958
|
+
nargs="+",
|
956
959
|
required=True,
|
957
960
|
)
|
958
961
|
|
959
962
|
def setup_tasks(self, pipeline):
|
960
|
-
|
961
963
|
# Check if output dir already exists
|
962
|
-
force = pipeline.get(
|
964
|
+
force = pipeline.get("force", default=False)
|
963
965
|
output_dir = get_output_dir(pipeline)
|
964
966
|
products_dir = get_products_dir(pipeline)
|
965
|
-
if
|
966
|
-
not force):
|
967
|
+
if is_output_dir(output_dir, products_dir=products_dir) and not force:
|
967
968
|
# if yes exit
|
968
|
-
logger.info(
|
969
|
+
logger.info(
|
970
|
+
"Input request has been already processed. "
|
971
|
+
"(Use --force keyword to force execution)"
|
972
|
+
)
|
969
973
|
pipeline.exit()
|
970
974
|
|
971
975
|
# starting task
|
@@ -977,7 +981,7 @@ class L0ToL1BiaSweepCommand(Command):
|
|
977
981
|
# define the start points of the pipeline
|
978
982
|
pipeline.start = start
|
979
983
|
|
980
|
-
#
|
984
|
+
# Set up the lock file
|
981
985
|
setup_lock(pipeline)
|
982
986
|
|
983
987
|
|
@@ -985,10 +989,11 @@ class L0ToL1BiaCurrentCommand(Command):
|
|
985
989
|
"""
|
986
990
|
Command to run the pipeline to generate L1 Bias current CDF file
|
987
991
|
"""
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
|
992
|
+
|
993
|
+
__command__ = "film_l0_to_l1_bia_current"
|
994
|
+
__command_name__ = "l0_to_l1_bia_current"
|
995
|
+
__parent__ = "film"
|
996
|
+
__parent_arguments__ = ["base"]
|
992
997
|
__help__ = """
|
993
998
|
Command to generate L1 Bias current CDF file.
|
994
999
|
"""
|
@@ -996,25 +1001,26 @@ class L0ToL1BiaCurrentCommand(Command):
|
|
996
1001
|
def add_arguments(self, parser):
|
997
1002
|
# path to input L0 files
|
998
1003
|
parser.add_argument(
|
999
|
-
|
1004
|
+
"--l0-files",
|
1000
1005
|
help="""
|
1001
1006
|
List of input l0 files used to make output L1 Bias current CDF.
|
1002
1007
|
""",
|
1003
1008
|
type=str,
|
1004
|
-
nargs=
|
1009
|
+
nargs="+",
|
1005
1010
|
required=True,
|
1006
1011
|
)
|
1007
1012
|
|
1008
1013
|
def setup_tasks(self, pipeline):
|
1009
|
-
|
1010
1014
|
# Check if output dir already exists
|
1011
|
-
force = pipeline.get(
|
1015
|
+
force = pipeline.get("force", default=False)
|
1012
1016
|
output_dir = get_output_dir(pipeline)
|
1013
1017
|
products_dir = get_products_dir(pipeline)
|
1014
|
-
if
|
1015
|
-
not force):
|
1018
|
+
if is_output_dir(output_dir, products_dir=products_dir) and not force:
|
1016
1019
|
# if yes exit
|
1017
|
-
logger.info(
|
1020
|
+
logger.info(
|
1021
|
+
"Input request has been already processed. "
|
1022
|
+
"(Use --force keyword to force execution)"
|
1023
|
+
)
|
1018
1024
|
pipeline.exit()
|
1019
1025
|
|
1020
1026
|
# starting task
|
@@ -1034,10 +1040,11 @@ class HkSktToXlsxCommand(Command):
|
|
1034
1040
|
"""
|
1035
1041
|
Command to generate the skeleton files for HK parameters from the IDB.
|
1036
1042
|
"""
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1043
|
+
|
1044
|
+
__command__ = "hk_skt_to_xlsx"
|
1045
|
+
__command_name__ = "hk_skt_to_xlsx"
|
1046
|
+
__parent__ = "film"
|
1047
|
+
__parent_arguments__ = ["base"]
|
1041
1048
|
__help__ = """
|
1042
1049
|
Command to generate the Excel files used to generate CDF skeleton for
|
1043
1050
|
HK parameters.
|
@@ -1047,20 +1054,20 @@ class HkSktToXlsxCommand(Command):
|
|
1047
1054
|
# to read the path to the directory where to store the HK CDF skeletons
|
1048
1055
|
# in Excel format
|
1049
1056
|
parser.add_argument(
|
1050
|
-
|
1051
|
-
|
1057
|
+
"-d",
|
1058
|
+
"--directory",
|
1052
1059
|
help="""
|
1053
1060
|
The absolute path to the directory where to
|
1054
1061
|
save the HK CDF skeletons in Excel format.
|
1055
1062
|
""",
|
1056
1063
|
type=str,
|
1057
|
-
default=osp.join(TEMP_DIR,
|
1064
|
+
default=osp.join(TEMP_DIR, "hk_xls"),
|
1058
1065
|
)
|
1059
1066
|
|
1060
1067
|
# path to XML file of the IDB
|
1061
1068
|
parser.add_argument(
|
1062
|
-
|
1063
|
-
|
1069
|
+
"-i",
|
1070
|
+
"--idb",
|
1064
1071
|
help="""
|
1065
1072
|
Path to the RPW IDB main directory.
|
1066
1073
|
""",
|
@@ -1069,8 +1076,8 @@ class HkSktToXlsxCommand(Command):
|
|
1069
1076
|
|
1070
1077
|
# path to the mapping of parameters and packets to the SRDB
|
1071
1078
|
parser.add_argument(
|
1072
|
-
|
1073
|
-
|
1079
|
+
"-m",
|
1080
|
+
"--mapping",
|
1074
1081
|
help="""
|
1075
1082
|
Path to the XML file containing the mapping of parameters and
|
1076
1083
|
packets to the SRDB.
|
@@ -1080,19 +1087,19 @@ class HkSktToXlsxCommand(Command):
|
|
1080
1087
|
|
1081
1088
|
# path to the configuration file for the generation
|
1082
1089
|
parser.add_argument(
|
1083
|
-
|
1084
|
-
|
1090
|
+
"-s",
|
1091
|
+
"--skeleton-configuration",
|
1085
1092
|
help="""
|
1086
1093
|
Path to the JSON configuration file of the skeleton command, for
|
1087
1094
|
packets selection and structure.
|
1088
1095
|
""",
|
1089
1096
|
type=str,
|
1090
|
-
default=paths.from_config(
|
1097
|
+
default=paths.from_config("hk_metadef.json"),
|
1091
1098
|
)
|
1092
1099
|
|
1093
1100
|
# path to the HK CDF Excel template file
|
1094
1101
|
parser.add_argument(
|
1095
|
-
|
1102
|
+
"hk_template_file",
|
1096
1103
|
help="""
|
1097
1104
|
Path to the HK CDF Excel template file.
|
1098
1105
|
""",
|
@@ -1113,75 +1120,75 @@ class HkSktToXlsxCommand(Command):
|
|
1113
1120
|
|
1114
1121
|
class CdfPostProCommand(Command):
|
1115
1122
|
"""
|
1116
|
-
Command to run the pipeline to
|
1123
|
+
Command to run the pipeline to run post-processings on a list of input RPW CDF files.
|
1117
1124
|
"""
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1125
|
+
|
1126
|
+
__command__ = "film_cdf_postpro"
|
1127
|
+
__command_name__ = "cdf_postpro"
|
1128
|
+
__parent__ = "film"
|
1129
|
+
__parent_arguments__ = ["base"]
|
1122
1130
|
__help__ = """
|
1123
|
-
Command to perform post-
|
1131
|
+
Command to perform post-processings on a list of input RPW CDF files.
|
1124
1132
|
"""
|
1125
1133
|
|
1126
1134
|
def add_arguments(self, parser):
|
1127
|
-
|
1128
1135
|
parser.add_argument(
|
1129
|
-
|
1136
|
+
"--cdf-files",
|
1130
1137
|
help="""
|
1131
1138
|
List of input RPW CDF files to post-process.
|
1132
1139
|
""",
|
1133
1140
|
type=str,
|
1134
|
-
nargs=
|
1141
|
+
nargs="+",
|
1135
1142
|
required=True,
|
1136
1143
|
)
|
1137
1144
|
|
1138
1145
|
parser.add_argument(
|
1139
|
-
|
1146
|
+
"--rpw-obs-json",
|
1140
1147
|
help="""
|
1141
|
-
List of RPW SoopKitchen export JSON files.
|
1148
|
+
List of RPW SoopKitchen export JSON files. Pattern can also be passed.
|
1142
1149
|
""",
|
1143
1150
|
type=str,
|
1144
|
-
nargs=
|
1151
|
+
nargs="+",
|
1145
1152
|
)
|
1146
1153
|
|
1147
1154
|
parser.add_argument(
|
1148
|
-
|
1155
|
+
"--rpw-ior-xml",
|
1149
1156
|
help="""
|
1150
|
-
List of RPW IOR XML files
|
1157
|
+
List of RPW IOR XML files. Pattern or ZIP archive can be also passed.
|
1151
1158
|
""",
|
1152
1159
|
type=str,
|
1153
|
-
nargs=
|
1160
|
+
nargs="+",
|
1154
1161
|
)
|
1155
1162
|
|
1156
1163
|
parser.add_argument(
|
1157
|
-
|
1164
|
+
"--options",
|
1158
1165
|
help=f"""
|
1159
1166
|
List of post-processing jobs to run.
|
1160
1167
|
Available options are: {CDF_POST_PRO_OPTS_ARGS} .
|
1161
1168
|
""",
|
1162
1169
|
type=str,
|
1163
|
-
nargs=
|
1170
|
+
nargs="+",
|
1164
1171
|
required=True,
|
1165
1172
|
)
|
1166
1173
|
|
1167
1174
|
parser.add_argument(
|
1168
|
-
|
1169
|
-
help=
|
1170
|
-
|
1171
|
-
|
1175
|
+
"--update-json",
|
1176
|
+
help="JSON file containing updates to be performed "
|
1177
|
+
"on input CDF files. "
|
1178
|
+
'(Only works with "update_cdf" option)',
|
1172
1179
|
type=str,
|
1173
1180
|
nargs=1,
|
1174
1181
|
default=[None],
|
1175
1182
|
)
|
1176
1183
|
|
1177
1184
|
parser.add_argument(
|
1178
|
-
|
1185
|
+
"--cdfconvert",
|
1179
1186
|
help="""
|
1180
|
-
Path to the
|
1187
|
+
Path to the cdfconvert executable.
|
1181
1188
|
""",
|
1182
1189
|
type=str,
|
1183
1190
|
nargs=1,
|
1184
|
-
default=[
|
1191
|
+
default=[CDFCONVERT_PATH],
|
1185
1192
|
)
|
1186
1193
|
|
1187
1194
|
def setup_tasks(self, pipeline):
|
@@ -1190,13 +1197,15 @@ class CdfPostProCommand(Command):
|
|
1190
1197
|
"""
|
1191
1198
|
|
1192
1199
|
# Check if output dir already exists
|
1193
|
-
force = pipeline.get(
|
1200
|
+
force = pipeline.get("force", default=False)
|
1194
1201
|
output_dir = get_output_dir(pipeline)
|
1195
1202
|
products_dir = get_products_dir(pipeline)
|
1196
|
-
if
|
1197
|
-
not force):
|
1203
|
+
if is_output_dir(output_dir, products_dir=products_dir) and not force:
|
1198
1204
|
# if yes exit
|
1199
|
-
logger.info(
|
1205
|
+
logger.info(
|
1206
|
+
f"Output directory already exists ({products_dir}) \n"
|
1207
|
+
"(Use --force keyword to force execution)"
|
1208
|
+
)
|
1200
1209
|
pipeline.exit()
|
1201
1210
|
|
1202
1211
|
# starting task
|
@@ -1210,3 +1219,43 @@ class CdfPostProCommand(Command):
|
|
1210
1219
|
|
1211
1220
|
# Setup the lock file
|
1212
1221
|
setup_lock(pipeline)
|
1222
|
+
|
1223
|
+
|
1224
|
+
class ExportSoloHeeCoordCommand(Command):
|
1225
|
+
"""
|
1226
|
+
Command to generate CSV file containing SolO HEE coordinates
|
1227
|
+
with (distance in AU, longitude in deg, latitude in deg)
|
1228
|
+
"""
|
1229
|
+
|
1230
|
+
__command__ = "film_export_solo_hee_coord"
|
1231
|
+
__command_name__ = "export_solo_hee_coord"
|
1232
|
+
__parent__ = "film"
|
1233
|
+
__parent_arguments__ = ["base"]
|
1234
|
+
__help__ = """
|
1235
|
+
Command to generate CSV file containing SolO HEE coordinates.
|
1236
|
+
"""
|
1237
|
+
|
1238
|
+
def add_arguments(self, parser):
|
1239
|
+
parser.add_argument(
|
1240
|
+
"--output-csv",
|
1241
|
+
help="""
|
1242
|
+
Path of the output CSV file containing SolO HEE coordinates.
|
1243
|
+
""",
|
1244
|
+
type=str,
|
1245
|
+
nargs=1,
|
1246
|
+
default=[None],
|
1247
|
+
)
|
1248
|
+
|
1249
|
+
def setup_tasks(self, pipeline):
|
1250
|
+
"""
|
1251
|
+
Execute the RPW CDF post-processing.
|
1252
|
+
"""
|
1253
|
+
|
1254
|
+
# starting task
|
1255
|
+
start = ExportSoloHeeCoord()
|
1256
|
+
|
1257
|
+
# create the tasks workflow and their dependencies
|
1258
|
+
pipeline | start
|
1259
|
+
|
1260
|
+
# define the start points of the pipeline
|
1261
|
+
pipeline.start = start
|