From ea805c717d03e2915f97fe450d78e61b3e758738 Mon Sep 17 00:00:00 2001 From: SpheMakh Date: Sat, 14 Feb 2015 19:14:42 +0200 Subject: [PATCH 1/4] fixes, #13 --- Owlcat/simms/README.md | 25 +++++ Owlcat/simms/casasm.py | 177 ++++++++++++++++++++++++++++++++ Owlcat/simms/simms.py | 225 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 427 insertions(+) create mode 100644 Owlcat/simms/README.md create mode 100644 Owlcat/simms/casasm.py create mode 100755 Owlcat/simms/simms.py diff --git a/Owlcat/simms/README.md b/Owlcat/simms/README.md new file mode 100644 index 0000000..9e53a5b --- /dev/null +++ b/Owlcat/simms/README.md @@ -0,0 +1,25 @@ +simms +===== + +Creates simulated measurement sets using the the CASA simulate tool. + +Requires +----- +CASA http://casa.nrao.edu/casa_obtaining.shtml and numpy + +./simms.py --help should be helpful ;) + +Install +--- +`$ git clone https://github.com/SpheMakh/simms ` +then add the following to your .bashrc file: +`export PATH=$PATH:path_to_simms_dir/bin` +`export PYTHONPATH=$PYTHONPATH:path_to_simms_dir` + +source .bashrc and you are good to go. + +Examples +------ +./simms.py -T meerkat -t casa -l test -dec -30d0m0s -ra 0h0m0s -st 8 -sl 4 -dt 60 -ih -2 -f0 700MHz -nc 4 -df 10MHz MeerKAT64_ANTENNAS + +Creates an empty MS at 700MHz with 4 10MHz channels, the observtion is 8hrs long with 4 hours scans and a 60s integrations time. The MS is created from the MeerKAT64 CASA antenna table (which must be provided by the user) diff --git a/Owlcat/simms/casasm.py b/Owlcat/simms/casasm.py new file mode 100644 index 0000000..c49c0ee --- /dev/null +++ b/Owlcat/simms/casasm.py @@ -0,0 +1,177 @@ +# create a sumulated measurement from given a list of itrf antenna position or an antenna table (Casa table) +# Sphesihle Makhathini sphemakh@gmail.com +import os +import sys +import numpy as np +import math + +DEG = 180/math.pi + +def get_int_data(tab): + """ Get inteferometer information from antenna table """ + + x,y,z = tab.getcol('POSITION') + dish_diam = tab.getcol('DISH_DIAMETER') + station = tab.getcol('STATION') + mount = tab.getcol('MOUNT') + return (x,y,z),dish_diam,station,mount + + +def enu2xyz (refpos_wgs84,enu): + """ converts xyz0 + ENU (Nx3 array) into xyz """ + refpos = me.measure(refpos_wgs84,'itrf') + lon,lat,rad = [ refpos[x]['value'] for x in 'm0','m1','m2' ] + xyz0 = rad*np.array([math.cos(lat)*math.cos(lon),math.cos(lat)*math.sin(lon),math.sin(lat)]) + # 3x3 transform matrix. Each row is a normal vector, i.e. the rows are (dE,dN,dU) + xform = np.array([ + [-math.sin(lon),math.cos(lon),0], + [-math.cos(lon)*math.sin(lat),-math.sin(lon)*math.sin(lat),math.cos(lat)], + [math.cos(lat)*math.cos(lon),math.cos(lat)*math.sin(lon),math.sin(lat)] + ]) + + xyz = xyz0[np.newaxis,:] + enu.dot(xform); + return xyz + + +def makems(msname=None,label=None,tel='MeerKAT',pos=None,pos_type='CASA', + fromknown=False, + direction=[], + synthesis=4, + scan_length=0,dtime=10, + freq0=700e6,dfreq=50e6,nchan=1, + nbands=1, + start_time=None, + stokes='LL LR RL RR', + noise=0, + setlimits=False, + elevation_limit=None, + shadow_limit=None, + outdir='.', + coords='itrf', + lon_lat=None, + date=None, + noup=False): + """ Creates an empty measurement set using CASA simulate (sm) tool. """ + + # The price you pay for allowing both string and float values for the same options + def toFloat(val): + try: return float(val) + except TypeError: return val + + # sanity check/correction + if scan_length > synthesis or scan_length is 0: + print 'SIMMS ## WARN: Scan length > synthesis time or its not set, setiing scan_length=syntheis' + scan_length = synthesis + start_time = toFloat(start_time) or -scan_length/2 + + if not isinstance(dtime,str): + dtime = '%ds'%dtime + + + stokes = 'LL LR RL RR' + if msname.lower().strip()=='none': + msname = None + #TODO: DO The above check for all other variables whch do not have defaults + if msname is None: + msname = '%s/%s_%dh%s.MS'%(outdir,label or tel,synthesis,dtime) + + obs_pos = None + lon,lat = None,None + if lon_lat: + if isinstance(lon_lat,str): + tmp = lon_lat.split(',') + lon,lat = ['%sdeg'%i for i in tmp[:2]] + if len(tmp)>2: + el = tmp[3]+'m' + else: + el = '0m' + obs_pos = me.position('wgs84',lon,lat,el) + obs_pos = obs_pos or me.observatory(tel) + + sm.open(msname) + + if fromknown: + sm.setknownconfig('ATCA6.0A') + elif pos: + if pos_type.lower() == 'casa': + tb.open(pos) + (xx,yy,zz),dish_diam,station,mount = get_int_data(tb) + tb.close() + + elif pos_type.lower() == 'ascii': + if noup: + names = ['x','y','dd','station','mount'] + ncols = 5 + else: + names = ['x','y','z','dd','station','mount'] + ncols = 6 + dtype = ['float']*ncols + dtype[-2:] = ['|S20']*2 + pos = np.genfromtxt(pos,names=names,dtype=dtype,usecols=range(ncols)) + + if coords is 'enu': + if noup: + xyz = np.array([pos['x'],pos['y']]).T + else: + xyz = np.array([pos['x'],pos['y'],pos['z']]).T + xyz = enu2xyz(obs_pos,xyz) + xx,yy,zz = xyz[:,0], xyz[:,1],xyz[:,2] + else: + xx,yy,zz = pos['x'],pos['y'],pos['z'] + + dish_diam,station,mount = pos['dd'],pos['station'],pos['mount'] + sm.setconfig(telescopename=tel, + x=xx, + y=yy, + z=zz, + dishdiameter=dish_diam, + mount=mount[0], + coordsystem='global', + referencelocation=obs_pos) + + else: + raise RuntimeError('Observatory name is not known, please provide antenna configuration') + + ref_time = me.epoch('IAT',date or '2015/01/01') + sm.setfeed(mode='perfect X Y') + + for i,(freq,df,nc) in enumerate( zip(freq0,dfreq,nchan) ): + sm.setspwindow(spwname = '%02d'%i, + freq = freq, + deltafreq = df, + freqresolution = df, + nchannels = nc, + stokes= stokes) + + + nfields = len(direction) + for fid,field in enumerate(direction): + field = field.split(',') + sm.setfield(sourcename='%02d'%fid,sourcedirection=me.direction(*field)) + + sm.settimes(integrationtime = dtime, + usehourangle = True, + referencetime = ref_time) + + if setlimits: + sm.setlimits(shadowlimit=shadow_limit,elevationlimit=elevation_limit) + sm.setauto(autocorrwt=0.0) + + start_times = map(str,np.arange(start_time,synthesis+start_time,scan_length)*3600) + stop_times = map(str,np.arange(start_time,synthesis+start_time,scan_length)*3600 + scan_length*3600) + + for ddid in range(nbands): + for start,stop in zip(start_times,stop_times): + for fid in range(nfields): + sm.observe('%02d'%fid,'%02d'%ddid, + starttime=start,stoptime=stop) + me.doframe(ref_time) + me.doframe(obs_pos) + + if sm.done(): + print 'DONE: simms.py succeeded. MS is at %s'%msname + else: + raise RuntimeError('Failed to create MS. Look at the log file. ' + 'Double check you settings. If you feel this ' + 'is due a to bug, raise an issue on https://github.com/SpheMakh/simms') + return msname diff --git a/Owlcat/simms/simms.py b/Owlcat/simms/simms.py new file mode 100755 index 0000000..0f084cb --- /dev/null +++ b/Owlcat/simms/simms.py @@ -0,0 +1,225 @@ +#!/usr/bin/env python +## sphe sphemakh@gmail.com + +import os +import sys +import subprocess +import argparse +import time +import tempfile +import glob +import numpy as np +from pyrap.measures import measures +dm = measures() + +# I want to replace error() in argparse.ArgumentParser class +# I do this so I can catch the exception raised when too few arguments +# are parsed. +class ParserError(Exception): + pass +class ArgumentParser(argparse.ArgumentParser): + def error(self, message): + raise ParserError(message or 'Not enough Arguments') + +# set simms directory +simms_path = os.path.realpath(__file__) +simms_path = os.path.dirname(simms_path) + +# Communication functions +def info(string): + t = "%d/%d/%d %d:%d:%d"%(time.localtime()[:6]) + print "%s ##INFO: %s"%(t,string) +def warn(string): + t = "%d/%d/%d %d:%d:%d"%(time.localtime()[:6]) + print "%s ##WARNING: %s"%(t,string) +def abort(string): + t = "%d/%d/%d %d:%d:%d"%(time.localtime()[:6]) + raise SystemExit("%s ##ABORTING: %s"%(t,string)) + + +def simms(msname=None,label=None,tel=None,pos=None,pos_type='casa', + ra='0h0m0s',dec='-30d0m0s',synthesis=4,scan_length=4,dtime=10,freq0=700e6, + dfreq=50e6,nchan=1,stokes='LL LR RL RR',start_time=-2,setlimits=False, + elevation_limit=0,shadow_limit=0,outdir='.',nolog=False, + coords='itrf',lon_lat=None,noup=False,nbands=1,direction=[],date=None, + fromknown=False): + + """ Make simulated measurement set """ + + # MS frequency set up + def toList(string,delimiter=',',f0=False): + if isinstance(string,(list,tuple)): + return string + if isinstance(string,str) and string.find(delimiter)>0: + return string.split(delimiter) + else: + if f0 and nbands>1: + freq = dm.frequency('rest',str(string))['m0']['value'] + _f0 = [freq] + info('Start frequency for band 0 is %.4g GHz'%(freq/1e9)) + for i in range(1,nbands): + df = dm.frequency('rest',str(dfreq[i-1]))['m0']['value'] + _f0.append(_f0[i-1]+nchan[i-1]*df) + info('Start frequency for band %d is %.4g GHz'%(i,_f0[i]/1e9)) + return _f0 + return [string]*nbands + + # The order of nchan,dfreq,freq0 should not be changed below. + nchan = map(int, toList(nchan) ) + dfreq = toList(dfreq) + freq0 = toList(freq0,f0=True) + + for item in 'freq0 dfreq nchan'.split(): + val = locals()[item] + NN = len(val) + if NN!=nbands : + raise ValueError('Size of %s does not match nbands'%item) + + if direction in [None,[],()]: + direction = ','.join(['J2000',ra,dec]) + if isinstance(direction,str): + direction = [direction] + + if date is None: + date = '%d/%d/%d'%(time.localtime()[:3]) + + casa_script = tempfile.NamedTemporaryFile(suffix='.py') + casa_script.write('# Auto Gen casapy script. From simms.py\n') + casa_script.write('execfile("%s/casasm.py")\n'%simms_path) + + fmt = 'msname="%(msname)s", label="%(label)s", tel="%(tel)s", pos="%(pos)s", '\ + 'pos_type="%(pos_type)s", synthesis=%(synthesis).4g, '\ + 'scan_length=%(scan_length).4g, dtime="%(dtime)s", freq0=%(freq0)s, dfreq=%(dfreq)s, '\ + 'nchan=%(nchan)s, stokes="%(stokes)s", start_time=%(start_time)s, setlimits=%(setlimits)s, '\ + 'elevation_limit=%(elevation_limit)f, shadow_limit=%(shadow_limit)f, '\ + 'coords="%(coords)s",lon_lat=%(lon_lat)s, noup=%(noup)s, nbands=%(nbands)d, '\ + 'direction=%(direction)s, outdir="%(outdir)s",date="%(date)s",fromknown=%(fromknown)s'%locals() + casa_script.write('makems(%s)\nexit'%fmt) + casa_script.flush() + + tmpfile = casa_script.name + t0 = time.time() + process = subprocess.Popen(['casapy --nologger --log2term %s -c %s'%('--nologfile'\ + if nolog else '--logfile log-simms.txt',repr(tmpfile))], + stderr=subprocess.PIPE if not isinstance(sys.stderr,file) else sys.stderr, + stdout=subprocess.PIPE if not isinstance(sys.stdout,file) else sys.stdout, + shell=True) + + if process.stdout or process.stderr: + out,err = process.communicate() + sys.stdout.write(out) + sys.stderr.write(err) + out = None + else: + process.wait() + if process.returncode: + print 'ERROR: simms.py returns errr code %d'%(process.returncode) + + casa_script.close() + for log in glob.glob("ipython-*.log"): + if os.path.getmtime(log)>t0: + os.system("rm -f %s"%log) + return msname + +if __name__=='__main__': + + __version_info__ = (0,1,0) + __version__ = ".".join( map(str,__version_info__) ) + + for i, arg in enumerate(sys.argv): + if (arg[0] == '-') and arg[1].isdigit(): sys.argv[i] = ' ' + arg + + parser = ArgumentParser(description='Uses the CASA simulate tool to create ' + 'an empty measurement set. Requires either an antenna table (CASA table) ' + 'or a list of ITRF or ENU positions. ' + 'A standard file should have the format:\n ' + 'pos1 pos2 pos3* dish_diameter station mount.\n' + 'NOTE: In the case of ENU, the 3rd position (up) is not essential ' + 'and may not be specified; indicate that your file doesn\'t have this ' + 'dimension by enebaling the --noup (-nu) option.') + add = parser.add_argument + add("-v","--version", action='version',version='%s version %s'%(parser.prog,__version__)) + add('-ukc','--use-known-config',dest='knownconfig',action='store_true', + help='Use known antenna configuration. For some reason sm.setknownconfig() ' + 'is not working. So this option does not work as yet.') + add('pos',help='Antenna positions') + add('-t','--type',dest='type',default='casa',choices=['casa','ascii'], + help='position list type : dafault is casa') + add('-cs','--coord-sys',dest='coords',default='itrf',choices=['itrf','enu'], + help='Only relevent when --type=ascii. Coordinate system of antenna positions.' + ' :dafault is itrf') + add('-lle','--lon-lat-elv',dest='lon_lat', + help='Reference position of telescope. Comma ' + 'seperated longitude,lattitude and elevation [deg,deg,m]. ' + 'Elevation is not crucial, lon,lat should be enough. If not specified,' + ' we\'ll try to get this info from the CASA database ' + '(assuming that your observatory is known to CASA; --tel, -T): No default') + add('-nu','--noup',dest='noup',action='store_true', + help='Enable this to indicate that your ENU file does not have an ' + '\'up\' dimension: This is not the default' ) + add('-T','--tel',dest='tel', + help='Telescope name : no default') + add('-n','--name',dest='name', + help='MS name. A name based on the observatoion will be generated otherwise.') + add('-od','--outdir',dest='outdir',default='.', + help='Directory in which to save the MS: default is working directory') + add('-l','--label',dest='label', + help='Label to add to the auto generated MS name (if --name is not given)') + add('-dir','--direction',dest='direction',action='append',default=[], + help='Pointing direction. Example J2000,0h0m0s,-30d0m0d. Option ' + '--direction may be specified multiple times for multiple pointings') + add('-ra','--ra',dest='ra',default='0h0m0s', + help = 'Right Assention in hms or val[unit] : default is 0h0m0s') + add('-dec','--dec',dest='dec',default='-30d0m0s',type=str, + help='Declination in dms or val[unit]: default is -30d0m0s') + add('-st','--synthesis-time',dest='synthesis',default=4,type=float, + help='Synthesis time in hours: default is 4.0') + add('-sl','--scan-length',dest='scan_length',type=float,default=0, + help='Synthesis time in hours: default is the sysntheis time') + add('-dt','--dtime',dest='dtime',default=10,type=int, + help='Integration time in seconds : default is 10s') + add('-ih','--init-ha',dest='init_ha',default=None, + help='Initial hour angle for observation. If not specified ' + 'we use -[scan_length/2]') + add('-nc','--nchan',dest='nchan',default='1', + help='Number of frequency channels. Specify as comma separated list ' + ' (for multiple subbands); see also --freq0, --dfreq: default is 1') + add('-f0','--freq0',dest='freq0',default='700MHz', + help='Start frequency. Specify as val[unit]. E.g 700MHz, not unit => Hz .' + ' Use a comma seperated list for multiple start frequencies ' + '(for multiple subbands); see also --nchan, --dfreq: default is 700MHz') + add('-df','--dfreq',dest='dfreq',default='50MHz', + help='Channel width. Specify as val[unit]. E.g 700MHz, not unit => Hz ' + 'Use a comma separated list of channel widths (for multiple subbands);' + ' see also --nchan, --freq0 : default is 50MHz') + add('-nb','--nband',dest='nband',default=1,type=int, + help='Number of subbands : default is 1') + add('-pl','--pol',dest='pol',default='LL LR RL RR', + help='Polarization : default is LL LR RL RR') + add('-date','--date',dest='date', + help='Date of observation : default is today') + add('-stl','--set-limits',dest='set_limits',action='store_true', + help='Set telescope limits; elevation and shadow limts : not the default') + add('-el','--elevation-limit',dest='elevation_limit',type=float,default=0, + help='Dish elevation limit. Will only be taken into account if --set-limits (-stl) is enabled : no default') + add('-shl','--shadow-limit',dest='shadow_limit',type=float,default=0, + help='Shadow limit. Will only be taken into account if --set-limits (-stl) is enabled : no default') + add('-ng','--nolog',dest='nolog',action='store_true', + help='Don\'t keep Log file : not the default') + + try: + args = parser.parse_args() + except ParserError: + args = parser.parse_args(args=sys.argv) + print args + + if not args.tel: + parser.error('Telescope name (--tel ot -T) is required') + + simms(msname=args.name,label=args.label,tel=args.tel,pos=args.pos, + pos_type=args.type,ra=args.ra,dec=args.dec,synthesis=args.synthesis,scan_length=args.scan_length, + dtime=args.dtime,freq0=args.freq0,dfreq=args.dfreq,nchan=args.nchan, + stokes=args.pol,start_time=args.init_ha,setlimits=args.set_limits, + elevation_limit=args.elevation_limit,shadow_limit=args.shadow_limit, + outdir=args.outdir,coords=args.coords,lon_lat=args.lon_lat,noup=args.noup, + direction=args.direction,nbands=args.nband,date=args.date,fromknown=args.knownconfig) From 8b97d475f37c8c535a82a99a838ce0ec8095ff52 Mon Sep 17 00:00:00 2001 From: SpheMakh Date: Sat, 14 Feb 2015 19:15:20 +0200 Subject: [PATCH 2/4] fixes, #13 --- Owlcat/bin/simms | 1 + 1 file changed, 1 insertion(+) create mode 120000 Owlcat/bin/simms diff --git a/Owlcat/bin/simms b/Owlcat/bin/simms new file mode 120000 index 0000000..9addb73 --- /dev/null +++ b/Owlcat/bin/simms @@ -0,0 +1 @@ +../simms/simms.py \ No newline at end of file From 1c3d3ab406066e067c3b7a47d605d9e7e538f681 Mon Sep 17 00:00:00 2001 From: SpheMakh Date: Sun, 15 Feb 2015 15:10:41 +0200 Subject: [PATCH 3/4] add __init__.py file --- Owlcat/simms/LICENSE | 339 +++++++++++++++++++++++++++++++++++++++ Owlcat/simms/__init__.py | 0 Owlcat/simms/bin/simms | 1 + 3 files changed, 340 insertions(+) create mode 100644 Owlcat/simms/LICENSE create mode 100644 Owlcat/simms/__init__.py create mode 120000 Owlcat/simms/bin/simms diff --git a/Owlcat/simms/LICENSE b/Owlcat/simms/LICENSE new file mode 100644 index 0000000..d7f1051 --- /dev/null +++ b/Owlcat/simms/LICENSE @@ -0,0 +1,339 @@ +GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/Owlcat/simms/__init__.py b/Owlcat/simms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Owlcat/simms/bin/simms b/Owlcat/simms/bin/simms new file mode 120000 index 0000000..12329f0 --- /dev/null +++ b/Owlcat/simms/bin/simms @@ -0,0 +1 @@ +../simms.py \ No newline at end of file From 58fd16ed7bf89bf9124c92bf99fc341deff182ff Mon Sep 17 00:00:00 2001 From: SpheMakh Date: Sun, 15 Feb 2015 15:17:46 +0200 Subject: [PATCH 4/4] reomve simms/bin --- Owlcat/simms/LICENSE | 339 ----------------------------------------- Owlcat/simms/bin/simms | 1 - 2 files changed, 340 deletions(-) delete mode 100644 Owlcat/simms/LICENSE delete mode 120000 Owlcat/simms/bin/simms diff --git a/Owlcat/simms/LICENSE b/Owlcat/simms/LICENSE deleted file mode 100644 index d7f1051..0000000 --- a/Owlcat/simms/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {description} - Copyright (C) {year} {fullname} - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - {signature of Ty Coon}, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/Owlcat/simms/bin/simms b/Owlcat/simms/bin/simms deleted file mode 120000 index 12329f0..0000000 --- a/Owlcat/simms/bin/simms +++ /dev/null @@ -1 +0,0 @@ -../simms.py \ No newline at end of file