from __future__ import absolute_import import collections import pp import beamsgenerator import cleanimage import dirtyimage import fts import loadparameters import observe import renderer import skygenerator import uvmapgenerator import uvspectra class Fiins(object): """FISICA simulator. """ def __init__(self, sky_spreadsheet='SkySparams.xlsx', sky_sheet='1point'): self.sky_spreadsheet = sky_spreadsheet self.sky_sheet = sky_sheet self.result = collections.OrderedDict() # start parallel python (pp), find the number of CPUS available ppservers = () self.job_server = pp.Server(ppservers=ppservers) print 'fiins starting pp with %s workers' % \ self.job_server.get_ncpus() def simulate(self): # read parameters loadparams = loadparameters.LoadParameters( sky_spreadsheet=self.sky_spreadsheet, sky_sheet=self.sky_sheet) obs_specification = loadparams.run() self.result['loadparameters'] = obs_specification # generate information on the FTS ftsd = fts.FTS(parameters=obs_specification) self.result['fts'] = ftsd.run() print ftsd # generate UV map and observation framework uvmapgen = uvmapgenerator.UVMapGenerator(parameters=obs_specification, previous_results=self.result) self.result['uvmapgenerator'] = uvmapgen.run() print uvmapgen # generate primary beams beamsgen = beamsgenerator.BeamsGenerator( previous_results=self.result) self.result['beamsgenerator'] = beamsgen.run() # construct sky skygen = skygenerator.SkyGenerator(parameters=obs_specification, previous_results=self.result) self.result['skygenerator'] = skygen.run() # calculate interferograms obs = observe.Observe(parameters=obs_specification, previous_results=self.result, job_server=self.job_server) self.result['observe'] = obs.run() # recover spectra from interferograms uvspec = uvspectra.UVspectra(previous_results=self.result, job_server=self.job_server) self.result['uvspectra'] = uvspec.run() # construct dirty image dirty = dirtyimage.DirtyImage(previous_results=self.result, job_server=self.job_server) self.result['dirtyimage'] = dirty.run() # construct clean image clean = cleanimage.CleanImage(previous_results=self.result, job_server=self.job_server) self.result['cleanimage'] = clean.run() # construct html description of result self.render() def import_result(self): print 'does nothing' def render(self): htmlrenderer = renderer.Renderer(result=self.result) htmlrenderer.run() def __repr__(self): return 'FISICA simulator'