def get_aliod_info(filename): file = open(filename, "rt") lines = file.readlines() file.close() meterInfo = AliodMeterInfo() calibrationFlag = 0 for line in lines: if not line.strip(): # empty line, so continue continue line = line.strip() if calibrationFlag: if line.upper() == "END": calibrationFlag = 0 continue fields = line.split(None, 1) meterInfo.calibration[to_float(fields[0])] = to_float(fields[1]) continue try: (key, val) = line.split(None, 1) except ValueError: F = line.split() key = F[0] val = "" if key.upper() == "CALIBRATION": calibrationFlag = 1 elif key.upper() == "CROSS-SENSITIVITY": meterInfo.x_sens = to_float(val) elif key.upper() == "LONG-SENSITIVITY": meterInfo.y_sens = to_float(val) elif key.upper() == "TEMPERATURE": meterInfo.set_temp = to_float(val) elif key.upper() == "GMT-OFFSET": meterInfo.GMT_default = to_float(val) return meterInfo
def CG3_fill_gravityreading(incoming, fields, head_fields): # check for '*' on end of fields[1] # * at end implies continous tilt correction of value if fields[1][-1] == "*": fields[1] = fields[1][0:-1] tilt_correct = 1 else: tilt_correct = 0 julian_date = head_fields[9] + grav_util.fract_day(fields[9]) incoming.station_id = fields[0] incoming.gravity = to_float(fields[1]) incoming.sigma = to_float(fields[2]) incoming.tilt_x = to_float(fields[3]) incoming.tilt_y = to_float(fields[4]) incoming.temp = to_float(fields[5]) try: incoming.etc = to_float(fields[6]) except ValueError: incoming.etc = 0.0 incoming.duration = int(to_float(fields[7])) incoming.rejects = int(to_float(fields[8])) incoming.time_str = fields[9] incoming.meterInfo.ROM_version = head_fields[0] incoming.meterInfo.ROM_Release = head_fields[1] incoming.meterInfo.Mode = head_fields[2] incoming.meterInfo.Cycle_time = head_fields[3] incoming.meterInfo.Serial_number = head_fields[4] incoming.meterInfo.Line = head_fields[5] incoming.meterInfo.Grid = head_fields[6] incoming.meterInfo.Job = head_fields[7] incoming.meterInfo.Operator = head_fields[8] incoming.jul_day = julian_date incoming.meterInfo.GRef = head_fields[10] incoming.meterInfo.GCal1 = head_fields[11] incoming.meterInfo.GCal2 = head_fields[12] incoming.meterInfo.TxCo = head_fields[13] incoming.meterInfo.TyCo = head_fields[14] incoming.meterInfo.Lat = head_fields[15] incoming.meterInfo.Lon = head_fields[16] incoming.GMT_Diff = head_fields[17] incoming.meterInfo.TempCo = head_fields[18] incoming.meterInfo.CalAfter = head_fields[19] if tilt_correct: incoming.tiltCorrect = "Y" else: incoming.tiltCorrect = "N" incoming.meterInfo.DriftCo = head_fields[21] incoming.meterInfo.DriftStart = head_fields[22]
def CG5_parse_header(Header, line): fields = string.split(line) if len(fields) < 3: return # blank header line if fields[1]=="Survey": Header.survey = fields[3] if fields[1]=="Instrument": if len(fields) > 2: Header.serial = int(fields[3]) if fields[1]=="Client:": Header.client = fields[2] if fields[1] == "Operator:": Header.operator = fields[2] if fields[1] == "LONG:": Header.lon = to_float(fields[2]); if fields[1] == "LAT:": Header.lat = to_float(fields[2]); if fields[1]=="ZONE:": Header.zone = int(fields[2]); if fields[1]=="GMT": if len(fields) > 2: Header.gmt = int(to_float(fields[3])); if fields[1]=="Gref:": Header.gref = to_float(fields[2]); if fields[1]=="Gcal1:": Header.gcal = to_float(fields[2]) if fields[1]=="TiltxS:": Header.xsens = to_float(fields[2]) if fields[1]=="TiltyS:": Header.ysens = to_float(fields[2]) if fields[1]=="TiltxO:": Header.xoff = to_float(fields[2]) if fields[1]=="TiltyO:": Header.yoff = to_float(fields[2]) if fields[1]=="Tempco:": Header.tempco = to_float(fields[2]) if fields[1]=="Drift:": Header.drift = to_float(fields[2]) if fields[1]=="DriftTime": Header.start_drift_time = fields[3] if fields[1]=="DriftDate": # assume after DriftTime!!!! Header.drift_start = grav_util.str2jd(fields[3], Header.start_drift_time) if len(fields) < 3: return # blank field for setup params if fields[1]=="Tide": Header.longman = 0 if fields[3]=="YES": Header.Longman = 1 if fields[1]=="Cont.": Header.tilt_correct = 0 # if 1, Continuous Tilt correction, 0 not if fields[3] == "YES": Header.tilt_correct = 1 # if 1, Continuous Tilt correction, 0 not if fields[1]=="Auto": Header.auto_rej = 0 # auto rejection; 1 true, 0 false if fields[3] == "YES": Header.auto_rej = 1 if fields[1]=="Terrain": Header.terrain = 0 # terrain correction; 1 true, 0 false if fields[3]=="YES": Header.terrain = 1 # terrain correction; 1 true, 0 false if fields[1]=="Seismic": Header.seismic = 0 # seismic filter; 1 true, 0 false if fields[3]=="YES": Header.seismic = 1 # seismic filter; 1 true, 0 false if fields[1]=="Raw": Header.rawdata = 0 # raw data stored; 1 true, 0 false if fields[3]=="YES": Header.rawdata = 1 # raw data stored; 1 true, 0 false return Header
def CG5_fill_gravityreading(fields, header): incoming = GravityReading() julian_date = grav_util.str2jd(fields[14], fields[11]) ## Because we assume format is XYm or XYft, we know that field[0] is line, which # we drop, and field[1] is station #, but recorded as float. So, drop to int incoming.station_id = str(int(to_float(fields[1]))) incoming.gravity = to_float(fields[3]) if header.terrain: incoming.gravity = incoming.gravity+to_float(fields[13]) incoming.sigma = to_float(fields[4]) incoming.tilt_x = to_float(fields[5]) incoming.tilt_y = to_float(fields[6]) incoming.temp = to_float(fields[7]) try: incoming.etc = to_float(fields[8]) except ValueError: incoming.etc = 0.0 incoming.duration = int(to_float(fields[9])) incoming.rejects = int(to_float(fields[10])) incoming.time_str = fields[11] incoming.meterInfo.Serial_number = header.serial incoming.meterInfo.Job = header.survey incoming.meterInfo.Operator = header.operator incoming.jul_day = julian_date incoming.meterInfo.GRef = header.gref incoming.meterInfo.GCal1 = header.gcal incoming.meterInfo.GCal2 = 0.0 # CG-5 only has Gcal1 incoming.meterInfo.TxCo = header.xsens incoming.meterInfo.TyCo = header.ysens incoming.meterInfo.Lat = header.lat incoming.meterInfo.Lon = header.lon incoming.GMT_Diff = header.gmt*-1.0 # translate W pos to E pos incoming.meterInfo.TempCo = header.tempco if header.tilt_correct: incoming.tiltCorrect = "Y" else: incoming.tiltCorrect = "N" incoming.meterInfo.DriftCo = header.drift incoming.meterInfo.DriftStart = header.drift_start incoming.outsideTemp = to_float(fields[2]) # assuming we are recording outside temp for fun... return incoming
def parse_header(file): global nr # file should be a File object that has been opened to the data file # header has 12 data records, plus one record of "-" before and # after = 14 records total, of which we have read one # read lines until end of header line = file.readline() while line: nr = nr + 1 # test for non-data record if line[0:10] == "----------": break if line[0] == "\n": line = file.readline() continue fields = string.split(line) if not fields: # no fields, hence essentially an empty record, so skip line = file.readline() continue if fields[0] == "SCINTREX": # ID line, with version and Mode type ROM_Version = fields[1] Mode = fields[4] ROM_Release = fields[6] elif fields[0] == "Cycle": # Cycle Time line, with serial number of unit Cycle_time = to_float(fields[2]) Serial_number = long(to_float(fields[5])) elif fields[0] == "Ser": # Field mode has no Cycle Time entry, so 1st field is Serial # Number Cycle_time = -1 Serial_number = long(to_float(fields[2])) elif fields[0] == "Line:": # Line, Grid, Job line, with date and Operator code Line = long(to_float(fields[1])) Grid = long(to_float(fields[3])) Job = long(to_float(fields[5])) Date_str = fields[7] jul_date = grav_util.jul_day(Date_str, "00:00:00") Operator = long(to_float(fields[9])) elif fields[0] == "GREF.:": # GREF line, with XTilt coeff GREF = to_float(fields[1]) Tx_coef = to_float(fields[6]) elif fields[0] == "GCAL.1:": # Gravimeter cal. const. #1 line, w/ YTilt coeff GCAL1 = to_float(fields[1]) Ty_coef = to_float(fields[5]) elif fields[0] == "GCAL.2:": # Grav. Cal. Const. 2, with Latitude GCAL2 = to_float(fields[1]) Lat = to_float(fields[3]) elif fields[0] == "TEMPCO.:": # Temp. coef and longitude TEMPCO = to_float(fields[1]) Long = to_float(fields[4]) elif fields[1] == "const.:": # Drift constant, GMT difference drift_const = to_float(fields[2]) tmp = string.split(fields[5], ".") GMT_diff = to_float(tmp[0]) * -1.0 elif fields[1] == "Correction": # Drift correction start time, calibration after N samples drift_time = fields[4] cal_after = long(to_float(fields[8])) elif fields[0] == "Date:": # Drift correction start date, tilt correction flag drift_date = fields[1] tilt_correct = fields[6] else: continue # unknown header line, so ignore it line = file.readline() # end header record read while # compute drift start Julian date drift_start = grav_util.jul_day(drift_date, drift_time) return (ROM_Version, ROM_Release, Mode, Cycle_time, Serial_number, Line, Grid, Job, Operator, jul_date, GREF, GCAL1, GCAL2, Tx_coef, Ty_coef, Lat, Long, GMT_diff, TEMPCO, cal_after, tilt_correct, drift_const, drift_start)
def parse_header(file): global nr # file should be a File object that has been opened to the data file # header has 12 data records, plus one record of "-" before and # after = 14 records total, of which we have read one # read lines until end of header line=file.readline() while line: nr = nr+1 # test for non-data record if line[0:10] == "----------": break if line[0] == "\n": line=file.readline() continue fields = string.split(line) if not fields: # no fields, hence essentially an empty record, so skip line=file.readline() continue if fields[0] == "SCINTREX": # ID line, with version and Mode type ROM_Version = fields[1] Mode = fields[4] ROM_Release = fields[6] elif fields[0] == "Cycle": # Cycle Time line, with serial number of unit Cycle_time = to_float(fields[2]) Serial_number = long(to_float(fields[5])) elif fields[0] == "Ser": # Field mode has no Cycle Time entry, so 1st field is Serial # Number Cycle_time = -1 Serial_number = long(to_float(fields[2])) elif fields[0] == "Line:": # Line, Grid, Job line, with date and Operator code Line = long(to_float(fields[1])) Grid = long(to_float(fields[3])) Job = long(to_float(fields[5])) Date_str = fields[7] jul_date = grav_util.jul_day(Date_str, "00:00:00") Operator = long(to_float(fields[9])) elif fields[0] == "GREF.:": # GREF line, with XTilt coeff GREF = to_float(fields[1]) Tx_coef = to_float(fields[6]) elif fields[0] == "GCAL.1:": # Gravimeter cal. const. #1 line, w/ YTilt coeff GCAL1 = to_float(fields[1]) Ty_coef = to_float(fields[5]) elif fields[0] == "GCAL.2:": # Grav. Cal. Const. 2, with Latitude GCAL2 = to_float(fields[1]) Lat = to_float(fields[3]) elif fields[0] == "TEMPCO.:": # Temp. coef and longitude TEMPCO = to_float(fields[1]) Long = to_float(fields[4]) elif fields[1] == "const.:": # Drift constant, GMT difference drift_const = to_float(fields[2]) tmp = string.split(fields[5], ".") GMT_diff = to_float(tmp[0]) * -1.0 elif fields[1] == "Correction": # Drift correction start time, calibration after N samples drift_time = fields[4] cal_after = long(to_float(fields[8])) elif fields[0] == "Date:": # Drift correction start date, tilt correction flag drift_date = fields[1] tilt_correct = fields[6] else: continue # unknown header line, so ignore it line=file.readline() # end header record read while # compute drift start Julian date drift_start = grav_util.jul_day(drift_date, drift_time) return (ROM_Version, ROM_Release, Mode, Cycle_time, Serial_number, Line, Grid, Job, Operator, jul_date, GREF, GCAL1, GCAL2, Tx_coef, Ty_coef, Lat, Long, GMT_diff, TEMPCO, cal_after, tilt_correct, drift_const, drift_start)
def get_aliod_data(dataFile, meterFile, debug=0): global nr # open the file and read it # create file object file = open(dataFile, "rt") meterInfo = get_aliod_info(meterFile) # now read the file, line by line for memory concerns raw_data = [] nr = 0 while 1: line = file.readline() if not line: break # EOF reached, return nr = nr+1 # parse the line line = line.strip() if not line: # empty line, so continue continue if ord(line[0]) > 127 or ord(line[0]) < 32: # control character; maybe EOF mark from CG-3 output # skip line continue # parse data line incoming = GravityReading() # defaults to CG-3 settings incoming.meterInfo = meterInfo fields = line.split(","); if len(fields) != 14: if debug: print "Data file error, line %d: field count wrong"%nr continue try: # GravLog only allows numbers for changing part of name; drop # suffix too. BUT - store as string for initial import! incoming.station_id = "%d"%int(fields[0][6:10]) incoming.jul_day = grav_util.str2jd(fields[1].replace("-","/"), fields[2]) incoming.time_str = fields[2] incoming.notide_gravity = to_float(fields[3]) # grab gravity with ETC applied; remove later if desired incoming.gravity = to_float(fields[4]) if math.fabs(incoming.gravity) > 50.00: if debug: print "Data file error, line %d: gravity out of range"%nr continue incoming.sigma = 0.001 # ALIOD STORES RAW READINGS, NOT AVERAGES! incoming.etc = -1.0* to_float(fields[5]) # flip sign of correction incoming.tilt_y = to_float(fields[9]) incoming.tilt_x = to_float(fields[10]) incoming.temp = to_float(fields[11]) if incoming.temp > 60 or incoming.temp < 50: if debug: print "Data file error, line %d: temp out of range"%nr continue incoming.volts = to_float(fields[12]) incoming.GMT_Diff = incoming.meterInfo.GMT_default count2mgal = aliod_counter_to_mGals(to_float(fields[13]), incoming.meterInfo) incoming.gravity += count2mgal incoming.notide_gravity += count2mgal except: if debug: print "Data file error, line %d: conversion(s) failed"%nr continue # add to raw_data raw_data.append(incoming) # end while loop file.close() return raw_data
def get_aliod_data(dataFile, meterFile, debug=0): global nr # open the file and read it # create file object file = open(dataFile, "rt") meterInfo = get_aliod_info(meterFile) # now read the file, line by line for memory concerns raw_data = [] nr = 0 while 1: line = file.readline() if not line: break # EOF reached, return nr = nr + 1 # parse the line line = line.strip() if not line: # empty line, so continue continue if ord(line[0]) > 127 or ord(line[0]) < 32: # control character; maybe EOF mark from CG-3 output # skip line continue # parse data line incoming = GravityReading() # defaults to CG-3 settings incoming.meterInfo = meterInfo fields = line.split(",") if len(fields) != 14: if debug: print "Data file error, line %d: field count wrong" % nr continue try: # GravLog only allows numbers for changing part of name; drop # suffix too. BUT - store as string for initial import! incoming.station_id = "%d" % int(fields[0][6:10]) incoming.jul_day = grav_util.str2jd(fields[1].replace("-", "/"), fields[2]) incoming.time_str = fields[2] incoming.notide_gravity = to_float(fields[3]) # grab gravity with ETC applied; remove later if desired incoming.gravity = to_float(fields[4]) if math.fabs(incoming.gravity) > 50.00: if debug: print "Data file error, line %d: gravity out of range" % nr continue incoming.sigma = 0.001 # ALIOD STORES RAW READINGS, NOT AVERAGES! incoming.etc = -1.0 * to_float( fields[5]) # flip sign of correction incoming.tilt_y = to_float(fields[9]) incoming.tilt_x = to_float(fields[10]) incoming.temp = to_float(fields[11]) if incoming.temp > 60 or incoming.temp < 50: if debug: print "Data file error, line %d: temp out of range" % nr continue incoming.volts = to_float(fields[12]) incoming.GMT_Diff = incoming.meterInfo.GMT_default count2mgal = aliod_counter_to_mGals(to_float(fields[13]), incoming.meterInfo) incoming.gravity += count2mgal incoming.notide_gravity += count2mgal except: if debug: print "Data file error, line %d: conversion(s) failed" % nr continue # add to raw_data raw_data.append(incoming) # end while loop file.close() return raw_data