##// END OF EJS Templates
Interference from YAGI removed, remHeightsIppInterf added
joabAM -
r1579:8a1b75bc0681
parent child
Show More
@@ -368,6 +368,8 class Voltage(JROData):
368 368 dataPP_DOP = None
369 369 dataPP_WIDTH = None
370 370 dataPP_SNR = None
371 flagProfilesByRange = False
372 nProfilesByRange = None
371 373
372 374 def __init__(self):
373 375 '''
@@ -458,6 +460,8 class Voltage(JROData):
458 460 class Spectra(JROData):
459 461
460 462 data_outlier = None
463 flagProfilesByRange = False
464 nProfilesByRange = None
461 465
462 466 def __init__(self):
463 467 '''
@@ -588,13 +592,13 class Spectra(JROData):
588 592 def normFactor(self):
589 593
590 594 pwcode = 1
591
592 595 if self.flagDecodeData:
593 596 pwcode = numpy.sum(self.code[0]**2)
594 597 #print(self.flagDecodeData, pwcode)
595 598 #normFactor = min(self.nFFTPoints,self.nProfiles)*self.nIncohInt*self.nCohInt*pwcode*self.windowOfFilter
596 599 normFactor = self.nProfiles * self.nIncohInt * self.nCohInt * pwcode * self.windowOfFilter
597
600 if self.flagProfilesByRange:
601 normFactor *= (self.nProfilesByRange/self.nProfilesByRange.max())
598 602
599 603 return normFactor
600 604
@@ -939,7 +943,8 class Parameters(Spectra):
939 943 noise_estimation = None
940 944 GauSPC = None # Fit gaussian SPC
941 945 txPower = None
942
946 flagProfilesByRange = False
947 nProfilesByRange = None
943 948
944 949 def __init__(self):
945 950 '''
@@ -943,18 +943,21 class NoiselessSpectraPlot(Plot):
943 943 data = {}
944 944 meta = {}
945 945
946 norm = dataOut.nProfiles * dataOut.max_nIncohInt * dataOut.nCohInt * dataOut.windowOfFilter#*dataOut.nFFTPoints
947 n0 = 10*numpy.log10(dataOut.getNoise()/norm)
946 norm = dataOut.nProfiles * dataOut.max_nIncohInt * dataOut.nCohInt * dataOut.windowOfFilter
947 n0 = (dataOut.getNoise()/norm)
948 948 noise = numpy.repeat(n0,(dataOut.nFFTPoints*dataOut.nHeights)).reshape(dataOut.nChannels,dataOut.nFFTPoints,dataOut.nHeights)
949 noise = 10*numpy.log10(noise)
949 950
950 z = []
951 z = numpy.zeros((dataOut.nChannels, dataOut.nFFTPoints, dataOut.nHeights))
951 952 for ch in range(dataOut.nChannels):
952 if hasattr(dataOut.normFactor,'shape'):
953 z.append(numpy.divide(dataOut.data_spc[ch],dataOut.normFactor[ch]))
953 if hasattr(dataOut.normFactor,'ndim'):
954 if dataOut.normFactor.ndim > 1:
955 z[ch] = (numpy.divide(dataOut.data_spc[ch],dataOut.normFactor[ch]))
956 else:
957 z[ch] = (numpy.divide(dataOut.data_spc[ch],dataOut.normFactor))
954 958 else:
955 z.append(numpy.divide(dataOut.data_spc[ch],dataOut.normFactor))
959 z[ch] = (numpy.divide(dataOut.data_spc[ch],dataOut.normFactor))
956 960
957 z = numpy.asarray(z)
958 961 z = numpy.where(numpy.isfinite(z), z, numpy.NAN)
959 962 spc = 10*numpy.log10(z)
960 963
@@ -1061,8 +1064,6 class NoiselessRTIPlot(RTIPlot):
1061 1064 #print(dataOut.max_nIncohInt, dataOut.nIncohInt)
1062 1065 #print(dataOut.windowOfFilter,dataOut.nCohInt,dataOut.nProfiles,dataOut.max_nIncohInt,dataOut.nIncohInt)
1063 1066 norm = dataOut.nProfiles * dataOut.max_nIncohInt * dataOut.nCohInt * dataOut.windowOfFilter
1064
1065
1066 1067 n0 = 10*numpy.log10(dataOut.getNoise()/norm)
1067 1068 data['noise'] = n0
1068 1069 noise = numpy.repeat(n0,dataOut.nHeights).reshape(dataOut.nChannels,dataOut.nHeights)
@@ -145,7 +145,8 class ParametersProc(ProcessingUnit):
145 145 self.dataOut.nIncohInt = self.dataIn.nIncohInt
146 146 self.dataOut.nFFTPoints = self.dataIn.nFFTPoints
147 147 self.dataOut.ippFactor = self.dataIn.ippFactor
148
148 self.dataOut.flagProfilesByRange = self.dataIn.flagProfilesByRange
149 self.dataOut.nProfilesByRange = self.dataIn.nProfilesByRange
149 150
150 151 self.dataOut.deltaHeight = self.dataIn.deltaHeight
151 152 self.dataOut.abscissaList = self.dataIn.getVelRange(1)
@@ -76,6 +76,8 class SpectraProc(ProcessingUnit):
76 76 self.dataOut.elevationList = self.dataIn.elevationList
77 77 self.dataOut.code = self.dataIn.code
78 78 self.dataOut.nCode = self.dataIn.nCode
79 self.dataOut.flagProfilesByRange = self.dataIn.flagProfilesByRange
80 self.dataOut.nProfilesByRange = self.dataIn.nProfilesByRange
79 81
80 82
81 83 def __getFft(self):
@@ -1305,6 +1307,9 class IntegrationFaradaySpectra(Operation):
1305 1307 factor = 0.0
1306 1308 dataoutliers = None # (CHANNELS, HEIGHTS)
1307 1309
1310 _flagProfilesByRange = False
1311 _nProfilesByRange = 0
1312
1308 1313 def __init__(self):
1309 1314
1310 1315 Operation.__init__(self)
@@ -1631,7 +1636,10 class IntegrationFaradaySpectra(Operation):
1631 1636 if n == 1:
1632 1637 return self.dataOut
1633 1638 self.dataOut.processingHeaderObj.timeIncohInt = timeInterval
1634 #print("nchannels", self.dataOut.nChannels)
1639
1640 if dataOut.flagProfilesByRange == True:
1641 self._flagProfilesByRange = True
1642
1635 1643 if self.dataOut.nChannels == 1:
1636 1644 self.dataOut.data_cspc = None #si es un solo canal no vale la pena acumular DATOS
1637 1645 #print("IN spc:", self.dataOut.data_spc.shape, self.dataOut.data_cspc)
@@ -1656,6 +1664,11 class IntegrationFaradaySpectra(Operation):
1656 1664 self.dataOut.dataLag_cspc,
1657 1665 self.dataOut.dataLag_dc)
1658 1666 self.dataOut.flagNoData = True
1667
1668 if self._flagProfilesByRange:
1669 dataOut.flagProfilesByRange = True
1670 self._nProfilesByRange += dataOut.nProfilesByRange
1671
1659 1672 if self.__dataReady:
1660 1673
1661 1674 if not self.ByLags:
@@ -1668,6 +1681,7 class IntegrationFaradaySpectra(Operation):
1668 1681 self.dataOut.data_cspc = numpy.squeeze(avgdata_cspc)
1669 1682 self.dataOut.data_dc = avgdata_dc
1670 1683 self.dataOut.data_outlier = self.dataOutliers
1684
1671 1685
1672 1686 else:
1673 1687 self.dataOut.dataLag_spc = avgdata_spc
@@ -1684,6 +1698,10 class IntegrationFaradaySpectra(Operation):
1684 1698
1685 1699 self.dataOut.utctime = avgdatatime
1686 1700 self.dataOut.flagNoData = False
1701
1702 dataOut.nProfilesByRange = self._nProfilesByRange
1703 self._nProfilesByRange = 0
1704 self._flagProfilesByRange = False
1687 1705
1688 1706 # #update Processing Header:
1689 1707 # self.dataOut.processingHeaderObj.nIncohInt =
@@ -1996,7 +2014,9 class IncohInt(Operation):
1996 2014 incohInt = 0
1997 2015 nOutliers = 0
1998 2016 n = None
1999
2017
2018 _flagProfilesByRange = False
2019 _nProfilesByRange = 0
2000 2020 def __init__(self):
2001 2021
2002 2022 Operation.__init__(self)
@@ -2139,6 +2159,9 class IncohInt(Operation):
2139 2159 if dataOut.flagNoData == True:
2140 2160 return dataOut
2141 2161
2162 if dataOut.flagProfilesByRange == True:
2163 self._flagProfilesByRange = True
2164
2142 2165 dataOut.flagNoData = True
2143 2166 dataOut.processingHeaderObj.timeIncohInt = timeInterval
2144 2167 if not self.isConfig:
@@ -2152,10 +2175,15 class IncohInt(Operation):
2152 2175 dataOut.data_dc)
2153 2176
2154 2177 self.incohInt += dataOut.nIncohInt
2178
2155 2179
2156 2180 if isinstance(dataOut.data_outlier,numpy.ndarray) or isinstance(dataOut.data_outlier,int) or isinstance(dataOut.data_outlier, float):
2157 2181 self.nOutliers += dataOut.data_outlier
2158 2182
2183 if self._flagProfilesByRange:
2184 dataOut.flagProfilesByRange = True
2185 self._nProfilesByRange += dataOut.nProfilesByRange
2186
2159 2187 if self.__dataReady:
2160 2188 #print("prof: ",dataOut.max_nIncohInt,self.__profIndex)
2161 2189 dataOut.data_spc = avgdata_spc
@@ -2168,6 +2196,9 class IncohInt(Operation):
2168 2196 self.incohInt = 0
2169 2197 self.nOutliers = 0
2170 2198 self.__profIndex = 0
2199 dataOut.nProfilesByRange = self._nProfilesByRange
2200 self._nProfilesByRange = 0
2201 self._flagProfilesByRange = False
2171 2202 #print("IncohInt Done")
2172 2203 return dataOut
2173 2204
@@ -45,8 +45,7 class VoltageProc(ProcessingUnit):
45 45 self.dataOut.processingHeaderObj.codeList = self.dataOut.nChannels
46 46 self.dataOut.processingHeaderObj.heightList = self.dataOut.heightList
47 47 self.dataOut.processingHeaderObj.heightResolution = self.dataOut.heightList[1] - self.dataOut.heightList[0]
48
49
48
50 49
51 50
52 51 def __updateObjFromAmisrInput(self):
@@ -2018,7 +2017,17 class SSheightProfiles2(Operation):
2018 2017 dataOut.processingHeaderObj.ipp = ippSeconds
2019 2018 dataOut.processingHeaderObj.heightResolution = dataOut.deltaHeight
2020 2019 #dataOut.processingHeaderObj.profilesPerBlock = nProfiles
2021
2020
2021 # # dataOut.data = CH, PROFILES, HEIGHTS
2022 #print(dataOut.data .shape)
2023 if dataOut.flagProfilesByRange:
2024 # #assuming the same remotion for all channels
2025 aux = [ self.nsamples - numpy.count_nonzero(dataOut.data[0, :, h]==0) for h in range(len(dataOut.heightList))]
2026 dataOut.nProfilesByRange = numpy.asarray(aux)
2027 #print(dataOut.nProfilesByRange)
2028 else:
2029 dataOut.nProfilesByRange = numpy.ones(len(dataOut.heightList))*dataOut.nProfiles
2030 print(dataOut.nProfilesByRange)
2022 2031 return dataOut
2023 2032
2024 2033
@@ -2766,9 +2775,9 class removeProfileByFaradayHS(Operation):
2766 2775
2767 2776 if self.__profIndex == self.n:
2768 2777 #print("apnd : ",data)
2769 #dataBlock = self.cleanOutliersByBlock()
2778 dataBlock = self.cleanOutliersByBlock()
2770 2779 #dataBlock = self.cleanSpikesFFT2D()
2771 dataBlock = self.filterSatsProfiles2()
2780 #dataBlock = self.filterSatsProfiles2()
2772 2781 self.__dataReady = True
2773 2782
2774 2783 return dataBlock
@@ -3566,3 +3575,83 class RemoveProfileSats2(Operation):
3566 3575 #print(self.__count_exec)
3567 3576
3568 3577 return dataOut
3578
3579
3580
3581
3582 class remHeightsIppInterf(Operation):
3583
3584 def __init__(self):
3585
3586 self.config = False
3587
3588 self.heights_indx = None
3589 self.heightsList = []
3590
3591 self.ipp1 = None
3592 self.ipp2 = None
3593 self.tx1 = None
3594 self.tx2 = None
3595 self.dh1 = None
3596
3597
3598 def setup(self, dataOut, ipp1=None, ipp2=None, tx1=None, tx2=None, dh1=None,
3599 idate=None, startH=None, endH=None):
3600
3601
3602 self.ipp1 = ipp1
3603 self.ipp2 = ipp2
3604 self.tx1 = tx1
3605 self.tx2 = tx2
3606 self.dh1 = dh1
3607
3608 _maxIpp1R = dataOut.heightList.max()
3609
3610 _n_repeats = int(_maxIpp1R / ipp2)
3611 _init_hIntf = (tx1 + ipp2/2)+ dh1
3612 _n_hIntf = int(tx2 / dh1)
3613
3614 self.heightsList = [_init_hIntf+n*ipp2 for n in range(_n_repeats) ]
3615 heiList = dataOut.heightList
3616 self.heights_indx = [getHei_index(h,h,heiList)[0] for h in self.heightsList]
3617
3618 self.heights_indx = [ numpy.asarray([k for k in range(_n_hIntf+2)])+(getHei_index(h,h,heiList)[0] -1) for h in self.heightsList]
3619
3620 self.heights_indx = numpy.asarray(self.heights_indx )
3621 self.config = True
3622 self.startTime = datetime.datetime.combine(idate,startH)
3623 self.endTime = datetime.datetime.combine(idate,endH)
3624 #print(self.startTime, self.endTime)
3625 #print("nrepeats: ", _n_repeats, " _nH: ",_n_hIntf )
3626 #print("H interf:",self.heightsList, dataOut.heightList[self.heights_indx] )
3627
3628 def run(self, dataOut, ipp1=None, ipp2=None, tx1=None, tx2=None, dh1=None, idate=None,
3629 startH=None, endH=None):
3630 #print(locals().values())
3631 if None in locals().values():
3632 log.warning('Missing kwargs, invalid values """None""" ', self.name)
3633 return dataOut
3634
3635
3636 if not self.config:
3637 self.setup(dataOut, ipp1=ipp1, ipp2=ipp2, tx1=tx1, tx2=tx2, dh1=dh1,
3638 idate=idate, startH=startH, endH=endH)
3639
3640 flagProfilesByRange = False
3641 currentTime = datetime.datetime.fromtimestamp(dataOut.utctime)
3642
3643 if currentTime < self.startTime or currentTime > self.endTime:
3644 return dataOut
3645
3646
3647 for ch in range(dataOut.data.shape[0]):
3648
3649 for hk in self.heights_indx.flatten():
3650 if dataOut.data.ndim < 3:
3651 dataOut.data[ch,hk] = 0 + 0j
3652 else:
3653 dataOut.data[ch,:,hk] = 0 + 0j
3654
3655 dataOut.flagProfilesByRange = True
3656
3657 return dataOut No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now