def __init__(self, pos, time, Kp, coord_system = 'GSM', INTERNAL_MODEL='LGM_IGRF',): # pos must be a Lgm_Vector or list of Lgm_Vectors super(Lgm_T89c, self).__init__(Position=pos, Epoch=time, Kp=Kp, coord_system = coord_system, INTERNAL_MODEL=INTERNAL_MODEL,) if not isinstance(pos, Lgm_Vector.Lgm_Vector) and \ not isinstance(pos, list): raise(TypeError('pos must be a Lgm_Vector or list of Lgm_vectors') ) self._Vpos = pos2Lgm_Vector(pos) # time must be a datetime if not isinstance(time, datetime.datetime) and \ not isinstance(time, list): raise(TypeError('time must be a datetime or list of datetime') ) try: for val in Kp: if val < 0 or val > 5: raise(ValueError('T89c is only defined for integer Kp from 0 to 5') ) except TypeError: if Kp < 0 or Kp > 5: raise(ValueError('T89c is only defined for integer Kp from 0 to 5') ) if INTERNAL_MODEL not in (LGM_CDIP, LGM_EDIP, LGM_IGRF) and \ INTERNAL_MODEL not in ('LGM_CDIP', 'LGM_EDIP', 'LGM_IGRF'): raise(ValueError('INTERNAL_MODEL must be LGM_CDIP, LGM_EDIP, or LGM_IGRF') ) if isinstance(INTERNAL_MODEL, str): INTERNAL_MODEL = eval(INTERNAL_MODEL) self.attrs['internal_model'] = INTERNAL_MODEL if coord_system != 'GSM': raise(NotImplementedError('Different coord systems are not yet ready to use') ) self._mmi = Lgm_MagModelInfo.Lgm_MagModelInfo() # and actually set the internal model in Lgm if self.attrs['internal_model'] == LGM_CDIP: Lgm_Set_Lgm_B_cdip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_EDIP: Lgm_Set_Lgm_B_edip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_IGRF: Lgm_Set_Lgm_B_IGRF_InternalModel(pointer(self._mmi)) # either they are all one element or they are compatible lists no 1/2 way try: if len(self._Vpos) != len(self['Kp']) or \ len(self._Vpos) != len(self['Epoch']) or \ len(self['Epoch']) != len(self['Kp']): raise(ValueError('Inputs must be the same length, scalars or lists')) except TypeError: if isinstance(self._Vpos, list) and not isinstance(self['Kp'], list) \ and not isinstance(self['Epoch'], list): raise(ValueError('Inputs must be the same length, scalars or lists')) #self.data = T89_Data(pos, time, Kp, coord_system, INTERNAL_MODEL) self['B'] = self.calc_B()
def __init__( self, pos, time, coord_system='GSM', INTERNAL_MODEL='LGM_IGRF', ): super(Lgm_OP77, self).__init__( Position=pos, Epoch=time, coord_system=coord_system, INTERNAL_MODEL=INTERNAL_MODEL, ) # pos must be an Lgm_Vector or list or sensible ndarray try: self._Vpos = pos2Lgm_Vector(pos) assert self._Vpos except AssertionError: raise ( TypeError('pos must be a Lgm_Vector or list of Lgm_vectors')) # time must be a datetime if not isinstance(time, datetime.datetime) and \ not isinstance(time, list): raise (TypeError('time must be a datetime or list of datetime')) if INTERNAL_MODEL not in (LGM_CDIP, LGM_EDIP, LGM_IGRF) and \ INTERNAL_MODEL not in ('LGM_CDIP', 'LGM_EDIP', 'LGM_IGRF'): raise (ValueError( 'INTERNAL_MODEL must be LGM_CDIP, LGM_EDIP, or LGM_IGRF')) if isinstance(INTERNAL_MODEL, str): INTERNAL_MODEL = eval(INTERNAL_MODEL) self.attrs['internal_model'] = INTERNAL_MODEL if coord_system != 'GSM': raise (NotImplementedError( 'Different coord systems are not yet ready to use')) self._mmi = Lgm_MagModelInfo.Lgm_MagModelInfo() # either they are all one element or they are compatible lists no 1/2 way try: if len(self._Vpos) != len(self['Epoch']): raise (ValueError( 'Inputs must be the same length, scalars or lists')) except TypeError: if isinstance(self._Vpos, list) and not isinstance(self['Epoch'], list): raise (ValueError( 'Inputs must be the same length, scalars or lists')) self['B'] = self.calc_B()
def __init__(self, pos, time, P, Dst, By, Bz, W, coord_system = 'GSM', INTERNAL_MODEL='LGM_IGRF',): # parmod[1] = Info->P; // Pressure in nPa # parmod[2] = Info->Dst; // Dst in nPa # parmod[3] = Info->By; // IMF By in nT # parmod[4] = Info->Bz; // IMF Bz in nT # parmod[5] = Info->W[0]; // W1 # parmod[6] = Info->W[1]; // W2 # parmod[7] = Info->W[2]; // W3 # parmod[8] = Info->W[3]; // W4 # parmod[9] = Info->W[4]; // W5 # parmod[10] = Info->W[5]; // W6 # pos must be a Lgm_Vector or list of Lgm_Vectors super(Lgm_TS04, self).__init__(Position=pos, Epoch=time, P=P, Dst=Dst, By=By, Bz=Bz, W=W, coord_system = coord_system, INTERNAL_MODEL=INTERNAL_MODEL,) if not isinstance(pos, Lgm_Vector.Lgm_Vector) and \ not isinstance(pos, list): raise(TypeError('pos must be a Lgm_Vector or list of Lgm_vectors') ) self._Vpos = pos2Lgm_Vector(pos) # time must be a datetime if not isinstance(time, datetime.datetime) and \ not isinstance(time, list): raise(TypeError('time must be a datetime or list of datetime') ) if INTERNAL_MODEL not in (LGM_CDIP, LGM_EDIP, LGM_IGRF) and \ INTERNAL_MODEL not in ('LGM_CDIP', 'LGM_EDIP', 'LGM_IGRF'): raise(ValueError('INTERNAL_MODEL must be LGM_CDIP, LGM_EDIP, or LGM_IGRF') ) if isinstance(INTERNAL_MODEL, str): INTERNAL_MODEL = eval(INTERNAL_MODEL) self.attrs['internal_model'] = INTERNAL_MODEL if coord_system != 'GSM': raise(NotImplementedError('Different coord systems are not yet ready to use') ) self._mmi = Lgm_MagModelInfo.Lgm_MagModelInfo() # and actually set the internal model in Lgm if self.attrs['internal_model'] == LGM_CDIP: Lgm_Set_Lgm_B_cdip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_EDIP: Lgm_Set_Lgm_B_edip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_IGRF: Lgm_Set_Lgm_B_IGRF_InternalModel(pointer(self._mmi)) #self.data = T89_Data(pos, time, Kp, coord_system, INTERNAL_MODEL) self['B'] = self.calc_B()
def __init__(self, pos, time, coord_system = 'GSM', INTERNAL_MODEL='LGM_DUNGEY',): super(Lgm_Dungey, self).__init__(Position=pos, Epoch=time, coord_system = coord_system, INTERNAL_MODEL=INTERNAL_MODEL,) # pos must be an Lgm_Vector or list or sensible ndarray try: if coord_system != 'GSM': pos = magcoords.coordTrans(pos, time, coord_system,'GSM') #raise(NotImplementedError('Different coord systems are not yet ready to use') ) else: pass self._Vpos = pos2Lgm_Vector(pos) assert self._Vpos except AssertionError: raise(TypeError('pos must be a Lgm_Vector or list of Lgm_vectors') ) # time must be a datetime if not isinstance(time, datetime.datetime) and \ not isinstance(time, list): raise(TypeError('time must be a datetime or list of datetime') ) if INTERNAL_MODEL not in (LGM_CDIP, LGM_EDIP, LGM_IGRF, LGM_DUNGEY) and \ INTERNAL_MODEL not in ('LGM_CDIP', 'LGM_EDIP', 'LGM_IGRF', 'LGM_DUNGEY'): raise(ValueError('INTERNAL_MODEL must be LGM_CDIP, LGM_EDIP, LGM_DUNGEY, or LGM_IGRF') ) if isinstance(INTERNAL_MODEL, str): INTERNAL_MODEL = eval(INTERNAL_MODEL) self.attrs['internal_model'] = INTERNAL_MODEL self._mmi = Lgm_MagModelInfo.Lgm_MagModelInfo() self._mmi.InternalModel = INTERNAL_MODEL self._mmi.ExternalModel = LGM_EXTMODEL_NULL # either they are all one element or they are compatible lists no 1/2 way try: if len(self._Vpos) != len(self['Epoch']): raise(ValueError('Inputs must be the same length, scalars or lists')) except TypeError: if isinstance(self._Vpos, list) and not isinstance(self['Epoch'], list): raise(ValueError('Inputs must be the same length, scalars or lists')) self['B'] = self.calc_B()
def __init__(self, pos, time, coord_system = 'GSM', INTERNAL_MODEL='LGM_IGRF', verbose=False): super(Lgm_TS04_QD, self).__init__(Position=pos, Epoch=time) self.verbose = verbose if not isinstance(pos, (Lgm_Vector.Lgm_Vector, list, np.ndarray)): raise(TypeError('pos must be a Lgm_Vector or list of Lgm_vectors') ) self._Vpos = pos2Lgm_Vector(pos) # time must be a datetime if not isinstance(time, (datetime.datetime, list)): raise(TypeError('time must be a datetime or list of datetime') ) if INTERNAL_MODEL not in (LGM_CDIP, LGM_EDIP, LGM_IGRF) and \ INTERNAL_MODEL not in ('LGM_CDIP', 'LGM_EDIP', 'LGM_IGRF'): raise(ValueError('INTERNAL_MODEL must be LGM_CDIP, LGM_EDIP, or LGM_IGRF') ) if isinstance(INTERNAL_MODEL, str): INTERNAL_MODEL = eval(INTERNAL_MODEL) self.attrs['internal_model'] = INTERNAL_MODEL if coord_system != 'GSM': raise(NotImplementedError('Different coord systems are not yet ready to use') ) self._mmi = Lgm_MagModelInfo.Lgm_MagModelInfo() # and actually set the internal model in Lgm if self.attrs['internal_model'] == LGM_CDIP: Lgm_Set_Lgm_B_cdip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_EDIP: Lgm_Set_Lgm_B_edip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_IGRF: Lgm_Set_Lgm_B_IGRF_InternalModel(pointer(self._mmi)) #self.data = T89_Data(pos, time, Kp, coord_system, INTERNAL_MODEL) self['B'] = self.calc_B()
def __init__( self, pos, time, Kp, coord_system='GSM', INTERNAL_MODEL='LGM_IGRF', ): # pos must be a Lgm_Vector or list of Lgm_Vectors super(Lgm_T89c, self).__init__( Position=pos, Epoch=time, Kp=Kp, coord_system=coord_system, INTERNAL_MODEL=INTERNAL_MODEL, ) if not isinstance(pos, Lgm_Vector.Lgm_Vector) and \ not isinstance(pos, list): raise ( TypeError('pos must be a Lgm_Vector or list of Lgm_vectors')) self._Vpos = pos2Lgm_Vector(pos) # time must be a datetime if not isinstance(time, datetime.datetime) and \ not isinstance(time, list): raise (TypeError('time must be a datetime or list of datetime')) try: for val in Kp: if val < 0 or val > 5: raise (ValueError( 'T89c is only defined for integer Kp from 0 to 5')) except TypeError: if Kp < 0 or Kp > 5: raise (ValueError( 'T89c is only defined for integer Kp from 0 to 5')) if INTERNAL_MODEL not in (LGM_CDIP, LGM_EDIP, LGM_IGRF) and \ INTERNAL_MODEL not in ('LGM_CDIP', 'LGM_EDIP', 'LGM_IGRF'): raise (ValueError( 'INTERNAL_MODEL must be LGM_CDIP, LGM_EDIP, or LGM_IGRF')) if isinstance(INTERNAL_MODEL, str): INTERNAL_MODEL = eval(INTERNAL_MODEL) self.attrs['internal_model'] = INTERNAL_MODEL if coord_system != 'GSM': raise (NotImplementedError( 'Different coord systems are not yet ready to use')) self._mmi = Lgm_MagModelInfo.Lgm_MagModelInfo() # and actually set the internal model in Lgm if self.attrs['internal_model'] == LGM_CDIP: Lgm_Set_Lgm_B_cdip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_EDIP: Lgm_Set_Lgm_B_edip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_IGRF: Lgm_Set_Lgm_B_IGRF_InternalModel(pointer(self._mmi)) # either they are all one element or they are compatible lists no 1/2 way try: if len(self._Vpos) != len(self['Kp']) or \ len(self._Vpos) != len(self['Epoch']) or \ len(self['Epoch']) != len(self['Kp']): raise (ValueError( 'Inputs must be the same length, scalars or lists')) except TypeError: if isinstance(self._Vpos, list) and not isinstance(self['Kp'], list) \ and not isinstance(self['Epoch'], list): raise (ValueError( 'Inputs must be the same length, scalars or lists')) #self.data = T89_Data(pos, time, Kp, coord_system, INTERNAL_MODEL) self['B'] = self.calc_B()
def __init__(self, pos, time, direction='NORTH', coord_system = 'GSM', INTERNAL_MODEL='LGM_IGRF', EXTERNAL_MODEL='LGM_EXTMODEL_T89', MAGMODEL_ARGS=None, TargetHeight=120, tol=1e-7): super(Lgm_TraceToEarth_py, self).__init__(Position=pos, Epoch=time, direction=direction, coord_system = coord_system, INTERNAL_MODEL=INTERNAL_MODEL, EXTERNAL_MODEL=EXTERNAL_MODEL, TargetHeight=TargetHeight, tol=tol) if not isinstance(pos, Lgm_Vector.Lgm_Vector) and \ not isinstance(pos, list): raise(TypeError('pos must be a Lgm_Vector or list') ) self._Vpos = pos2Lgm_Vector(pos) # time must be a datetime if not isinstance(time, datetime.datetime) and \ not isinstance(time, list): raise(TypeError('time must be a datetime or list of datetime') ) if direction[0].upper() == 'N': direction=1.0 elif direction[0].upper() == 'S': direction=-1.0 else: raise(ValueError("Did not understand direction, must be N or S")) if INTERNAL_MODEL not in (LGM_CDIP, LGM_EDIP, LGM_IGRF) and \ INTERNAL_MODEL not in ('LGM_CDIP', 'LGM_EDIP', 'LGM_IGRF'): raise(ValueError('INTERNAL_MODEL must be LGM_CDIP, LGM_EDIP, or LGM_IGRF') ) if isinstance(INTERNAL_MODEL, str): INTERNAL_MODEL = eval(INTERNAL_MODEL) self.attrs['internal_model'] = INTERNAL_MODEL if coord_system != 'GSM': raise(NotImplementedError('Different coord systems are not yet ready to use') ) self._mmi = Lgm_MagModelInfo.Lgm_MagModelInfo() # and actually set the internal model in Lgm if self.attrs['internal_model'] == LGM_CDIP: Lgm_Set_Lgm_B_cdip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_EDIP: Lgm_Set_Lgm_B_edip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_IGRF: Lgm_Set_Lgm_B_IGRF_InternalModel(pointer(self._mmi)) # set the external field model if EXTERNAL_MODEL not in (LGM_EXTMODEL_NULL, LGM_EXTMODEL_T87, LGM_EXTMODEL_T89, LGM_EXTMODEL_T89c, LGM_EXTMODEL_T96, LGM_EXTMODEL_T01S, LGM_EXTMODEL_T02, LGM_EXTMODEL_TS04, LGM_EXTMODEL_TS07, LGM_EXTMODEL_OP77) and \ EXTERNAL_MODEL not in ('LGM_EXTMODEL_NULL', 'LGM_EXTMODEL_T87', 'LGM_EXTMODEL_T89', 'LGM_EXTMODEL_T89c', 'LGM_EXTMODEL_T96', 'LGM_EXTMODEL_T01S', 'LGM_EXTMODEL_T02', 'LGM_EXTMODEL_TS04', 'LGM_EXTMODEL_TS07', 'LGM_EXTMODEL_OP77'): raise(ValueError('INTERNAL_MODEL must be {0}'.format('LGM_EXTMODEL_NULL', 'LGM_EXTMODEL_T87', 'LGM_EXTMODEL_T89', 'LGM_EXTMODEL_T89c', 'LGM_EXTMODEL_T96', 'LGM_EXTMODEL_T01S', 'LGM_EXTMODEL_T02', 'LGM_EXTMODEL_TS04', 'LGM_EXTMODEL_TS07', 'LGM_EXTMODEL_OP77')) ) if isinstance(EXTERNAL_MODEL, str): EXTERNAL_MODEL = eval(EXTERNAL_MODEL) self.attrs['external_model'] = EXTERNAL_MODEL # and actually set the internal model in Lgm if self.attrs['external_model'] == LGM_EXTMODEL_T89: Lgm_Set_Lgm_B_T89(pointer(self._mmi)) self._mmi.Kp = MAGMODEL_ARGS['Kp'] elif self.attrs['external_model'] == LGM_EXTMODEL_OP77: Lgm_Set_Lgm_B_OP77(pointer(self._mmi)) else: raise(NotImplementedError("The external model has not yet been implemented: {0}".format(self.attrs['external_model']))) # either they are all one element or they are compatible lists no 1/2 way try: if len(self._Vpos) != len(self['Kp']) or \ len(self._Vpos) != len(self['Epoch']) or \ len(self['Epoch']) != len(self['Kp']): raise(ValueError('Inputs must be the same length, scalars or lists')) except TypeError: if isinstance(self._Vpos, list) and not isinstance(self['Kp'], list) \ and not isinstance(self['Epoch'], list): raise(ValueError('Inputs must be the same length, scalars or lists')) date = Lgm_CTrans.dateToDateLong(self['Epoch']) utc = Lgm_CTrans.dateToFPHours(self['Epoch']) Lgm_Set_Coord_Transforms( date, utc, self._mmi.c) # dont need pointer as it is one ans = Lgm_Vector.Lgm_Vector(-1, -1, -1) retval = Lgm_TraceToEarth(pointer(self._Vpos), ctypes.pointer(ans), ctypes.c_double(TargetHeight), ctypes.c_double(direction), ctypes.c_double(tol), pointer(self._mmi) ) if retval == LGM_CLOSED: self['footpoint'] = ans self.attrs['retcode'] = retval elif retval == LGM_OPEN_IMF: self['footpoint'] = np.nan warnings.warn("LGM_OPEN_IMF") self.attrs['retcode'] = retval elif retval == LGM_OPEN_N_LOBE: self['footpoint'] = np.nan warnings.warn("LGM_OPEN_N_LOBE") self.attrs['retcode'] = retval elif retval == LGM_OPEN_S_LOBE: self['footpoint'] = np.nan warnings.warn("LGM_OPEN_S_LOBE") self.attrs['retcode'] = retval elif retval == LGM_INSIDE_EARTH: self['footpoint'] = np.nan warnings.warn("LGM_INSIDE_EARTH") self.attrs['retcode'] = retval elif retval == LGM_TARGET_HEIGHT_UNREACHABLE: self['footpoint'] = np.nan warnings.warn("LGM_TARGET_HEIGHT_UNREACHABLE") self.attrs['retcode'] = retval elif retval == LGM_BAD_TRACE: self['footpoint'] = np.nan warnings.warn("LGM_BAD_TRACE") self.attrs['retcode'] = retval
def __init__(self, pos, time, direction='NORTH', coord_system='GSM', INTERNAL_MODEL='LGM_IGRF', EXTERNAL_MODEL='LGM_EXTMODEL_T89', MAGMODEL_ARGS=None, TargetHeight=120, tol=1e-7): super(Lgm_TraceToEarth_py, self).__init__(Position=pos, Epoch=time, direction=direction, coord_system=coord_system, INTERNAL_MODEL=INTERNAL_MODEL, EXTERNAL_MODEL=EXTERNAL_MODEL, TargetHeight=TargetHeight, tol=tol) if not isinstance(pos, Lgm_Vector.Lgm_Vector) and \ not isinstance(pos, list): raise (TypeError('pos must be a Lgm_Vector or list')) self._Vpos = pos2Lgm_Vector(pos) # time must be a datetime if not isinstance(time, datetime.datetime) and \ not isinstance(time, list): raise (TypeError('time must be a datetime or list of datetime')) if direction[0].upper() == 'N': direction = 1.0 elif direction[0].upper() == 'S': direction = -1.0 else: raise (ValueError("Did not understand direction, must be N or S")) if INTERNAL_MODEL not in (LGM_CDIP, LGM_EDIP, LGM_IGRF) and \ INTERNAL_MODEL not in ('LGM_CDIP', 'LGM_EDIP', 'LGM_IGRF'): raise (ValueError( 'INTERNAL_MODEL must be LGM_CDIP, LGM_EDIP, or LGM_IGRF')) if isinstance(INTERNAL_MODEL, str): INTERNAL_MODEL = eval(INTERNAL_MODEL) self.attrs['internal_model'] = INTERNAL_MODEL if coord_system != 'GSM': raise (NotImplementedError( 'Different coord systems are not yet ready to use')) self._mmi = Lgm_MagModelInfo.Lgm_MagModelInfo() # and actually set the internal model in Lgm if self.attrs['internal_model'] == LGM_CDIP: Lgm_Set_Lgm_B_cdip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_EDIP: Lgm_Set_Lgm_B_edip_InternalModel(pointer(self._mmi)) elif self.attrs['internal_model'] == LGM_IGRF: Lgm_Set_Lgm_B_IGRF_InternalModel(pointer(self._mmi)) # set the external field model if EXTERNAL_MODEL not in (LGM_EXTMODEL_NULL, LGM_EXTMODEL_T87, LGM_EXTMODEL_T89, LGM_EXTMODEL_T89c, LGM_EXTMODEL_T96, LGM_EXTMODEL_T01S, LGM_EXTMODEL_T02, LGM_EXTMODEL_TS04, LGM_EXTMODEL_TS07, LGM_EXTMODEL_OP77) and \ EXTERNAL_MODEL not in ('LGM_EXTMODEL_NULL', 'LGM_EXTMODEL_T87', 'LGM_EXTMODEL_T89', 'LGM_EXTMODEL_T89c', 'LGM_EXTMODEL_T96', 'LGM_EXTMODEL_T01S', 'LGM_EXTMODEL_T02', 'LGM_EXTMODEL_TS04', 'LGM_EXTMODEL_TS07', 'LGM_EXTMODEL_OP77'): raise (ValueError('INTERNAL_MODEL must be {0}'.format( 'LGM_EXTMODEL_NULL', 'LGM_EXTMODEL_T87', 'LGM_EXTMODEL_T89', 'LGM_EXTMODEL_T89c', 'LGM_EXTMODEL_T96', 'LGM_EXTMODEL_T01S', 'LGM_EXTMODEL_T02', 'LGM_EXTMODEL_TS04', 'LGM_EXTMODEL_TS07', 'LGM_EXTMODEL_OP77'))) if isinstance(EXTERNAL_MODEL, str): EXTERNAL_MODEL = eval(EXTERNAL_MODEL) self.attrs['external_model'] = EXTERNAL_MODEL # and actually set the internal model in Lgm if self.attrs['external_model'] == LGM_EXTMODEL_T89: Lgm_Set_Lgm_B_T89(pointer(self._mmi)) self._mmi.Kp = MAGMODEL_ARGS['Kp'] elif self.attrs['external_model'] == LGM_EXTMODEL_OP77: Lgm_Set_Lgm_B_OP77(pointer(self._mmi)) else: raise (NotImplementedError( "The external model has not yet been implemented: {0}".format( self.attrs['external_model']))) # either they are all one element or they are compatible lists no 1/2 way try: if len(self._Vpos) != len(self['Kp']) or \ len(self._Vpos) != len(self['Epoch']) or \ len(self['Epoch']) != len(self['Kp']): raise (ValueError( 'Inputs must be the same length, scalars or lists')) except TypeError: if isinstance(self._Vpos, list) and not isinstance(self['Kp'], list) \ and not isinstance(self['Epoch'], list): raise (ValueError( 'Inputs must be the same length, scalars or lists')) date = Lgm_CTrans.dateToDateLong(self['Epoch']) utc = Lgm_CTrans.dateToFPHours(self['Epoch']) Lgm_Set_Coord_Transforms(date, utc, self._mmi.c) # dont need pointer as it is one ans = Lgm_Vector.Lgm_Vector(-1, -1, -1) retval = Lgm_TraceToEarth(pointer(self._Vpos), ctypes.pointer(ans), ctypes.c_double(TargetHeight), ctypes.c_double(direction), ctypes.c_double(tol), pointer(self._mmi)) if retval == LGM_CLOSED: self['footpoint'] = ans self.attrs['retcode'] = retval elif retval == LGM_OPEN_IMF: self['footpoint'] = np.nan warnings.warn("LGM_OPEN_IMF") self.attrs['retcode'] = retval elif retval == LGM_OPEN_N_LOBE: self['footpoint'] = np.nan warnings.warn("LGM_OPEN_N_LOBE") self.attrs['retcode'] = retval elif retval == LGM_OPEN_S_LOBE: self['footpoint'] = np.nan warnings.warn("LGM_OPEN_S_LOBE") self.attrs['retcode'] = retval elif retval == LGM_INSIDE_EARTH: self['footpoint'] = np.nan warnings.warn("LGM_INSIDE_EARTH") self.attrs['retcode'] = retval elif retval == LGM_TARGET_HEIGHT_UNREACHABLE: self['footpoint'] = np.nan warnings.warn("LGM_TARGET_HEIGHT_UNREACHABLE") self.attrs['retcode'] = retval elif retval == LGM_BAD_TRACE: self['footpoint'] = np.nan warnings.warn("LGM_BAD_TRACE") self.attrs['retcode'] = retval