##// END OF EJS Templates
Se agrega una nueva clase de escritura FitsWriter, ademas de las Clases Metadata y ParameterConf, que se usan para leer el archivo xml que configura el header de los archivos FITS.
Daniel Valdez -
r351:a731a256fc18
parent child
Show More
@@ -2735,3 +2735,186 class FITS:
2735 if os.path.isfile(filename):
2735 if os.path.isfile(filename):
2736 os.remove(filename)
2736 os.remove(filename)
2737 self.thdulist.writeto(filename)
2737 self.thdulist.writeto(filename)
2738
2739
2740 class ParameterConf:
2741 ELEMENTNAME = 'Parameter'
2742 def __init__(self):
2743 self.name = ''
2744 self.value = ''
2745
2746 def readXml(self, parmElement):
2747 self.name = parmElement.get('name')
2748 self.value = parmElement.get('value')
2749
2750 def getElementName(self):
2751 return self.ELEMENTNAME
2752
2753 class Metadata:
2754
2755 def __init__(self, filename):
2756 self.parmConfObjList = []
2757 self.readXml(filename)
2758
2759 def readXml(self, filename):
2760 self.projectElement = None
2761 self.procUnitConfObjDict = {}
2762 self.projectElement = ElementTree().parse(filename)
2763 self.project = self.projectElement.tag
2764
2765 parmElementList = self.projectElement.getiterator(ParameterConf().getElementName())
2766
2767 for parmElement in parmElementList:
2768 parmConfObj = ParameterConf()
2769 parmConfObj.readXml(parmElement)
2770 self.parmConfObjList.append(parmConfObj)
2771
2772 class FitsWriter(Operation):
2773
2774 def __init__(self):
2775 self.isConfig = False
2776 self.dataBlocksPerFile = None
2777 self.blockIndex = 0
2778 self.flagIsNewFile = 1
2779 self.fitsObj = None
2780 self.optchar = 'P'
2781 self.ext = '.fits'
2782 self.setFile = 0
2783
2784 def setFitsHeader(self, dataOut, metadatafile):
2785
2786 header_data = pyfits.PrimaryHDU()
2787
2788 metadata4fits = Metadata(metadatafile)
2789 for parameter in metadata4fits.parmConfObjList:
2790 parm_name = parameter.name
2791 parm_value = parameter.value
2792
2793 if parm_value == 'fromdatadatetime':
2794 value = time.strftime("%b %d %Y %H:%M:%S", dataOut.datatime.timetuple())
2795 elif parm_value == 'fromdataheights':
2796 value = dataOut.nHeights
2797 elif parm_value == 'fromdatachannel':
2798 value = dataOut.nChannels
2799 elif parm_value == 'fromdatasamples':
2800 value = dataOut.nFFTPoints
2801 else:
2802 value = parm_value
2803
2804 header_data.header[parm_name] = value
2805
2806 header_data.header['NBLOCK'] = self.blockIndex
2807
2808 header_data.writeto(self.filename)
2809
2810
2811 def setup(self, dataOut, path, dataBlocksPerFile, metadatafile):
2812
2813 self.path = path
2814 self.dataOut = dataOut
2815 self.metadatafile = metadatafile
2816 self.dataBlocksPerFile = dataBlocksPerFile
2817
2818 def open(self):
2819 self.fitsObj = pyfits.open(self.filename, mode='update')
2820
2821
2822 def addData(self, data):
2823 self.open()
2824 extension = pyfits.ImageHDU(data=data, name=self.fitsObj[0].header['DATA'])
2825 extension.header['UTCTIME'] = self.dataOut.utctime
2826 self.fitsObj.append(extension)
2827 self.blockIndex += 1
2828 self.fitsObj[0].header['NBLOCK'] = self.blockIndex
2829
2830 self.write()
2831
2832 def write(self):
2833
2834 self.fitsObj.flush(verbose=True)
2835 self.fitsObj.close()
2836
2837
2838 def setNextFile(self):
2839
2840 ext = self.ext
2841 path = self.path
2842
2843 timeTuple = time.localtime( self.dataOut.utctime)
2844 subfolder = 'd%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
2845
2846 fullpath = os.path.join( path, subfolder )
2847 if not( os.path.exists(fullpath) ):
2848 os.mkdir(fullpath)
2849 self.setFile = -1 #inicializo mi contador de seteo
2850 else:
2851 filesList = os.listdir( fullpath )
2852 if len( filesList ) > 0:
2853 filesList = sorted( filesList, key=str.lower )
2854 filen = filesList[-1]
2855
2856 if isNumber( filen[8:11] ):
2857 self.setFile = int( filen[8:11] ) #inicializo mi contador de seteo al seteo del ultimo file
2858 else:
2859 self.setFile = -1
2860 else:
2861 self.setFile = -1 #inicializo mi contador de seteo
2862
2863 setFile = self.setFile
2864 setFile += 1
2865
2866 file = '%s%4.4d%3.3d%3.3d%s' % (self.optchar,
2867 timeTuple.tm_year,
2868 timeTuple.tm_yday,
2869 setFile,
2870 ext )
2871
2872 filename = os.path.join( path, subfolder, file )
2873
2874 self.blockIndex = 0
2875 self.filename = filename
2876 self.setFile = setFile
2877 self.flagIsNewFile = 1
2878
2879 print 'Writing the file: %s'%self.filename
2880
2881 self.setFitsHeader(self.dataOut, self.metadatafile)
2882
2883 return 1
2884
2885 def writeBlock(self):
2886 self.addData(self.dataOut.data_spc)
2887 self.flagIsNewFile = 0
2888
2889
2890 def __setNewBlock(self):
2891
2892 if self.flagIsNewFile:
2893 return 1
2894
2895 if self.blockIndex < self.dataBlocksPerFile:
2896 return 1
2897
2898 if not( self.setNextFile() ):
2899 return 0
2900
2901 return 1
2902
2903 def writeNextBlock(self):
2904 if not( self.__setNewBlock() ):
2905 return 0
2906 self.writeBlock()
2907 return 1
2908
2909 def putData(self):
2910 if self.flagIsNewFile:
2911 self.setNextFile()
2912 self.writeNextBlock()
2913
2914 def run(self, dataOut, **kwargs):
2915 if not(self.isConfig):
2916 self.setup(dataOut, **kwargs)
2917 self.isConfig = True
2918 self.putData()
2919
2920
@@ -37,32 +37,38 opObj11.addParameter(name='wintitle', value='SpectraHeisPlot', format='str')
37 #opObj11.addParameter(name='ymax', value='140', format='int')
37 #opObj11.addParameter(name='ymax', value='140', format='int')
38 #opObj11.addParameter(name='channelList', value='0,1,2', format='intlist')
38 #opObj11.addParameter(name='channelList', value='0,1,2', format='intlist')
39 #opObj11.addParameter(name='showprofile', value='1', format='int')
39 #opObj11.addParameter(name='showprofile', value='1', format='int')
40 opObj11.addParameter(name='save', value='1', format='bool')
40 #opObj11.addParameter(name='save', value='1', format='bool')
41 opObj11.addParameter(name='figfile', value='spc-noise.png', format='str')
41 #opObj11.addParameter(name='figfile', value='spc-noise.png', format='str')
42 opObj11.addParameter(name='figpath', value='/Users/dsuarez/Pictures/sun_pics', format='str')
42 #opObj11.addParameter(name='figpath', value='/Users/dsuarez/Pictures/sun_pics', format='str')
43 opObj11.addParameter(name='ftp', value='1', format='int')
43 #opObj11.addParameter(name='ftp', value='1', format='int')
44 opObj11.addParameter(name='ftpratio', value='10', format='int')
44 #opObj11.addParameter(name='ftpratio', value='10', format='int')
45
45
46 opObj11 = procUnitConfObj1.addOperation(name='RTIfromSpectraHeis', optype='other')
46 opObj11 = procUnitConfObj1.addOperation(name='RTIfromSpectraHeis', optype='other')
47 opObj11.addParameter(name='idfigure', value='6', format='int')
47 opObj11.addParameter(name='idfigure', value='6', format='int')
48 opObj11.addParameter(name='wintitle', value='RTIPLot', format='str')
48 opObj11.addParameter(name='wintitle', value='RTIPLot', format='str')
49 #opObj11.addParameter(name='zmin', value='10', format='int')
49 opObj11.addParameter(name='xmin', value='11.5', format='float')
50 #opObj11.addParameter(name='zmax', value='40', format='int')
50 opObj11.addParameter(name='xmax', value='12.5', format='float')
51 opObj11.addParameter(name='ymin', value='60', format='int')
51 opObj11.addParameter(name='ymin', value='60', format='int')
52 opObj11.addParameter(name='ymax', value='85', format='int')
52 opObj11.addParameter(name='ymax', value='85', format='int')
53 #opObj11.addParameter(name='channelList', value='0,1,2,3', format='intlist')
53 #opObj11.addParameter(name='channelList', value='0,1,2,3', format='intlist')
54 #opObj11.addParameter(name='timerange', value='600', format='int')
54 #opObj11.addParameter(name='timerange', value='600', format='int')
55 #opObj11.addParameter(name='showprofile', value='0', format='int')
55 #opObj11.addParameter(name='showprofile', value='0', format='int')
56 opObj11.addParameter(name='save', value='1', format='bool')
56 #opObj11.addParameter(name='save', value='1', format='bool')
57 opObj11.addParameter(name='figfile', value='rti-noise.png', format='str')
57 #opObj11.addParameter(name='figfile', value='rti-noise.png', format='str')
58 opObj11.addParameter(name='figpath', value='/Users/dsuarez/Pictures/sun_pics', format='str')
58 #opObj11.addParameter(name='figpath', value='/Users/dsuarez/Pictures/sun_pics', format='str')
59 opObj11.addParameter(name='ftp', value='1', format='int')
59 #opObj11.addParameter(name='ftp', value='1', format='int')
60 opObj11.addParameter(name='ftpratio', value='10', format='int')
60 #opObj11.addParameter(name='ftpratio', value='10', format='int')
61 opObj11.addParameter(name='useLocalTime', value='1', format='bool')
62 opObj11.addParameter(name='timezone', value='300', format='int')
61
63
62 opObj11 = procUnitConfObj1.addOperation(name='SpectraHeisWriter', optype='other')
64 #opObj11 = procUnitConfObj1.addOperation(name='SpectraHeisWriter', optype='other')
63 opObj11.addParameter(name='wrpath', value='/Users/dsuarez/Remote', format='str')
65 #opObj11.addParameter(name='wrpath', value='/Users/dsuarez/Remote', format='str')
64 #opObj11.addParameter(name='blocksPerFile', value='200', format='int')
66 ##opObj11.addParameter(name='blocksPerFile', value='200', format='int')
65
67
68 opObj11 = procUnitConfObj1.addOperation(name='FitsWriter', optype='other')
69 opObj11.addParameter(name='path', value='/Users/dsuarez/Remote', format='str')
70 opObj11.addParameter(name='dataBlocksPerFile', value='10', format='int')
71 opObj11.addParameter(name='metadatafile', value='/Users/dsuarez/Desktop/metadata_fits.xml', format='str')
66
72
67 print "Escribiendo el archivo XML"
73 print "Escribiendo el archivo XML"
68 controllerObj.writeXml(filename)
74 controllerObj.writeXml(filename)
General Comments 0
You need to be logged in to leave comments. Login now