; ; NOSA HEADER START ; ; The contents of this file are subject to the terms of the NASA Open ; Source Agreement (NOSA), Version 1.3 only (the "Agreement"). You may ; not use this file except in compliance with the Agreement. ; ; You can obtain a copy of the agreement at ; docs/NASA_Open_Source_Agreement_1.3.txt ; or ; http://sscweb.gsfc.nasa.gov/WebServices/NASA_Open_Source_Agreement_1.3.txt. ; ; See the Agreement for the specific language governing permissions ; and limitations under the Agreement. ; ; When distributing Covered Code, include this NOSA HEADER in each ; file and include the Agreement file at ; docs/NASA_Open_Source_Agreement_1.3.txt. If applicable, add the ; following below this NOSA HEADER, with the fields enclosed by ; brackets "[]" replaced with your own identifying information: ; Portions Copyright [yyyy] [name of copyright owner] ; ; NOSA HEADER END ; ; Copyright (c) 2013 United States Government as represented by the ; National Aeronautics and Space Administration. No copyright is claimed ; in the United States under Title 17, U.S.Code. All Other Rights Reserved. ; ;

;+ ; This class is an IDL representation of the SatelliteData ; element from the ; <a href=“http://sscweb.gsfc.nasa.gov/“>Satellite Situation Center</a> ; (SSC) XML schema. ; ; @copyright Copyright (c) 2013 United States Government as represented ; by the National Aeronautics and Space Administration. No ; copyright is claimed in the United States under Title 17, ; U.S.Code. All Other Rights Reserved. ; ; @author B. Harris ;-

;+ ; Creates an SpdfSatelliteData object. ; ; @param id {in} {type=string} ; satellite identifier. ; @param coordinateData {in} {type=SpdfCoordinateData} ; satellite coordinate data. ; @param time {in} {type=dblarr} ; julday time associated with each data point. ; @keyword bTraceData {in} {optional} {type=SpdfBTraceData} ; magnetic field trace data. ; @keyword radialLength {in} {optional} {type=dblarr} ; distance from center of Earth. ; @keyword magneticStrength {in} {optional} {type=dblarr} ; magnetic field strength. ; @keyword neutralSheetDistance {in} {optional} {type=dblarr} ; distance from neutral sheet. ; @keyword bowShockDistance {in} {optional} {type=dblarr} ; distance from bow shock. ; @keyword magnetoPauseDistance {in} {optional} {type=dblarr} ; distance from magneto pause. ; @keyword dipoleLValue {in} {optional} {type=dblarr} ; dipole L values. ; @keyword dipoleInvariantLatitude {in} {optional} {type=dblarr} ; dipole invariant latitude values. ; @keyword spacecraftRegion {in} {optional} {type=strarr} ; spacecraft region. ; @keyword radialTracedFootpointRegions {in} {optional} {type=strarr} ; radial traced footpoint region. ; @keyword bGseX {in} {optional} {type=dblarr} ; B GSE X values. ; @keyword bGseY {in} {optional} {type=dblarr} ; B GSE Y values. ; @keyword bGseZ {in} {optional} {type=dblarr} ; B GSE Z values. ; @keyword northBTracedFootpointRegions {in} {optional} {type=strarr} ; north B traced regions. ; @keyword southBTracedFootpointRegions {in} {optional} {type=strarr} ; south B traced regions. ; @returns reference to an SpdfSatelliteData object. ;- function SpdfSatelliteData::init, id, id, coordinateData, time, time, bTraceData = bTraceData, radialLength=radialLength, radialLength = radialLength, magneticStrength = magneticStrength, neutralSheetDistance=neutralSheetDistance, neutralSheetDistance = neutralSheetDistance, bowShockDistance = bowShockDistance, magnetoPauseDistance=magnetoPauseDistance, magnetoPauseDistance = magnetoPauseDistance, dipoleLValue = dipoleLValue, dipoleInvariantLatitude=dipoleInvariantLatitude, dipoleInvariantLatitude = dipoleInvariantLatitude, spacecraftRegion = spacecraftRegion, radialTracedFootpointRegions=radialTracedFootpointRegions, radialTracedFootpointRegions = radialTracedFootpointRegions, bGseX = bGseX, bGseY=bGseY, bGseY = bGseY, bGseZ = bGseZ, northBTracedFootpointRegions=northBTracedFootpointRegions, northBTracedFootpointRegions = northBTracedFootpointRegions, southBTracedFootpointRegions = southBTracedFootpointRegions compile_opt idl2

self.id = id
self.coordinateData = ptr_new(coordinateData)
self.time = ptr_new(time)

if keyword_set(bTraceData) then $
    self.bTraceData = ptr_new(bTraceData)
if keyword_set(radialLength) then $
    self.radialLength = ptr_new(radialLength)
if keyword_set(magneticStrength) then $
    self.magneticStrength = ptr_new(magneticStrength)
if keyword_set(neutralSheetDistance) then $
    self.neutralSheetDistance = ptr_new(neutralSheetDistance)
if keyword_set(bowShockDistance) then $
    self.bowShockDistance = ptr_new(bowShockDistance)
if keyword_set(magnetoPauseDistance) then $
    self.magnetoPauseDistance = ptr_new(magnetoPauseDistance)
if keyword_set(dipoleLValue) then $
    self.dipoleLValue = ptr_new(dipoleLValue)
if keyword_set(dipoleInvariantLatitude) then $
    self.dipoleInvariantLatitude = ptr_new(dipoleInvariantLatitude)
if keyword_set(spacecraftRegion) then $
    self.spacecraftRegion = ptr_new(spacecraftRegion)
if keyword_set(radialTracedFootpointRegions) then begin

    self.radialTracedFootpointRegions = $
        ptr_new(radialTracedFootpointRegions)
endif
if keyword_set(bGseX) then self.bGseX = ptr_new(bGseX)
if keyword_set(bGseY) then self.bGseY = ptr_new(bGseY)
if keyword_set(bGseZ) then self.bGseZ = ptr_new(bGseZ)
if keyword_set(northBTracedFootpointRegions) then $
    self.northBTracedFootpointRegions = ptr_new(northBTracedFootpointRegions)
if keyword_set(southBTracedFootpointRegions) then $
    self.southBTracedFootpointRegions = ptr_new(southBTracedFootpointRegions)

return, self

end

;+ ; Performs cleanup operations when this object is destroyed. ;- pro SpdfSatelliteData::cleanup compile_opt idl2

if ptr_valid(self.coordinateData) then $
    ptr_free, self.coordinateData
if ptr_valid(self.time) then ptr_free, self.time
if ptr_valid(self.bTraceData) then $
    ptr_free, self.bTraceData
if ptr_valid(self.radialLength) then $
    ptr_free, self.radialLength
if ptr_valid(self.magneticStrength) then $
    ptr_free, self.magneticStrength
if ptr_valid(self.neutralSheetDistance) then $
    ptr_free, self.neutralSheetDistance
if ptr_valid(self.bowShockDistance) then $
    ptr_free, self.bowShockDistance
if ptr_valid(self.magnetoPauseDistance) then $
    ptr_free, self.magnetoPauseDistance
if ptr_valid(self.dipoleLValue) then $
    ptr_free, self.dipoleLValue
if ptr_valid(self.dipoleInvariantLatitude) then $
    ptr_free, self.dipoleInvariantLatitude
if ptr_valid(self.spacecraftRegion) then $
    ptr_free, self.spacecraftRegion
if ptr_valid(self.radialTracedFootpointRegions) then $
    ptr_free, self.radialTracedFootpointRegions
if ptr_valid(self.bGseX) then ptr_free, self.bGseX
if ptr_valid(self.bGseY) then ptr_free, self.bGseY
if ptr_valid(self.bGseZ) then ptr_free, self.bGseZ
if ptr_valid(self.northBTracedFootpointRegions) then $
    ptr_free, self.northBTracedFootpointRegions
if ptr_valid(self.southBTracedFootpointRegions) then $
    ptr_free, self.southBTracedFootpointRegions

end

;+ ; Gets the id value. ; ; @returns id value. ;- function SpdfSatelliteData::getId compile_opt idl2

return, self.id

end

;+ ; Gets the coordinate data. ; ; @returns a reference to coordinate data. ;- function SpdfSatelliteData::getCoordinateData compile_opt idl2

if ptr_valid(self.coordinateData) then begin

    return, *self.coordinateData
endif else begin

    return, obj_new()
endelse

end

;+ ; Gets the time values. ; ; @returns the time values. ;- function SpdfSatelliteData::getTime compile_opt idl2

if ptr_valid(self.time) then begin

    return, *self.time
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the B field trace data. ; ; @returns a reference to SpdfBTraceData. ;- function SpdfSatelliteData::getBTraceData compile_opt idl2

if ptr_valid(self.bTraceData) then begin

    return, *self.bTraceData
endif else begin

    return, obj_new()
endelse

end

;+ ; Gets the radial length values. ; ; @returns a dblarr containing radial length values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getRadialLength compile_opt idl2

if ptr_valid(self.radialLength) then begin

    return, *self.radialLength
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the magnetic strength values. ; ; @returns a dblarr containing magnetic strength values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getMagneticStrength compile_opt idl2

if ptr_valid(self.magneticStrength) then begin

    return, *self.magneticStrength
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the neutral sheet distance values. ; ; @returns a dblarr containing neutral sheet distance values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getNeutralSheetDistance compile_opt idl2

if ptr_valid(self.neutralSheetDistance) then begin

    return, *self.neutralSheetDistance
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the bow shock distance values. ; ; @returns a dblarr containing bow shock distance values or the ; constant scaler !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getBowShockDistance compile_opt idl2

if ptr_valid(self.bowShockDistance) then begin

    return, *self.bowShockDistance
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the magneto pause distance values. ; ; @returns a dblarr containing magneto pause distance values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getMagnetoPauseDistance compile_opt idl2

if ptr_valid(self.magnetoPauseDistance) then begin

    return, *self.magnetoPauseDistance
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the dipole L values. ; ; @returns a dblarr containing dipole L values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getDipoleLValue compile_opt idl2

if ptr_valid(self.dipoleLValue) then begin

    return, *self.dipoleLValue
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the dipole invariant latitude values. ; ; @returns a dblarr containing dipole invariant latitude values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getDipoleInvariantLatitude compile_opt idl2

if ptr_valid(self.dipoleInvariantLatitude) then begin

    return, *self.dipoleInvariantLatitude
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the spacecraft region values. ; ; @returns a strarr containing spacecraft region values or the ; constant scalar ” if there are no values. ;- function SpdfSatelliteData::getSpacecraftRegion compile_opt idl2

if ptr_valid(self.spacecraftRegion) then begin

    return, *self.spacecraftRegion
endif else begin

    return, ''
endelse

end

;+ ; Gets the radial trace footpoint region values. ; ; @returns a strarr containing radial trace footpoint region values or ; the constant scalar ” if there are no values. ;- function SpdfSatelliteData::getRadialTracedFootpointRegions compile_opt idl2

if ptr_valid(self.radialTracedFootpointRegions) then begin

    return, *self.radialTracedFootpointRegions
endif else begin

    return, ''
endelse

end

;+ ; Gets the B GSE X values. ; ; @returns a dblarr containing B GSE X values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getBGseX compile_opt idl2

if ptr_valid(self.bGseX) then begin

    return, *self.bGseX
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the B GSE Y values. ; ; @returns a dblarr containing B GSE Y values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getBGseY compile_opt idl2

if ptr_valid(self.bGseY) then begin

    return, *self.bGseY
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the B GSE Z values. ; ; @returns a dblarr containing B GSE Z values or the ; constant scalar !values.d_NaN if there are no values. ;- function SpdfSatelliteData::getBGseZ compile_opt idl2

if ptr_valid(self.bGseZ) then begin

    return, *self.bGseZ
endif else begin

    return, !values.d_NaN
endelse

end

;+ ; Gets the north B traced regions values. ; ; @returns a strarr containing north B traced regions values or the ; constant scalar ” if there are no values. ;- function SpdfSatelliteData::getNorthBTracedFootpointRegions compile_opt idl2

if ptr_valid(self.northBTracedFootpointRegions) then begin

    return, *self.northBTracedFootpointRegions
endif else begin

    return, ''
endelse

end

;+ ; Gets the south B traced regions values. ; ; @returns a strarr containing south B traced regions values or the ; constant scalar ” if there are no values. ;- function SpdfSatelliteData::getSouthBTracedFootpointRegions compile_opt idl2

if ptr_valid(self.southBTracedFootpointRegions) then begin

    return, *self.southBTracedFootpointRegions
endif else begin

    return, ''
endelse

end

;+ ; Defines the SpdfSatelliteData class. ; ; @field id satellite identifier. ; @field coordinateData satellite coordinate data. ; @field time time associated with each data point. ; @field bTraceData magnetic field trace data. ; @field radialLength distance from center of Earth. ; @field magneticStrength magnetic field strength. ; @field neutralSheetDistance distance from neutral sheet. ; @field bowShockDistance distance from bow shock. ; @field magnetoPauseDistance distance from magneto pause. ; @field dipoleLValue dipole L values. ; @field dipoleInvariantLatitude dipole invariant latitude values. ; @field spacecraftRegion spacecraft region. ; @field radialTracedFootpointRegions radial trace footpoint region. ; @field bGseX B GSE X values. ; @field bGseY B GSE Y values. ; @field bGseZ B GSE Z values. ; @field northBTracedFootpointRegions north B traced regions. ; @field southBTracedFootpointRegions south B traced regions. ;- pro SpdfSatelliteData__define compile_opt idl2 struct = { SpdfSatelliteData, id:, id:'', coordinateData:ptr_new(), time:ptrnew(), time:ptr_new(), bTraceData:ptr_new(), radialLength:ptrnew(), radialLength:ptr_new(), magneticStrength:ptr_new(), neutralSheetDistance:ptrnew(), neutralSheetDistance:ptr_new(), bowShockDistance:ptr_new(), magnetoPauseDistance:ptrnew(), magnetoPauseDistance:ptr_new(), dipoleLValue:ptr_new(), dipoleInvariantLatitude:ptrnew(), dipoleInvariantLatitude:ptr_new(), spacecraftRegion:ptr_new(), radialTracedFootpointRegions:ptrnew(), radialTracedFootpointRegions:ptr_new(), bGseX:ptr_new(), bGseY:ptrnew(), bGseY:ptr_new(), bGseZ:ptr_new(), northBTracedFootpointRegions:ptrnew(), northBTracedFootpointRegions:ptr_new(), southBTracedFootpointRegions:ptr_new() $ } end