@@ -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 |
|
|
49 | opObj11.addParameter(name='xmin', value='11.5', format='float') | |
50 |
|
|
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