diff --git a/README b/README index 49a4dba..85641e6 100644 --- a/README +++ b/README @@ -1,19 +1,131 @@ -Signal Chain Installation: - - 1. Install system dependencies: python-pip python-dev gfortran libpng-dev freetype* libblas-dev liblapack-dev libatlas-base-dev python-qt4 python-tk libssl-dev libhdf5-dev - 2. Install digital_rf_hdf5 module (developed by Haystack Observatory) - if you want to use USRP data - 3. untar schainpy-x.x.x.tar.gz - 4. cd schainpy-x.x.x - 5. execute: - [hostname]$ sudo pip install ./ - 6. testing gui: - [hostname]$ schainGUI (enter) - -If you want to use serialization and zerorpc you will need to install the next packages: - - 1. zerorpc - [hostname]$ sudo port install zerorpc - - 2. cPickle, msgpack and msgpack_numpy - [hostname]$ sudo port install cPickle msgpack mspack_numpy +# Signal Chain + +## Introduction + +Signal Chain (SCh) is a radar data processing library developed using [Python](www.python.org) at JRO. SCh provides modules to read, write, process and plot data. + +## Installation + +Install system dependencies, download the latest stable release from [svn](http://jro-dev.igp.gob.pe/svn/jro_soft/schain/Releases/) e.g. schainpy-2.2.5.tar.gz. and install it as a normal python package. + +``` +$ sudo apt-get install python-pip python-dev gfortran libpng-dev freetype* libblas-dev liblapack-dev libatlas-base-dev python-qt4 python-tk libssl-dev libhdf5-dev +$ tar xvzf schainpy-2.2.5.tar.gz +$ cd schainpy-2.2.5 +$ sudo pip install ./ +``` + +**Its recommended to install schain in a virtual environment** + +``` +$ sudo pip install virtualenv +$ virtualenv /path/to/virtual --system-site-packages +$ source /path/to/virtual/bin/activate +(virtual) $ cd schainpy-2.2.5 +(virtual) $ pip install ./ +``` + +## First Script + +Read Spectra data (.pdata) - remove dc - plot spectra & RTI + +Import SCh and creating a project + +```python +#!/usr/bin/python + +from schainpy.controller import Project + +controller = Project() +controller.setup(id = '100', + name='test', + description='Basic experiment') + + +``` + +Adding read unit and operations + +```python +read_unit = controller.addReadUnit(datatype='Spectra', + path='/path/to/pdata/', + startDate='2014/01/31', + endDate='2014/03/31', + startTime='00:00:00', + endTime='23:59:59', + online=0, + walk=0) + +proc_unit = controller.addProcUnit(datatype='Spectra', + inputId=read_unit.getId()) + +op = proc_unit.addOperation(name='selectChannels') +op.addParameter(name='channelList', value='0,1', format='intlist') + +op = proc_unit.addOperation(name='selectHeights') +op.addParameter(name='minHei', value='80', format='float') +op.addParameter(name='maxHei', value='200', format='float') + +op = proc_unit.addOperation(name='removeDC') + +``` + +Plotting data & start project + +```python +op = proc_unit.addOperation(name='SpectraPlot', optype='other') +op.addParameter(name='id', value='1', format='int') +op.addParameter(name='wintitle', value='Spectra', format='str') + +op = procUnitConfObj1.addOperation(name='RTIPlot', optype='other') +op.addParameter(name='id', value='2', format='int') +op.addParameter(name='wintitle', value='RTI', format='str') + +controller.start() + +``` + +Full script + + +```python +#!/usr/bin/python + +from schainpy.controller import Project + +controller = Project() +controller.setup(id = '100', + name='test', + description='Basic experiment') +read_unit = controller.addReadUnit(datatype='Spectra', + path='/path/to/pdata/', + startDate='2014/01/31', + endDate='2014/03/31', + startTime='00:00:00', + endTime='23:59:59', + online=0, + walk=0) + +proc_unit = controller.addProcUnit(datatype='Spectra', + inputId=read_unit.getId()) + +op = proc_unit.addOperation(name='selectChannels') +op.addParameter(name='channelList', value='0,1', format='intlist') + +op = proc_unit.addOperation(name='selectHeights') +op.addParameter(name='minHei', value='80', format='float') +op.addParameter(name='maxHei', value='200', format='float') + +op = proc_unit.addOperation(name='removeDC') + +op = proc_unit.addOperation(name='SpectraPlot', optype='other') +op.addParameter(name='id', value='6', format='int') +op.addParameter(name='wintitle', value='Spectra', format='str') + +op = procUnitConfObj1.addOperation(name='RTIPlot', optype='other') +op.addParameter(name='id', value='2', format='int') +op.addParameter(name='wintitle', value='RTI', format='str') + +controller.start() + +``` diff --git a/schainpy/scripts/schain_paralel.py b/schainpy/scripts/schain_paralel.py new file mode 100644 index 0000000..d1e2e98 --- /dev/null +++ b/schainpy/scripts/schain_paralel.py @@ -0,0 +1,93 @@ +from mpi4py import MPI +import datetime +import os, sys +#import timeit + +path = os.path.split(os.getcwd())[0] +sys.path.append(path) + +from controller import * + +def conversion(x1,x2): + a=[x1,x2] + for x in a: + m,s = divmod(x,60) + h,m = divmod(m,60) + if x==x1: + startime= str("%02d:%02d:%02d" % (h, m, s)) + if x==x2: + endtime =str("%02d:%02d:%02d" % (h, m, s)) + return startime,endtime + + + +def loop(startime,endtime,rank): + desc = "HF_EXAMPLE"+str(rank) + path= "/home/alex/Documents/hysell_data/pdata/sp1_f0" + figpath= "/home/alex/Pictures/pdata_plot"+str(rank) + + filename = "hf_test"+str(rank)+".xml" + + controllerObj = Project() + + controllerObj.setup(id = '191', name='test01'+str(rank), description=desc) + + readUnitConfObj = controllerObj.addReadUnit(datatype='SpectraReader', + path=path, + startDate='2015/09/26', + endDate='2015/09/26', + startTime=startime, + endTime=endtime, + online=0, + #set=1426485881, + delay=10, + walk=1 + #timezone=-5*3600 + ) + + #opObj11 = readUnitConfObj.addOperation(name='printNumberOfBlock') + + procUnitConfObj1 = controllerObj.addProcUnit(datatype='SpectraProc', inputId=readUnitConfObj.getId()) + + opObj11 = procUnitConfObj1.addOperation(name='SpectraPlot', optype='other') + opObj11.addParameter(name='id', value='1000', format='int') + opObj11.addParameter(name='wintitle', value='HF_Jicamarca_Spc', format='str') + #opObj11.addParameter(name='channelList', value='0', format='intlist') + opObj11.addParameter(name='zmin', value='-120', format='float') + opObj11.addParameter(name='zmax', value='-70', format='float') + opObj11.addParameter(name='save', value='1', format='int') + opObj11.addParameter(name='figpath', value=figpath, format='str') + + + print "Escribiendo el archivo XML" + controllerObj.writeXml(filename) + print "Leyendo el archivo XML" + controllerObj.readXml(filename) + + controllerObj.createObjects() + controllerObj.connectObjects() + + #timeit.timeit('controllerObj.run()', number=2) + + controllerObj.run() + + + +def parallel(): + + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + size = comm.Get_size() + totalStartTime = time.time() + print "Hello world from process %d/%d"%(rank,size) + # First just for one day :D! + num_hours = 4/size + time1,time2 = rank*num_hours*3600,(rank+1)*num_hours*3600-60 + #print time1,time2 + startime,endtime =conversion(time1,time2) + print startime,endtime + loop(startime,endtime,rank) + print "Total time %f seconds" %(time.time() -totalStartTime) + +if __name__=='__main__': + parallel() \ No newline at end of file