@@ -177,12 +177,12 class SpectraProc(ProcessingUnit): | |||||
177 | self.id_max = nProfiles |
|
177 | self.id_max = nProfiles | |
178 |
|
178 | |||
179 | self.buffer = self.dataIn.data[:, self.id_min:self.id_max,:] |
|
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 | self.profIndex += nProfiles |
|
183 | self.profIndex += nProfiles | |
181 | self.id_min += nProfiles |
|
184 | self.id_min += nProfiles | |
182 | self.id_max += nProfiles |
|
185 | self.id_max += nProfiles | |
183 | if self.id_max == nVoltProfiles: |
|
|||
184 | self.reader.bypass = False |
|
|||
185 |
|
||||
186 | else: |
|
186 | else: | |
187 | raise ValueError("The type object %s has %d profiles, it should just has %d profiles" % ( |
|
187 | raise ValueError("The type object %s has %d profiles, it should just has %d profiles" % ( | |
188 | self.dataIn.type, self.dataIn.data.shape[1], nProfiles)) |
|
188 | self.dataIn.type, self.dataIn.data.shape[1], nProfiles)) | |
@@ -470,7 +470,7 class removeDC(Operation): | |||||
470 | xx_inv = numpy.linalg.inv(xx) |
|
470 | xx_inv = numpy.linalg.inv(xx) | |
471 | xx_aux = xx_inv[0, :] |
|
471 | xx_aux = xx_inv[0, :] | |
472 |
|
472 | |||
473 |
for ich in range(num_chan): |
|
473 | for ich in range(num_chan): | |
474 | yy = jspectra[ich, ind_vel, :] |
|
474 | yy = jspectra[ich, ind_vel, :] | |
475 | jspectra[ich, freq_dc, :] = numpy.dot(xx_aux, yy) |
|
475 | jspectra[ich, freq_dc, :] = numpy.dot(xx_aux, yy) | |
476 |
|
476 | |||
@@ -486,6 +486,34 class removeDC(Operation): | |||||
486 | yy = jcspectra[ip, ind_vel, :] |
|
486 | yy = jcspectra[ip, ind_vel, :] | |
487 | jcspectra[ip, freq_dc, :] = numpy.dot(xx_aux, yy) |
|
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 | self.dataOut.data_spc = jspectra |
|
517 | self.dataOut.data_spc = jspectra | |
490 | self.dataOut.data_cspc = jcspectra |
|
518 | self.dataOut.data_cspc = jcspectra | |
491 |
|
519 | |||
@@ -749,6 +777,10 class IncohInt(Operation): | |||||
749 | __buffer_cspc = None |
|
777 | __buffer_cspc = None | |
750 | __buffer_dc = None |
|
778 | __buffer_dc = None | |
751 |
|
779 | |||
|
780 | # JULIA processing | |||
|
781 | __buffer_diffcspc = None | |||
|
782 | __buffer_oldcspc = None | |||
|
783 | # JULIA processing | |||
752 | __dataReady = False |
|
784 | __dataReady = False | |
753 |
|
785 | |||
754 | __timeInterval = None |
|
786 | __timeInterval = None | |
@@ -778,10 +810,17 class IncohInt(Operation): | |||||
778 | self.__buffer_cspc = 0 |
|
810 | self.__buffer_cspc = 0 | |
779 | self.__buffer_dc = 0 |
|
811 | self.__buffer_dc = 0 | |
780 |
|
812 | |||
|
813 | # JULIA processing | |||
|
814 | self.__buffer_diffcspc = 0 | |||
|
815 | self.__buffer_oldcspc = 0 | |||
|
816 | # JULIA processing | |||
781 | self.__profIndex = 0 |
|
817 | self.__profIndex = 0 | |
782 | self.__dataReady = False |
|
818 | self.__dataReady = False | |
783 | self.__byTime = False |
|
819 | self.__byTime = False | |
784 |
|
820 | |||
|
821 | # JULIA processing | |||
|
822 | self.__FirstBlock = True | |||
|
823 | # JULIA processing | |||
785 | if n is None and timeInterval is None: |
|
824 | if n is None and timeInterval is None: | |
786 | raise ValueError("n or timeInterval should be specified ...") |
|
825 | raise ValueError("n or timeInterval should be specified ...") | |
787 |
|
826 | |||
@@ -805,6 +844,10 class IncohInt(Operation): | |||||
805 | self.__buffer_cspc = None |
|
844 | self.__buffer_cspc = None | |
806 | else: |
|
845 | else: | |
807 | self.__buffer_cspc += data_cspc |
|
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 | if data_dc is None: |
|
852 | if data_dc is None: | |
810 | self.__buffer_dc = None |
|
853 | self.__buffer_dc = None | |
@@ -828,47 +871,51 class IncohInt(Operation): | |||||
828 | data_spc = self.__buffer_spc |
|
871 | data_spc = self.__buffer_spc | |
829 | data_cspc = self.__buffer_cspc |
|
872 | data_cspc = self.__buffer_cspc | |
830 | data_dc = self.__buffer_dc |
|
873 | data_dc = self.__buffer_dc | |
|
874 | data_diffcspc = self.__buffer_diffcspc | |||
831 | n = self.__profIndex |
|
875 | n = self.__profIndex | |
832 |
|
876 | |||
833 | self.__buffer_spc = 0 |
|
877 | self.__buffer_spc = 0 | |
834 | self.__buffer_cspc = 0 |
|
878 | self.__buffer_cspc = 0 | |
835 | self.__buffer_dc = 0 |
|
879 | self.__buffer_dc = 0 | |
|
880 | self.__buffer_diffcspc = 0 | |||
836 | self.__profIndex = 0 |
|
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 | def byProfiles(self, *args): |
|
885 | def byProfiles(self, *args): | |
841 |
|
886 | |||
842 | self.__dataReady = False |
|
887 | self.__dataReady = False | |
843 | avgdata_spc = None |
|
888 | avgdata_spc = None | |
844 | avgdata_cspc = None |
|
889 | avgdata_cspc = None | |
|
890 | avgdata_diffcspc = None | |||
845 | avgdata_dc = None |
|
891 | avgdata_dc = None | |
846 |
|
892 | |||
847 | self.putData(*args) |
|
893 | self.putData(*args) | |
848 |
|
894 | |||
849 | if self.__profIndex == self.n: |
|
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 | self.n = n |
|
898 | self.n = n | |
853 | self.__dataReady = True |
|
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 | def byTime(self, datatime, *args): |
|
903 | def byTime(self, datatime, *args): | |
858 |
|
904 | |||
859 | self.__dataReady = False |
|
905 | self.__dataReady = False | |
860 | avgdata_spc = None |
|
906 | avgdata_spc = None | |
861 | avgdata_cspc = None |
|
907 | avgdata_cspc = None | |
|
908 | avgdata_diffcspc = None | |||
862 | avgdata_dc = None |
|
909 | avgdata_dc = None | |
863 |
|
910 | |||
864 | self.putData(*args) |
|
911 | self.putData(*args) | |
865 |
|
912 | |||
866 | if (datatime - self.__initime) >= self.__integrationtime: |
|
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 | self.n = n |
|
915 | self.n = n | |
869 | self.__dataReady = True |
|
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 | def integrate(self, datatime, *args): |
|
920 | def integrate(self, datatime, *args): | |
874 |
|
921 | |||
@@ -876,17 +923,18 class IncohInt(Operation): | |||||
876 | self.__initime = datatime |
|
923 | self.__initime = datatime | |
877 |
|
924 | |||
878 | if self.__byTime: |
|
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 | datatime, *args) |
|
927 | datatime, *args) | |
881 | else: |
|
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 | if not self.__dataReady: |
|
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 | def run(self, dataOut, n=None, timeInterval=None, overlapping=False): |
|
936 | def run(self, dataOut, n=None, timeInterval=None, overlapping=False): | |
|
937 | ||||
890 | if n == 1: |
|
938 | if n == 1: | |
891 | return dataOut |
|
939 | return dataOut | |
892 |
|
940 | |||
@@ -896,17 +944,25 class IncohInt(Operation): | |||||
896 | self.setup(n, timeInterval, overlapping) |
|
944 | self.setup(n, timeInterval, overlapping) | |
897 | self.isConfig = True |
|
945 | self.isConfig = True | |
898 |
|
946 | |||
899 | avgdatatime, avgdata_spc, avgdata_cspc, avgdata_dc = self.integrate(dataOut.utctime, |
|
947 | avgdatatime, avgdata_spc, avgdata_cspc, avgdata_diffcspc, avgdata_dc = self.integrate(dataOut.utctime, | |
900 | dataOut.data_spc, |
|
948 | dataOut.data_spc, | |
901 | dataOut.data_cspc, |
|
949 | dataOut.data_cspc, | |
902 | dataOut.data_dc) |
|
950 | dataOut.data_dc) | |
903 |
|
951 | |||
904 | if self.__dataReady: |
|
952 | if self.__dataReady: | |
905 |
|
953 | |||
906 | dataOut.data_spc = avgdata_spc |
|
954 | dataOut.data_spc = avgdata_spc | |
907 | dataOut.data_cspc = avgdata_cspc |
|
955 | dataOut.data_cspc = avgdata_cspc | |
908 |
dataOut.data_dc = avgdata_d |
|
956 | dataOut.data_diffcspc = avgdata_diffcspc | |
909 | dataOut.nIncohInt *= self.n |
|
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 | dataOut.utctime = avgdatatime |
|
966 | dataOut.utctime = avgdatatime | |
911 | dataOut.flagNoData = False |
|
967 | dataOut.flagNoData = False | |
912 |
|
968 |
General Comments 0
You need to be logged in to leave comments.
Login now