##// END OF EJS Templates
Modifications for JULIA Processing: By block fft for ESF mode, DC remove for flip experiments, averaging changes for ESF processing.
imanay -
r1763:03aa701e08ac
parent child
Show More
@@ -177,12 +177,12 class SpectraProc(ProcessingUnit):
177 177 self.id_max = nProfiles
178 178
179 179 self.buffer = self.dataIn.data[:, self.id_min:self.id_max,:]
180 if self.id_max == nVoltProfiles:
181 self.reader.bypass = False
182
180 183 self.profIndex += nProfiles
181 184 self.id_min += nProfiles
182 185 self.id_max += nProfiles
183 if self.id_max == nVoltProfiles:
184 self.reader.bypass = False
185
186 186 else:
187 187 raise ValueError("The type object %s has %d profiles, it should just has %d profiles" % (
188 188 self.dataIn.type, self.dataIn.data.shape[1], nProfiles))
@@ -470,7 +470,7 class removeDC(Operation):
470 470 xx_inv = numpy.linalg.inv(xx)
471 471 xx_aux = xx_inv[0, :]
472 472
473 for ich in range(num_chan):
473 for ich in range(num_chan):
474 474 yy = jspectra[ich, ind_vel, :]
475 475 jspectra[ich, freq_dc, :] = numpy.dot(xx_aux, yy)
476 476
@@ -486,6 +486,34 class removeDC(Operation):
486 486 yy = jcspectra[ip, ind_vel, :]
487 487 jcspectra[ip, freq_dc, :] = numpy.dot(xx_aux, yy)
488 488
489 if mode == 3: # dc en la velocidad cero cuando se usa flip
490
491 vel = numpy.array([-2, -1, 1, 2])
492 xx = numpy.zeros([4, 4])
493
494 for fil in range(4):
495 xx[fil, :] = vel[fil] ** numpy.asarray(list(range(4)))
496
497 xx_inv = numpy.linalg.inv(xx)
498 xx_aux = xx_inv[0, :]
499
500 for ich in range(num_chan):
501
502 ind_freq_flip=[-1, -2, 1, 2]
503 yy = jspectra[ich, ind_freq_flip, :]
504 jspectra[ich, 0, :] = numpy.dot(xx_aux, yy)
505 junkid = jspectra[ich, 0, :] <= 0
506 cjunkid = sum(junkid)
507
508 if cjunkid.any():
509 jspectra[ich, 0, junkid.nonzero()] = (
510 jspectra[ich, ind_freq_flip[0], junkid] + jspectra[ich, ind_freq_flip[2], junkid]) / 2
511
512 if jcspectraExist:
513 for ip in range(num_pairs):
514 yy = jcspectra[ip, ind_freq_flip, :]
515 jcspectra[ip, 0, :] = numpy.dot(xx_aux, yy)
516
489 517 self.dataOut.data_spc = jspectra
490 518 self.dataOut.data_cspc = jcspectra
491 519
@@ -749,6 +777,10 class IncohInt(Operation):
749 777 __buffer_cspc = None
750 778 __buffer_dc = None
751 779
780 # JULIA processing
781 __buffer_diffcspc = None
782 __buffer_oldcspc = None
783 # JULIA processing
752 784 __dataReady = False
753 785
754 786 __timeInterval = None
@@ -778,10 +810,17 class IncohInt(Operation):
778 810 self.__buffer_cspc = 0
779 811 self.__buffer_dc = 0
780 812
813 # JULIA processing
814 self.__buffer_diffcspc = 0
815 self.__buffer_oldcspc = 0
816 # JULIA processing
781 817 self.__profIndex = 0
782 818 self.__dataReady = False
783 819 self.__byTime = False
784 820
821 # JULIA processing
822 self.__FirstBlock = True
823 # JULIA processing
785 824 if n is None and timeInterval is None:
786 825 raise ValueError("n or timeInterval should be specified ...")
787 826
@@ -805,6 +844,10 class IncohInt(Operation):
805 844 self.__buffer_cspc = None
806 845 else:
807 846 self.__buffer_cspc += data_cspc
847 # JULIA processing
848 self.__buffer_diffcspc += (data_cspc * numpy.conj(self.__buffer_oldcspc))
849 self.__buffer_oldcspc = data_cspc
850 # JULIA processing
808 851
809 852 if data_dc is None:
810 853 self.__buffer_dc = None
@@ -828,47 +871,51 class IncohInt(Operation):
828 871 data_spc = self.__buffer_spc
829 872 data_cspc = self.__buffer_cspc
830 873 data_dc = self.__buffer_dc
874 data_diffcspc = self.__buffer_diffcspc
831 875 n = self.__profIndex
832 876
833 877 self.__buffer_spc = 0
834 878 self.__buffer_cspc = 0
835 879 self.__buffer_dc = 0
880 self.__buffer_diffcspc = 0
836 881 self.__profIndex = 0
837 882
838 return data_spc, data_cspc, data_dc, n
883 return data_spc, data_cspc, data_diffcspc, data_dc, n
839 884
840 885 def byProfiles(self, *args):
841 886
842 887 self.__dataReady = False
843 888 avgdata_spc = None
844 889 avgdata_cspc = None
890 avgdata_diffcspc = None
845 891 avgdata_dc = None
846 892
847 893 self.putData(*args)
848 894
849 895 if self.__profIndex == self.n:
850 896
851 avgdata_spc, avgdata_cspc, avgdata_dc, n = self.pushData()
897 avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc, n = self.pushData()
852 898 self.n = n
853 899 self.__dataReady = True
854 900
855 return avgdata_spc, avgdata_cspc, avgdata_dc
901 return avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc
856 902
857 903 def byTime(self, datatime, *args):
858 904
859 905 self.__dataReady = False
860 906 avgdata_spc = None
861 907 avgdata_cspc = None
908 avgdata_diffcspc = None
862 909 avgdata_dc = None
863 910
864 911 self.putData(*args)
865 912
866 913 if (datatime - self.__initime) >= self.__integrationtime:
867 avgdata_spc, avgdata_cspc, avgdata_dc, n = self.pushData()
914 avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc, n = self.pushData()
868 915 self.n = n
869 916 self.__dataReady = True
870 917
871 return avgdata_spc, avgdata_cspc, avgdata_dc
918 return avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc
872 919
873 920 def integrate(self, datatime, *args):
874 921
@@ -876,17 +923,18 class IncohInt(Operation):
876 923 self.__initime = datatime
877 924
878 925 if self.__byTime:
879 avgdata_spc, avgdata_cspc, avgdata_dc = self.byTime(
926 avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc = self.byTime(
880 927 datatime, *args)
881 928 else:
882 avgdata_spc, avgdata_cspc, avgdata_dc = self.byProfiles(*args)
929 avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc = self.byProfiles(*args)
883 930
884 931 if not self.__dataReady:
885 return None, None, None, None
932 return None, None, None, None, None
886 933
887 return self.__initime, avgdata_spc, avgdata_cspc, avgdata_dc
934 return self.__initime, avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc
888 935
889 936 def run(self, dataOut, n=None, timeInterval=None, overlapping=False):
937
890 938 if n == 1:
891 939 return dataOut
892 940
@@ -896,17 +944,25 class IncohInt(Operation):
896 944 self.setup(n, timeInterval, overlapping)
897 945 self.isConfig = True
898 946
899 avgdatatime, avgdata_spc, avgdata_cspc, avgdata_dc = self.integrate(dataOut.utctime,
900 dataOut.data_spc,
901 dataOut.data_cspc,
902 dataOut.data_dc)
903
947 avgdatatime, avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc = self.integrate(dataOut.utctime,
948 dataOut.data_spc,
949 dataOut.data_cspc,
950 dataOut.data_dc)
951
904 952 if self.__dataReady:
905 953
906 954 dataOut.data_spc = avgdata_spc
907 955 dataOut.data_cspc = avgdata_cspc
908 dataOut.data_dc = avgdata_dc
909 dataOut.nIncohInt *= self.n
956 dataOut.data_diffcspc = avgdata_diffcspc
957 dataOut.data_dc = avgdata_dc
958 dataOut.nDiffIncohInt = dataOut.nIncohInt
959 dataOut.nIncohInt *= self.n
960 if self.__FirstBlock:
961 dataOut.nDiffIncohInt *= (self.n - 1)
962 self.__FirstBlock = False
963 else:
964 dataOut.nDiffIncohInt *= self.n
965
910 966 dataOut.utctime = avgdatatime
911 967 dataOut.flagNoData = False
912 968
General Comments 0
You need to be logged in to leave comments. Login now