Skip to content

Commit e1806dc

Browse files
authored
Add files via upload
Calculates euclidean distances between q, e, i, peri, node values between two comets. Finds minimum euclidean distance between an input comet designation and those in JPL comet elements file # The file ELEMENTS.COMET is on line https://ssd.jpl.nasa.gov/?sb_elem # direct link: https://ssd.jpl.nasa.gov/dat/ELEMENTS.COMET which must be downloaded to your working directory
1 parent 394f235 commit e1806dc

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

FindCometWithClosestElements.py

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
FindCometWithClosestElements.py
4+
5+
Created on Fri Apr 3 16:57:33 2020
6+
7+
@author: charb
8+
"""
9+
import math
10+
11+
desig = 'C/2019 Y4'
12+
nameref = ''
13+
qref = 0
14+
eref = 0
15+
iref = 0
16+
periref = 0
17+
noderef = 0
18+
19+
mindistance = 10000000000
20+
mincometname = ''
21+
mincometname = 0
22+
mincometq = 0
23+
mincomete = 0
24+
mincometi = 0
25+
mincometperi = 0
26+
mincometnode = 0
27+
28+
# The file ELEMENTS.COMET is on line https://ssd.jpl.nasa.gov/?sb_elem
29+
# direct link: https://ssd.jpl.nasa.gov/dat/ELEMENTS.COMET
30+
31+
file = open('ELEMENTS.COMET', 'r')
32+
found = False
33+
for lines in file:
34+
# print(lines)
35+
if ((desig in lines) == True):
36+
# print(lines)
37+
nameref = lines[0:44].strip()
38+
qref = float(lines[52:64].strip())
39+
eref = float(lines[64:75].strip())
40+
iref = float(lines[75:85].strip())
41+
periref = float(lines[85:95].strip())
42+
noderef = float(lines[95:105].strip())
43+
print('found elements for', desig)
44+
# print(nameref, qref,eref,iref, periref, noderef)
45+
found = True
46+
break
47+
if (found == False):
48+
print(' elements for', desig, 'not found')
49+
else:
50+
51+
f = open('ELEMENTS.COMET', 'r')
52+
for lines in f:
53+
#print(lines)
54+
if (lines.startswith('Num') or lines.startswith('---')):
55+
pass
56+
elif ((desig in lines) == True):
57+
pass
58+
else:
59+
name = lines[0:44].strip()
60+
q = float(lines[52:64].strip())
61+
e = float(lines[64:75].strip())
62+
i = float(lines[75:85].strip())
63+
peri = float(lines[85:95].strip())
64+
node= float(lines[95:105].strip())
65+
qdiff = qref-q
66+
ediff = eref-e
67+
idiff = iref-i
68+
peridiff = periref-peri
69+
nodediff = noderef-node
70+
if (idiff > 180):
71+
idiff = 360 + i - iref
72+
if (peridiff > 180):
73+
peridiff = 360 + peri - periref
74+
if (nodediff > 180):
75+
nodediff = 360 + node - noderef
76+
# Euclidian distance in q, e, i, peri, node space
77+
distance = math.sqrt( (qdiff*qdiff) +(ediff*ediff) +(idiff*idiff) + (peridiff*peridiff) + (nodediff*nodediff))
78+
79+
if (distance < mindistance):
80+
mindistance = distance
81+
mincometname = name
82+
mincometq = q
83+
mincomete = e
84+
mincometi = i
85+
mincometperi = peri
86+
mincometnode = node
87+
print('Reference comet')
88+
print(nameref, 'q:', qref, 'e:', eref, 'i:', iref, 'peri:', periref, 'node:', noderef)
89+
print('Closest neighbor comet')
90+
print(mincometname, 'q:', mincometq, 'e:', mincomete, 'i:', mincometi, 'peri:', mincometperi, 'node:', mincometnode)
91+
x = (qref-mincometq)*(qref-mincometq) + (eref-mincomete)*(eref-mincomete) + (iref-mincometi)*(iref-mincometi) + (periref-mincometperi)*(periref-mincometperi) +(noderef-mincometnode)*(noderef-mincometnode)
92+
print('Minimum Euclidian distance (q, e, i, peri, node):', mindistance)
93+
if (mindistance > 2):
94+
print('Large distance, probably not a good match')
95+

0 commit comments

Comments
 (0)