Skip to content

Commit 0dce20b

Browse files
committed
all
1 parent e701ade commit 0dce20b

File tree

4 files changed

+514
-0
lines changed

4 files changed

+514
-0
lines changed

AISTRO.py

+350
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,350 @@
1+
import sys
2+
import numpy as np
3+
import os
4+
5+
from Image import Image
6+
import Galaxy
7+
from Model import Model
8+
9+
RECOGNIZED = ["-GETREDSHIFT", "-TRAIN", "-GET2DFRAMES", "-GETNPY", "-GETRGBCOMPOSITE",
10+
"-FINETUNE", "-VISUALIZEMODEL", "-VISUALIZELAYER", "--cdnts", "--files",
11+
"--data", "--model", "--epochs", "--batch_size", "--csv", "--folder"]
12+
13+
def GET2DFRAMES(parsed):
14+
15+
valid_commands = [RECOGNIZED[8], RECOGNIZED[9]]
16+
17+
if parsed[2][:2] != "--":
18+
raise ValueError("Misplaced or incorrect command, " + parsed[2])
19+
20+
cmd_stack = []
21+
values = {"cdnts": [], "filenames": []}
22+
23+
for i in range(2, len(parsed)):
24+
if parsed[i] not in valid_commands:
25+
26+
if len(cmd_stack) > 0:
27+
28+
if cmd_stack[-1][0] == valid_commands[0] and 0 <= cmd_stack[-1][1] < 2: # if cdnts has been invoked and cannot be more than 2 cdnts
29+
values["cdnts"].append(parsed[i])
30+
cmd_stack[-1][1] += 1
31+
32+
elif cmd_stack[-1][0] == valid_commands[1] and 0 <= cmd_stack[-1][1] < 5: # if files has been invoked and less
33+
values["filenames"].append(parsed[i])
34+
cmd_stack[-1][1] += 1
35+
36+
else:
37+
raise ValueError("Misplaced or incorrect command for GET2DFRAMES, " + parsed[i])
38+
39+
else: # raise error if neither of the recognized commands have been invoked
40+
raise ValueError("Misplaced or incorrect command for GET2DFRAMES, " + parsed[i])
41+
42+
elif parsed[i].lower() == valid_commands[0].lower(): # for cdnts
43+
cmd_stack.append([valid_commands[0], 0])
44+
45+
elif parsed[i].lower() == valid_commands[1].lower(): # for files
46+
cmd_stack.append([valid_commands[1], 0])
47+
48+
return values
49+
50+
def GETNPY(parsed):
51+
valid_commands = [RECOGNIZED[8], RECOGNIZED[9]]
52+
53+
if parsed[2][:2] != "--":
54+
raise ValueError("Misplaced or incorrect command, " + parsed[2])
55+
56+
cmd_stack = []
57+
values = {"cdnts": [], "filenames": []}
58+
59+
for i in range(2, len(parsed)):
60+
if parsed[i] not in valid_commands:
61+
62+
if len(cmd_stack) > 0:
63+
64+
if cmd_stack[-1][0] == valid_commands[0] and 0 <= cmd_stack[-1][1] < 2: # if cdnts has been invoked and cannot be more than 2 cdnts
65+
values["cdnts"].append(parsed[i])
66+
cmd_stack[-1][1] += 1
67+
68+
elif cmd_stack[-1][0] == valid_commands[1] and 0 <= cmd_stack[-1][1] < 5: # if files has been invoked and less
69+
values["filenames"].append(parsed[i])
70+
cmd_stack[-1][1] += 1
71+
else:
72+
raise ValueError("Misplaced or incorrect command for GET2DFRAMES, " + parsed[i])
73+
74+
else: # raise error if neither of the recognized commands have been invoked
75+
raise ValueError("Misplaced or incorrect command for GET2DFRAMES, " + parsed[i])
76+
77+
elif parsed[i].lower() == valid_commands[0].lower(): # for cdnts
78+
cmd_stack.append([valid_commands[0], 0])
79+
80+
elif parsed[i].lower() == valid_commands[1].lower(): # for files
81+
cmd_stack.append([valid_commands[1], 0])
82+
83+
if cmd_stack[-1][0] == valid_commands[1] and cmd_stack[-1][1] < 5:
84+
raise ValueError("All five files must be given as input in the order u, g, r, i, z.")
85+
86+
return values
87+
88+
def GETRGBCOMPOSITE(parsed):
89+
valid_commands = [RECOGNIZED[8], RECOGNIZED[9]]
90+
91+
if parsed[2][:2] != "--":
92+
raise ValueError("Misplaced or incorrect command, " + parsed[2])
93+
94+
cmd_stack = []
95+
values = {"cdnts": [], "filenames": []}
96+
97+
for i in range(2, len(parsed)):
98+
if parsed[i] not in valid_commands:
99+
100+
if len(cmd_stack) > 0:
101+
102+
if cmd_stack[-1][0] == valid_commands[0] and 0 <= cmd_stack[-1][1] < 2: # if cdnts has been invoked and cannot be more than 2 cdnts
103+
values["cdnts"].append(parsed[i])
104+
cmd_stack[-1][1] += 1
105+
106+
elif cmd_stack[-1][0] == valid_commands[1] and 0 <= cmd_stack[-1][1] < 3: # if files has been invoked and less: g, r, i
107+
values["filenames"].append(parsed[i])
108+
cmd_stack[-1][1] += 1
109+
else:
110+
raise ValueError("Misplaced or incorrect command for GET2DFRAMES, " + parsed[i])
111+
112+
else: # raise error if neither of the recognized commands have been invoked
113+
raise ValueError("Misplaced or incorrect command for GET2DFRAMES, " + parsed[i])
114+
115+
elif parsed[i].lower() == valid_commands[0].lower(): # for cdnts
116+
cmd_stack.append([valid_commands[0], 0])
117+
118+
elif parsed[i].lower() == valid_commands[1].lower(): # for files
119+
cmd_stack.append([valid_commands[1], 0])
120+
121+
if cmd_stack[-1][1] < 3:
122+
raise ValueError("All five files must be given as input in the order u, g, r, i, z.")
123+
124+
return values
125+
126+
def GETREDSHIFT(parsed):
127+
valid_commands = [RECOGNIZED[10], RECOGNIZED[11]]
128+
129+
if parsed[2][:2] != "--":
130+
raise ValueError("Misplaced or incorrect command, " + parsed[2])
131+
132+
cmd_stack = []
133+
values = {"data": [], "model": []}
134+
135+
for i in range(2, len(parsed)):
136+
if parsed[i] not in valid_commands:
137+
138+
if len(cmd_stack) > 0:
139+
140+
if cmd_stack[-1][0] == valid_commands[1] and 0 <= cmd_stack[-1][1] < 1: # if model has been invoked and cannot be more than once
141+
values["model"].append(parsed[i])
142+
cmd_stack[-1][1] += 1
143+
144+
elif cmd_stack[-1][0] == valid_commands[0] and 0 <= cmd_stack[-1][1] < 1: # if data has been invoked and cannot be more than once
145+
values["data"].append(parsed[i])
146+
cmd_stack[-1][1] += 1
147+
else:
148+
raise ValueError("Misplaced or incorrect command for GETREDSHIFT, " + parsed[i])
149+
150+
else: # raise error if neither of the recognized commands have been invoked
151+
raise ValueError("Misplaced or incorrect command for GETREDSHIFT, " + parsed[i])
152+
153+
elif parsed[i].lower() == valid_commands[0].lower(): # for data
154+
cmd_stack.append([valid_commands[0], 0])
155+
156+
elif parsed[i].lower() == valid_commands[1].lower(): # for model
157+
cmd_stack.append([valid_commands[1], 0])
158+
159+
return values
160+
161+
def FINETUNE(parsed):
162+
# AISTRO -FINETUNE --model model.h5, --epochs 50, -batch\_size 16
163+
# "--data", "--model", "--epochs", "--batch_size", "--csv" 10, 11, 12, 13, 14
164+
valid_commands = [RECOGNIZED[10], RECOGNIZED[11], RECOGNIZED[12], RECOGNIZED[13], RECOGNIZED[14]]
165+
166+
if parsed[2][:2] != "--":
167+
raise ValueError("Misplaced or incorrect command, " + parsed[2])
168+
169+
cmd_stack = []
170+
values = {"model": [], "epochs": [], "batch_size": [], "data": [], "csv": []}
171+
172+
for i in range(2, len(parsed)):
173+
if parsed[i] not in valid_commands:
174+
175+
if len(cmd_stack) > 0:
176+
177+
if cmd_stack[-1][0] == valid_commands[0] and 0 <= cmd_stack[-1][1] < 1: # if data has been invoked and cannot be more than once
178+
values["data"].append(parsed[i])
179+
cmd_stack[-1][1] += 1
180+
181+
elif cmd_stack[-1][0] == valid_commands[1] and 0 <= cmd_stack[-1][1] < 1: # if model has been invoked and cannot be more than once
182+
values["model"].append(parsed[i])
183+
cmd_stack[-1][1] += 1
184+
185+
elif cmd_stack[-1][0] == valid_commands[2] and 0 <= cmd_stack[-1][1] < 1: # if epochs has been invoked and cannot be more than once
186+
values["epochs"].append(parsed[i])
187+
cmd_stack[-1][1] += 1
188+
189+
elif cmd_stack[-1][0] == valid_commands[3] and 0 <= cmd_stack[-1][1] < 1: # if batch_size has been invoked and cannot be more than once
190+
values["batch_size"].append(parsed[i])
191+
cmd_stack[-1][1] += 1
192+
193+
elif cmd_stack[-1][0] == valid_commands[4] and 0 <= cmd_stack[-1][1] < 1: # if csv has been invoked and cannot be more than once
194+
values["csv"].append(parsed[i])
195+
cmd_stack[-1][1] += 1
196+
197+
else:
198+
raise ValueError("Misplaced or incorrect command for FINETUNE, " + parsed[i])
199+
200+
else: # raise error if neither of the recognized commands have been invoked
201+
raise ValueError("Misplaced or incorrect command for FINETUNE, " + parsed[i])
202+
203+
elif parsed[i].lower() == valid_commands[0].lower(): # for data
204+
cmd_stack.append([valid_commands[0], 0])
205+
206+
elif parsed[i].lower() == valid_commands[1].lower(): # for model
207+
cmd_stack.append([valid_commands[1], 0])
208+
209+
elif parsed[i].lower() == valid_commands[2].lower(): # for epochs size
210+
cmd_stack.append([valid_commands[2], 0])
211+
212+
elif parsed[i].lower() == valid_commands[3].lower(): # for batch_size size
213+
cmd_stack.append([valid_commands[3], 0])
214+
215+
elif parsed[i].lower() == valid_commands[4].lower(): # for csv size
216+
cmd_stack.append([valid_commands[4], 0])
217+
218+
return values
219+
220+
def BUNDLENPYS(parsed):
221+
# only the folder parameter
222+
valid_commands = [RECOGNIZED[15]]
223+
224+
if parsed[2][:2] != "--":
225+
raise ValueError("Misplaced or incorrect command, " + parsed[2])
226+
227+
cmd_stack = []
228+
values = {"folder": []}
229+
230+
for i in range(2, len(parsed)):
231+
if parsed[i] not in valid_commands:
232+
233+
if len(cmd_stack) > 0:
234+
235+
if cmd_stack[-1][0] == valid_commands[0] and 0 <= cmd_stack[-1][1] < 1: # if folder has been invoked and cannot be more than once
236+
values["folder"].append(parsed[i])
237+
cmd_stack[-1][1] += 1
238+
239+
else:
240+
raise ValueError("Misplaced or incorrect command for BUNDLENPYS, " + parsed[i])
241+
242+
else: # raise error if neither of the recognized commands have been invoked
243+
raise ValueError("Misplaced or incorrect command for BUNDLENPYS, " + parsed[i])
244+
245+
elif parsed[i].lower() == valid_commands[0].lower(): # for model
246+
cmd_stack.append([valid_commands[0], 0])
247+
248+
# create the NPY:
249+
bundle = []
250+
folder = values["folder"][0]
251+
if folder[-1] != "/":
252+
folder += "/"
253+
254+
for filename in os.listdir(folder):
255+
if filename[-4:] == ".npy":
256+
x = np.load(folder + filename)
257+
bundle = np.concatenate([bundle, [x]]) if len(bundle) > 0 else np.array([x])
258+
259+
return bundle
260+
261+
262+
def parse(string):
263+
''' purpose of this is to parse the command and separate all the elements
264+
separate criteria: space or comma: '''
265+
266+
lst = [i if i.find(",")==0 else i.split(",") for i in string]
267+
lst1 = np.array([])
268+
269+
for i in lst:
270+
lst1 = np.concatenate([lst1, i])
271+
272+
return lst1[lst1 != ""] # removing all empty elements
273+
274+
275+
if __name__ == "__main__":
276+
inp = sys.argv
277+
command = parse(inp)
278+
279+
token = 0
280+
values = None
281+
282+
if inp[1] == "-GET2DFRAMES":
283+
values = GET2DFRAMES(command)
284+
285+
elif inp[1] == "-GETNPY":
286+
values = GETNPY(command)
287+
token = 1
288+
289+
elif inp[1] == "-GETRGBCOMPOSITE":
290+
values = GETRGBCOMPOSITE(command)
291+
token = 2
292+
293+
elif inp[1] == "-GETREDSHIFT":
294+
values = GETREDSHIFT(command)
295+
values["cdnts"] = (0, 0) # they are not needed so just adding for sake of non-repititive code
296+
token = 3
297+
298+
elif inp[1] == "-BUNDLENPYS":
299+
bundle = BUNDLENPYS(command)
300+
np.save("data_bundle.npy", bundle)
301+
# no need to go further in the program:
302+
sys.exit("File for data created.")
303+
304+
elif inp[1] == "-FINETUNE":
305+
# values = {"model": [], "epochs": [], "batch_size": [], "data": [], "csv": []}
306+
values = FINETUNE(command)
307+
model = Model()
308+
model.FineTune(X=values["data"], y_csv=values["csv"], model=values["model"], epochs=values["epochs"], batch_size=values["batch_size"])
309+
# no need to go further in the program:
310+
sys.exit("Finetuned model saved.")
311+
312+
ra, dec = values["cdnts"]
313+
files = values["filenames"]
314+
315+
if token == 2:
316+
# create fake u and z
317+
files = ["u"] + list(files) + ["z"]
318+
319+
# does not matter if we assign a u filename to variable that is not u
320+
# we just need seperate frames to be saved
321+
image_obj = Image(ra=ra, dec=dec, files=files)
322+
323+
if token == 0:
324+
for i in files:
325+
np.save("processed/" + i, image_obj.Get2DFrame(i))
326+
print("File saved at", "processed/" + i)
327+
328+
elif token == 1:
329+
np.save("processed/DataCube", image_obj.GetDataCube())
330+
331+
elif token == 2:
332+
np.save("processed/rgb_composite", image_obj.GetRGBComposite())
333+
334+
elif token == 3:
335+
# read datacube first
336+
datacube = np.load(values["data"][0])
337+
if not datacube:
338+
raise ValueError("Please provide a valid NumPy file.")
339+
340+
# if default model is to be invoked:
341+
if values["model"][0] == "default":
342+
model = Model()
343+
redshift = model.GetRedshift(datacube)
344+
else:
345+
model = Model(filename=values["model"][0])
346+
redshift = model.GetRedshift(datacube, "set")
347+
348+
print("Redshift of given Galaxy is", redshift)
349+
350+

Galaxy.py

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Galaxy:
2+
def __init__(self, ra=0, dec=0, reddening=None, data=None, redshift=None):
3+
self.ra = ra
4+
self.dec = dec
5+
self.reddening = reddening
6+
self.datacube = data
7+
self.redshift = redshift
8+
9+
10+
11+
def GetRedshift(self):
12+
return self.redshift

0 commit comments

Comments
 (0)