source: ammosreader/sample_scripts/import_signals.py@ 276d0aa

AmmosSource guix
Last change on this file since 276d0aa was 5e84106, checked in by Enrico Schwass <ennoausberlin@…>, 3 years ago

python version downgraded to 3.9

  • Property mode set to 100644
File size: 2.7 KB
Line 
1"""I import .ppdw files from multiple subdirectories into a mongodb."""
2
3import sys
4import re
5import argparse
6import numpy as np
7from datetime import datetime
8from pathlib import Path
9from pymongo import MongoClient
10from ammosreader.PPDWReader import PPDWReader
11
12parser = argparse.ArgumentParser()
13parser.add_argument('-s', '--source', required=True, help='specify source for given signal')
14parser.add_argument('-i', '--input-dir', required=True, help='specify source directory')
15
16args = parser.parse_args()
17
18source = args.source.upper()
19input_dir = Path(args.input_dir)
20
21if not re.match('[A-Z0-9]{2}', source):
22 print("Source identifier", source, "invalid")
23 sys.exit()
24
25code = input_dir.name
26
27# FIXME: Directory structure differs
28# FIXME: get julian date, source identifier, signal number and ELINT-Code from input_dir path
29
30# if not re.match('[A-Z][0-9]{3}[A-Z]', code):
31# print("ELINT-Code incorrect")
32# sys.exit(1)
33
34
35if not input_dir.is_dir():
36 print("Input dir invalid")
37 sys.exit(1)
38
39subdirs = [f for f in input_dir.iterdir() if f.is_dir()]
40
41client = MongoClient('hackathon.kid.local', 27017)
42
43for each_dir in subdirs:
44
45 # print("Each dir", each_dir)
46 dir_name = each_dir.name
47
48 # if not re.match('[0-9]{5}', dir_name):
49 # print("Signal number incorrect")
50 # sys.exit(1)
51
52 files_inside = [each for each in (each_dir.iterdir()) if (each.suffix in ['.idx', '.iqdw', '.ppdw'] and
53 each_dir.stem == dir_name)]
54
55 # print("Files inside", files_inside)
56 if len(files_inside) != 3:
57 print(".idx, .iqdw or .ppdw file missing in", each_dir)
58 sys.exit(1)
59
60 iqdw_file = (input_dir / each_dir / each_dir.stem).with_suffix('.iqdw')
61 ppdw_file = (input_dir / each_dir / each_dir.stem).with_suffix('.ppdw')
62 # print("PPDW file", ppdw_file)
63 idx_file = (input_dir / each_dir / each_dir.stem).with_suffix('.idx')
64
65 ppdw_reader = PPDWReader(ppdw_file)
66 ppdw_reader.read_all_frames_left()
67
68 database = client['ELINT']
69 ts = (ppdw_reader.container.start_time() - np.datetime64('1970-01-01T00:00:00')) / np.timedelta64(1, 's')
70 time_tuple = datetime.utcfromtimestamp(ts).timetuple()
71 julian_date_string = str(time_tuple.tm_year)[2:] + str(time_tuple.tm_yday).zfill(3)
72 print("Julian", julian_date_string, str(ppdw_file))
73 code_collection = database[input_dir.name]
74 year_collection = code_collection[str(time_tuple.tm_year)]
75 source_collection = year_collection[source]
76
77 json_representation = ppdw_reader.container.to_json()
78 json_representation['SIGNALNUMBER'] = dir_name
79 json_representation['SOURCEFILE'] = str(ppdw_file)
80 source_collection.insert_one(json_representation)
Note: See TracBrowser for help on using the repository browser.