##// 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 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_dc
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