; docformat = 'rst' ; ; NAME: ; sdssReadMOC ; PURPOSE: ; Read the Sloan Digital Sky Survey Moving Object Catalog. ; ;+ ; :Description: ; Read the Sloan Digital Sky Survey Moving Object Catalog. ; ; :Categories: ; Database, Asteroid, Colors ; ; :Params: ; MOC: in, optional, type=string ; Path to a local version of the SDSS MOC. Optional if either ; the config keyword, or initIDL is properly set. ; ; :Keywords: ; release: in, optional, type=integer, default=4 ; The release number, ADR3 and ADR4 are supported. ; config: in, optional, type=string ; A configuration file, providing catalog information. ; [Surface properties] ; sdssmoc = PATH_TO_YOUR_SDSS_MOC_FILE ; ; :Returns: A structure with the orbital elements and the absolute ; magnitude. Fields are:: ; .NUM: Asteroid IAU Number ; .NAME: Asteroid Name or Provisional Designation ; .H: Absolute magnitude (Bowell HG System) ; .arcObs: Orbital arc spanned by observations ; .nbObs: Number of observations used in the computation ; .n: Mean anomaly, deg. ; .o: Argument of perihelion, deg (J2000.0) ; .Om: Longitude of ascending node, deg (J2000.0) ; .A: Semi-major axis AU ; .E: Eccentricity ; .I: Inclination (deg.) ; .ceuVal: Current Ephemeris Uncertainty (CEU), arcsec ; .ceuRate: Rate of change of CEU, arcsec/day ; .ceuDate: Date of CEU, yyyymmdd (00:00 UT) ; ; :Examples: ; Plot the (a,e) distribution of asteroids ; IDL> astorb=readastorb() ; IDL> plot, astorb.a, astorb.e, psym=3 ; ; :Uses: ; initIDL ; ; :Author: ; B.Carry (OCA) ; ; :History: ; Change History:: ; Written in October 2015, B. Carry (OCA) ;- function sdssReadMOC, moc, release=release, config=config COMPILE_OPT hidden, idl2 ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ;--- TAG --- I -- Initialization And Input Verification -----------------------; ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ;--I.1-- Set Input SDSS MOC File ------------------------------------------------------ ;--I.1.1-- SDSS MOC Provided as Argument if keyword_set(moc) then begin moc = strtrim(moc,2) ;--I.1.2-- SDSS MOC From AstroIM Configuration endif else begin if keyword_set(config) then begin confCatalog= initIDL(config, /CATALOG) endif else begin confAstroIM= initIDL() confCatalog= initIDL(confAstroIM.soft.catalog, /CATALOG) endelse moc = confCatalog.moc endelse ;--I.2-- Test if File Exist ----------------------------------------------------------- if not file_test(moc,/read) then begin message, 'SDSS MOC file not found: '+moc return, -1 endif ;--I.3-- Check SDSS MOC Release Version ----------------------------------------------- if not keyword_set(release) then release=4 ;--I.4-- Open MOC File for Reading ---------------------------------------------------- ;--I.4.1-- Number of Entries spawn, 'wc '+moc, res split=strsplit(res,' ',/extract) nbMOC = round(float(split[0])) ;--I.4.2-- Open File openr, idIn, MOC, /Get_Lun ;--I.5-- Define Line Format ----------------------------------------------------------- ;--I.5.1-- SDSS Identification ; fmt1='A7,I6,I2,I5,I6,F9.4,F9.4' fmt1='A6,I6,I2,I5,I6,F9.3,F9.3' mocID='' run=0L col=0L field=0L object=0L rowc=0. colc=0. ;--I.5.2-- Astrometry ; fmt2='2x,D13.5,F11,F11,F11,F11,F12,1x,F8.4,F7.4,F8.4,F7.4,F8.4,F7.4' fmt2='2x,D13.5,F11.6,F+11.6,F11.6,F11.6,F12.6,1x,F+8.4,F7.4,F+8.4,F7.4,+F8.4,+F8.4' mjd=0.d ra=0. dec=0. lambda=0. beta=0. phi=0. vMu=0. uMu=0. vNu=0. uNu=0. vLambda=0. vBeta =0. ;--I.5.3-- Photometry ; fmt3='2x,F6.2,F5.2,F6.2,F5.2,F6.2,F5.2,F6.2,F5.2,F6.2,F5.2,F6.2,F5.2,1x,F6.2,F6.2' fmt3='1x,F6.2,F5.2,F6.2,F5.2,F6.2,F5.2,F6.2,F5.2,F6.2,F5.2,F6.2,F5.2,1x,F6.2,F6.2' colU=0. & errU=0. colG=0. & errG=0. colR=0. & errR=0. colI=0. & errI=0. colZ=0. & errZ=0. colA=0. & errA=0. colV=0. & colB=0. ;--I.5.4-- Identification ; fmt4='I2,I8,A21,I3,I3,I9' fmt4='I2,I8,1x,A-20,I3,I3,1x,I08' idFlag=0L ssoNum=0L ssoName='' kDetect=0 nbDetect=0 ssoFlags=0L ;--I.5.5-- Matching Information ; fmt5='1x,F11,F11,F6,1x,F8,F8,F6' fmt5='1x,F11.6,F11.6,F6.2,1x,F8.3,F8.3,F6.2' RAc=0. DECc=0. Vmag=0. dGeo=0. dSun=0. phase=0. ;--I.5.6-- Osculating Elements ; fmt6='1x,A21,F6,F5,I6,D14,D13,F11,F11,F11,F11,F11' fmt6='2x,A-20,F6.2,F5.2,I6,D14.6,D13.8,F11.8,F11.6,F11.6,F11.6,F11.6' oscID='' H=0. & G=0. arc=0L epoch=0.D a=0.d e=0. i=0. aNode=0. lPeri=0. M=0. ;--I.5.7-- Proper Elements ; fmt7='1x,A21,D13,F11,F11' fmt7='2x,A-20,D13.8,F11.8,F11.6' propId='' ap=0.d ep=0. ip=0. ;--I.5.8-- Flags ; fmt8='A128' fmt8='1x,A128' flags='' ;--I.5.9-- Build Format String case release of 3: fmt='('+fmt1+','+fmt2+','+fmt3+','+fmt4+','+fmt5+','+fmt6+','+fmt7+')' 4: fmt='('+fmt1+','+fmt2+','+fmt3+','+fmt4+','+fmt5+','+fmt6+','+fmt7+','+fmt8+')' else: begin message, /IOERROR, 'Only 3rd and 4th releases are supported!' return, -2 end endcase ;--I.6-- Output Structure ------------------------------------------------------------- empty={ mocID:'', run:0L, col:0L, field:0L, object:0L, rowc:0., colc:0., $ mjd:0.d, ra:0., dec:0., lambda:0., beta:0., phi:0., $ vMu:0., uMu:0., vNu:0., uNu:0., vLambda:0., vBeta:0., $ colU:0., errU:0., colG:0., errG:0., colR:0., errR:0., colI:0., errI:0., colZ:0., errZ:0., $ colA:0., errA:0., colV:0., colB:0., $ idFlag:0L, ssoNum:0L, ssoName:'', kDetect:0, nbDetect:0, ssoFlags:0L, $ RAc:0., DECc:0., Vmag:0., dGeo:0., dSun:0., phase:0., $ oscID:'', H:0., G:0., arc:0L, epoch:0.D, a:0.d, e:0., i:0., aNode:0., lPeri:0., M:0., $ propId:'', ap:0.d, ep:0., ip:0., flags:'' } moc = replicate(empty, nbMOC) ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ;--- TAG --- II -- Read Columns from SDSS MOC 3rd Release -----------------------; ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; if release eq 3 then begin for kM=0, nbMOC-1 do begin ;--II.1-- Read SDSS MOC3 --------------------------------------------------------------- readf, idIn, mocID, run, col, field, object, rowc, colc, $ mjd, ra, dec, lambda, beta, phi, vMu, uMu, vNu, uNu, vLambda, vBeta, $ colU, errU, colG, errG, colR, errR, colI, errI, colZ, errZ, colA, errA, colV, colB, $ idFlag, ssoNum, ssoName, kDetect, nbDetect, ssoFlags, $ RAc, DECc, Vmag, dGeo, dSun, phase, $ oscId, H,G, arc, epoch, a, e, i, aNode, lPeri, M, $ propId, ap, ep, ip, $ format=fmt ;--II.2-- Store Values in Structure ---------------------------------------------------- moc[kM].mocID = strtrim(mocID,2) moc[kM].run = run moc[kM].col = col moc[kM].field = field moc[kM].object = object moc[kM].rowc = rowc moc[kM].colc = colc moc[kM].mjd = mjd moc[kM].ra = ra moc[kM].dec = dec moc[kM].lambda = lambda moc[kM].beta = beta moc[kM].phi = phi moc[kM].vMu = vMu moc[kM].uMu = uMu moc[kM].vNu = vNu moc[kM].uNu = uNu moc[kM].vLambda = vLambda moc[kM].vBeta = vBeta moc[kM].colU = colU moc[kM].errU = errU moc[kM].colG = colG moc[kM].errG = errG moc[kM].colR = colR moc[kM].errR = errR moc[kM].colI = colI moc[kM].errI = errI moc[kM].colZ = colZ moc[kM].errZ = errZ moc[kM].colA = colA moc[kM].errA = errA moc[kM].colV = colV moc[kM].colB = colB moc[kM].idFlag = idFlag moc[kM].ssoNum = ssoNum moc[kM].ssoName = strtrim(ssoName,2) moc[kM].kDetect = kDetect moc[kM].nbDetect = nbDetect moc[kM].ssoFlags = ssoFlags moc[kM].RAc = RAc moc[kM].DECc = DECc moc[kM].Vmag = Vmag moc[kM].dGeo = dGeo moc[kM].dSun = dSun moc[kM].phase = phase moc[kM].oscId = strtrim(oscId,2) moc[kM].H = H moc[kM].G = G moc[kM].arc = arc moc[kM].epoch = epoch moc[kM].a = a moc[kM].e = e moc[kM].i = i moc[kM].aNode = aNode moc[kM].lPeri = lPeri moc[kM].M = M moc[kM].propId = strtrim(propId,2) moc[kM].ap = ap moc[kM].ep = ep moc[kM].ip = ip endfor endif ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; ;--- TAG --- III -- Read Columns from SDSS MOC 4th Release -----------------------; ;-----------------------------------------------------------------------------------------------; ;-----------------------------------------------------------------------------------------------; if release eq 4 then begin for kM=0, nbMOC-1 do begin ;--III.1-- Read SDSS MOC4 --------------------------------------------------------------- readf, idIn, mocID, run, col, field, object, rowc, colc, $ mjd, ra, dec, lambda, beta, phi, vMu, uMu, vNu, uNu, vLambda, vBeta, $ colU, errU, colG, errG, colR, errR, colI, errI, colZ, errZ, colA, errA, colV, colB, $ idFlag, ssoNum, ssoName, kDetect, nbDetect, ssoFlags, $ RAc, DECc, Vmag, dGeo, dSun, phase, $ oscId, H,G, arc, epoch, a, e, i, aNode, lPeri, M, $ propId, ap, ep, ip, flags, $ format=fmt ;--III.2-- Store Values in Structure ---------------------------------------------------- moc[kM].mocID = strtrim(mocID,2) moc[kM].run = run moc[kM].col = col moc[kM].field = field moc[kM].object = object moc[kM].rowc = rowc moc[kM].colc = colc moc[kM].mjd = mjd moc[kM].ra = ra moc[kM].dec = dec moc[kM].lambda = lambda moc[kM].beta = beta moc[kM].phi = phi moc[kM].vMu = vMu moc[kM].uMu = uMu moc[kM].vNu = vNu moc[kM].uNu = uNu moc[kM].vLambda = vLambda moc[kM].vBeta = vBeta moc[kM].colU = colU moc[kM].errU = errU moc[kM].colG = colG moc[kM].errG = errG moc[kM].colR = colR moc[kM].errR = errR moc[kM].colI = colI moc[kM].errI = errI moc[kM].colZ = colZ moc[kM].errZ = errZ moc[kM].colA = colA moc[kM].errA = errA moc[kM].colV = colV moc[kM].colB = colB moc[kM].idFlag = idFlag moc[kM].ssoNum = ssoNum moc[kM].ssoName = strtrim(ssoName,2) moc[kM].kDetect = kDetect moc[kM].nbDetect = nbDetect moc[kM].ssoFlags = ssoFlags moc[kM].RAc = RAc moc[kM].DECc = DECc moc[kM].Vmag = Vmag moc[kM].dGeo = dGeo moc[kM].dSun = dSun moc[kM].phase = phase moc[kM].oscId = strtrim(oscId,2) moc[kM].H = H moc[kM].G = G moc[kM].arc = arc moc[kM].epoch = epoch moc[kM].a = a moc[kM].e = e moc[kM].i = i moc[kM].aNode = aNode moc[kM].lPeri = lPeri moc[kM].M = M moc[kM].propId = strtrim(propId,2) moc[kM].ap = ap moc[kM].ep = ep moc[kM].ip = ip moc[kM].flags = flags endfor endif close, idIn free_lun, idIn return, moc ;-- moc structure DeMeo & Carry 2013 ;-- moc structure DeMeo & Carry 2013 ;-- moc structure DeMeo & Carry 2013;http://www.astro.washington.edu/users/ivezic/sdssmoc/photoflags.txt ;-- moc structure DeMeo & Carry 2013if adr4 eq 0 then begin ;-- moc structure DeMeo & Carry 2013 readfmt, file, $ ;-- moc structure DeMeo & Carry 2013 '99x,99x,44x,'+$ ;-- moc structure DeMeo & Carry 2013 'I1,1x,I5,1x,A20,'+$ ;-Object Tag, Number, Name ;-- moc structure DeMeo & Carry 2013 '1x,I2,1x,I2,'+$ ;-Number of SDSS obs, over TOTAL ;-- moc structure DeMeo & Carry 2013 '84x,F5,26x,D12.8,1x,D10.8,1x,D10.6,91x,'+ $ ;-Hmag & orbital elements ;-- moc structure DeMeo & Carry 2013 '10x,I1,1x,I1,13x,'+$ ;-Flags ;-- moc structure DeMeo & Carry 2013 'I1,13x,I1,1x,I1,7x,I1,1x,I1,5x,'+$ ;-- moc structure DeMeo & Carry 2013 'I1,5x,I1,1x,I1,1x,I1,3x,'+$ ;-- moc structure DeMeo & Carry 2013 'I1,5x,I1,13x,'+$ ;-- moc structure DeMeo & Carry 2013 'I1,17x,I1', $ ;-Flags ,7x,I1 ;-- moc structure DeMeo & Carry 2013 knownTag, number, design, $ ;-- moc structure DeMeo & Carry 2013 obsCount, obsTot, $ ;-- moc structure DeMeo & Carry 2013 Hmag, a_sdss, e_sdss, i_sdss, $ ;-- moc structure DeMeo & Carry 2013 f_EDGE, f_BADSKY, $ ;-- moc structure DeMeo & Carry 2013 f_NOCHECK, f_BIN2, f_INTERP, f_NODEBLEND, f_BIN4, $ ;-- moc structure DeMeo & Carry 2013 f_CR, f_INTERP_PCT, f_BADMOV, f_DEBLEND_DEGEN, $ ;-- moc structure DeMeo & Carry 2013 f_MAYBECR, f_FEWPOS, $ ;-- moc structure DeMeo & Carry 2013 f_STAT, f_CLOSE,$ ;-- moc structure DeMeo & Carry 2013 /SILENT ;-- moc structure DeMeo & Carry 2013endif ;-- moc structure DeMeo & Carry 2013if adr4 eq 1 then begin ;-- moc structure DeMeo & Carry 2013 readfmt, file, $ ;-- moc structure DeMeo & Carry 2013 '99x,99x,44x,'+$ ;-- moc structure DeMeo & Carry 2013 'I1,1x,I7,1x,A20,'+$ ;-Object Tag, Number, Name ;-- moc structure DeMeo & Carry 2013 '1x,I2,1x,I2,'+$ ;-Number of SDSS obs, over TOTAL ;-- moc structure DeMeo & Carry 2013 '84x,F5,26x,D12.8,1x,D10.8,1x,D10.6,91x,'+ $ ;-Hmag & orbital elements ;-- moc structure DeMeo & Carry 2013 '10x,I1,1x,I1,13x,'+$ ;-Flags ;-- moc structure DeMeo & Carry 2013 'I1,13x,I1,1x,I1,7x,I1,1x,I1,5x,'+$ ;-- moc structure DeMeo & Carry 2013 'I1,5x,I1,1x,I1,1x,I1,3x,'+$ ;-- moc structure DeMeo & Carry 2013 'I1,5x,I1,13x,'+$ ;-- moc structure DeMeo & Carry 2013 'I1,17x,I1', $ ;-Flags ,7x,I1 ;-- moc structure DeMeo & Carry 2013 knownTag, number, design, $ ;-- moc structure DeMeo & Carry 2013 obsCount, obsTot, $ ;-- moc structure DeMeo & Carry 2013 Hmag, a_sdss, e_sdss, i_sdss, $ ;-- moc structure DeMeo & Carry 2013 f_EDGE, f_BADSKY, $ ;-- moc structure DeMeo & Carry 2013 f_NOCHECK, f_BIN2, f_INTERP, f_NODEBLEND, f_BIN4, $ ;-- moc structure DeMeo & Carry 2013 f_CR, f_INTERP_PCT, f_BADMOV, f_DEBLEND_DEGEN, $ ;-- moc structure DeMeo & Carry 2013 f_MAYBECR, f_FEWPOS, $ ;-- moc structure DeMeo & Carry 2013 f_STAT, f_CLOSE,$ ;-- moc structure DeMeo & Carry 2013 /SILENT ;-- moc structure DeMeo & Carry 2013 ;-- moc structure DeMeo & Carry 2013endif ;-- moc structure DeMeo & Carry 2013allmoc={moID: moid, $ ;-- moc structure DeMeo & Carry 2013 obsMJD: obsMJD, $ ;-- moc structure DeMeo & Carry 2013 obsRA: obsRA, $ ;-- moc structure DeMeo & Carry 2013 obsDEC: obsDEC, $ ;-- moc structure DeMeo & Carry 2013 obsLong: obsLong, $ ;-- moc structure DeMeo & Carry 2013 obsLat: obsLat, $ ;-- moc structure DeMeo & Carry 2013 colU: colU, $ ;-- moc structure DeMeo & Carry 2013 errU: errU, $ ;-- moc structure DeMeo & Carry 2013 colG: colG, $ ;-- moc structure DeMeo & Carry 2013 errG: errG, $ ;-- moc structure DeMeo & Carry 2013 colR: colR, $ ;-- moc structure DeMeo & Carry 2013 errR: errR, $ ;-- moc structure DeMeo & Carry 2013 colI: colI, $ ;-- moc structure DeMeo & Carry 2013 errI: errI, $ ;-- moc structure DeMeo & Carry 2013 colZ: colZ, $ ;-- moc structure DeMeo & Carry 2013 errZ: errZ, $ ;-- moc structure DeMeo & Carry 2013 colA: colA, $ ;-- moc structure DeMeo & Carry 2013 errA: errA, $ ;-- moc structure DeMeo & Carry 2013 knownTag: knownTag, $ ;-- moc structure DeMeo & Carry 2013 number: number, $ ;-- moc structure DeMeo & Carry 2013 design: design, $ ;-- moc structure DeMeo & Carry 2013 obsCount: obsCount, $ ;-- moc structure DeMeo & Carry 2013 obsTot: obsTot, $ ;-- moc structure DeMeo & Carry 2013 Hmag: Hmag, $ ;-- moc structure DeMeo & Carry 2013 a_sdss: a_sdss, $ ;-- moc structure DeMeo & Carry 2013 e_sdss: e_sdss, $ ;-- moc structure DeMeo & Carry 2013 i_sdss: i_sdss, $ ;-- moc structure DeMeo & Carry 2013 f_EDGE: f_EDGE, $ ;-- moc structure DeMeo & Carry 2013 f_BADSKY: f_BADSKY, $ ;-- moc structure DeMeo & Carry 2013 f_NOCHECK: f_NOCHECK, $ ;-- moc structure DeMeo & Carry 2013 f_BIN2: f_BIN2, $ ;-- moc structure DeMeo & Carry 2013 f_INTERP: f_INTERP, $ ;-- moc structure DeMeo & Carry 2013 f_NODEBLEND: f_NODEBLEND, $ ;-- moc structure DeMeo & Carry 2013 f_BIN4: f_BIN4, $ ;-- moc structure DeMeo & Carry 2013 f_CR: f_CR, $ ;-- moc structure DeMeo & Carry 2013 f_INTERP_PCT: f_INTERP_PCT, $ ;-- moc structure DeMeo & Carry 2013 f_BADMOV: f_BADMOV, $ ;-- moc structure DeMeo & Carry 2013 f_DEBLEND_DEGEN: f_DEBLEND_DEGEN, $ ;-- moc structure DeMeo & Carry 2013 f_MAYBECR: f_MAYBECR, $ ;-- moc structure DeMeo & Carry 2013 f_FEWPOS: f_FEWPOS, $ ;-- moc structure DeMeo & Carry 2013 f_STAT: f_STAT, $ ;-- moc structure DeMeo & Carry 2013 f_CLOSE: f_CLOSE} ;-- moc structure DeMeo & Carry 2013 ;-- moc structure DeMeo & Carry 2013 ;-- moc structure DeMeo & Carry 2013return, allmoc end