Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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]
Exemple #4
0
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]
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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
Exemple #10
0
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