@@ -2855,12 +2855,18 class SpectralFitting(Operation): | |||
|
2855 | 2855 | p0 = dataOut.data_param[i,:,h-1] |
|
2856 | 2856 | else: |
|
2857 | 2857 | p0 = numpy.array(self.library.initialValuesFunction(data_spc*w, constants))# sin el i(data_spc, constants, i) |
|
2858 | #print("AQUI REEMPLAZAS CON EL fd0",fd0) | |
|
2858 | 2859 | p0[3] = fd0 |
|
2859 | 2860 | if filec != None: |
|
2860 | 2861 | p0 = self.weightf.Vrfit(p0,tini.tm_year,tini.tm_yday,index,h,i) |
|
2862 | ||
|
2863 | #print("minP0-ANTES DE OPTIMIZE") | |
|
2864 | #print(p0) | |
|
2861 | 2865 | try: |
|
2862 | 2866 | #Least Squares |
|
2863 | 2867 | minp,covp,infodict,mesg,ier = optimize.leastsq(self.__residFunction,p0,args=(dp,LT,constants),full_output=True) |
|
2868 | print("VERIFICAR SI ESTA VARIANDO minp--------------------------------", minp[3]) | |
|
2869 | print("COMPARACION ---- p0[3],fd0",p0[3],fd0) | |
|
2864 | 2870 | #minp,covp = optimize.leastsq(self.__residFunction,p0,args=(dp,LT,constants)) |
|
2865 | 2871 | #Chi square error |
|
2866 | 2872 | error0 = numpy.sum(infodict['fvec']**2)/(2*N) |
@@ -2880,7 +2886,7 class SpectralFitting(Operation): | |||
|
2880 | 2886 | if dataOut.data_param is None: |
|
2881 | 2887 | dataOut.data_param = numpy.zeros((nGroups, p0.size, nHeights))*numpy.nan |
|
2882 | 2888 | dataOut.data_error = numpy.zeros((nGroups, p0.size + 1, nHeights))*numpy.nan |
|
2883 | ||
|
2889 | print("CLASE SF minp- ?????",minp) | |
|
2884 | 2890 | dataOut.data_error[i,:,h] = numpy.hstack((error0,error1)) |
|
2885 | 2891 | dataOut.data_param[i,:,h] = minp |
|
2886 | 2892 | for ht in range(nHeights-1) : |
@@ -3648,6 +3654,7 class EWDriftsEstimation(Operation): | |||
|
3648 | 3654 | else : |
|
3649 | 3655 | moments=numpy.vstack(([velRadialm[0,:]],[velRadialm[0,:]])) |
|
3650 | 3656 | dataOut.moments=moments |
|
3657 | print("CLASE EWD Estimation",moments) | |
|
3651 | 3658 | # Coherent |
|
3652 | 3659 | smooth_wC = ebufc[0,:] |
|
3653 | 3660 | p_w0C = rbufc[0,:] |
@@ -5034,127 +5041,10 class SMOperations(): | |||
|
5034 | 5041 | chan1Y = chan1 |
|
5035 | 5042 | chan2Y = chan2 |
|
5036 | 5043 | distances[2:4] = numpy.array([d1,d2]) |
|
5037 | # axisXsides = numpy.reshape(axisX[ix,:],4) | |
|
5038 | # | |
|
5039 | # channelCentX = int(numpy.intersect1d(pairX[0,:], pairX[1,:])[0]) | |
|
5040 | # channelCentY = int(numpy.intersect1d(pairY[0,:], pairY[1,:])[0]) | |
|
5041 | # | |
|
5042 | # ind25X = numpy.where(pairX[0,:] != channelCentX)[0][0] | |
|
5043 | # ind20X = numpy.where(pairX[1,:] != channelCentX)[0][0] | |
|
5044 | # channel25X = int(pairX[0,ind25X]) | |
|
5045 | # channel20X = int(pairX[1,ind20X]) | |
|
5046 | # ind25Y = numpy.where(pairY[0,:] != channelCentY)[0][0] | |
|
5047 | # ind20Y = numpy.where(pairY[1,:] != channelCentY)[0][0] | |
|
5048 | # channel25Y = int(pairY[0,ind25Y]) | |
|
5049 | # channel20Y = int(pairY[1,ind20Y]) | |
|
5050 | ||
|
5051 | # pairslist = [(channelCentX, channel25X),(channelCentX, channel20X),(channelCentY,channel25Y),(channelCentY, channel20Y)] | |
|
5044 | ||
|
5052 | 5045 | pairslist = [(chanCX, chan1X),(chanCX, chan2X),(chanCY,chan1Y),(chanCY, chan2Y)] |
|
5053 | 5046 | |
|
5054 | 5047 | return pairslist, distances |
|
5055 | # def __getAOA(self, phases, pairsList, error, AOAthresh, azimuth): | |
|
5056 | # | |
|
5057 | # arrayAOA = numpy.zeros((phases.shape[0],3)) | |
|
5058 | # cosdir0, cosdir = self.__getDirectionCosines(phases, pairsList) | |
|
5059 | # | |
|
5060 | # arrayAOA[:,:2] = self.__calculateAOA(cosdir, azimuth) | |
|
5061 | # cosDirError = numpy.sum(numpy.abs(cosdir0 - cosdir), axis = 1) | |
|
5062 | # arrayAOA[:,2] = cosDirError | |
|
5063 | # | |
|
5064 | # azimuthAngle = arrayAOA[:,0] | |
|
5065 | # zenithAngle = arrayAOA[:,1] | |
|
5066 | # | |
|
5067 | # #Setting Error | |
|
5068 | # #Number 3: AOA not fesible | |
|
5069 | # indInvalid = numpy.where(numpy.logical_and((numpy.logical_or(numpy.isnan(zenithAngle), numpy.isnan(azimuthAngle))),error == 0))[0] | |
|
5070 | # error[indInvalid] = 3 | |
|
5071 | # #Number 4: Large difference in AOAs obtained from different antenna baselines | |
|
5072 | # indInvalid = numpy.where(numpy.logical_and(cosDirError > AOAthresh,error == 0))[0] | |
|
5073 | # error[indInvalid] = 4 | |
|
5074 | # return arrayAOA, error | |
|
5075 | # | |
|
5076 | # def __getDirectionCosines(self, arrayPhase, pairsList): | |
|
5077 | # | |
|
5078 | # #Initializing some variables | |
|
5079 | # ang_aux = numpy.array([-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8])*2*numpy.pi | |
|
5080 | # ang_aux = ang_aux.reshape(1,ang_aux.size) | |
|
5081 | # | |
|
5082 | # cosdir = numpy.zeros((arrayPhase.shape[0],2)) | |
|
5083 | # cosdir0 = numpy.zeros((arrayPhase.shape[0],2)) | |
|
5084 | # | |
|
5085 | # | |
|
5086 | # for i in range(2): | |
|
5087 | # #First Estimation | |
|
5088 | # phi0_aux = arrayPhase[:,pairsList[i][0]] + arrayPhase[:,pairsList[i][1]] | |
|
5089 | # #Dealias | |
|
5090 | # indcsi = numpy.where(phi0_aux > numpy.pi) | |
|
5091 | # phi0_aux[indcsi] -= 2*numpy.pi | |
|
5092 | # indcsi = numpy.where(phi0_aux < -numpy.pi) | |
|
5093 | # phi0_aux[indcsi] += 2*numpy.pi | |
|
5094 | # #Direction Cosine 0 | |
|
5095 | # cosdir0[:,i] = -(phi0_aux)/(2*numpy.pi*0.5) | |
|
5096 | # | |
|
5097 | # #Most-Accurate Second Estimation | |
|
5098 | # phi1_aux = arrayPhase[:,pairsList[i][0]] - arrayPhase[:,pairsList[i][1]] | |
|
5099 | # phi1_aux = phi1_aux.reshape(phi1_aux.size,1) | |
|
5100 | # #Direction Cosine 1 | |
|
5101 | # cosdir1 = -(phi1_aux + ang_aux)/(2*numpy.pi*4.5) | |
|
5102 | # | |
|
5103 | # #Searching the correct Direction Cosine | |
|
5104 | # cosdir0_aux = cosdir0[:,i] | |
|
5105 | # cosdir0_aux = cosdir0_aux.reshape(cosdir0_aux.size,1) | |
|
5106 | # #Minimum Distance | |
|
5107 | # cosDiff = (cosdir1 - cosdir0_aux)**2 | |
|
5108 | # indcos = cosDiff.argmin(axis = 1) | |
|
5109 | # #Saving Value obtained | |
|
5110 | # cosdir[:,i] = cosdir1[numpy.arange(len(indcos)),indcos] | |
|
5111 | # | |
|
5112 | # return cosdir0, cosdir | |
|
5113 | # | |
|
5114 | # def __calculateAOA(self, cosdir, azimuth): | |
|
5115 | # cosdirX = cosdir[:,0] | |
|
5116 | # cosdirY = cosdir[:,1] | |
|
5117 | # | |
|
5118 | # zenithAngle = numpy.arccos(numpy.sqrt(1 - cosdirX**2 - cosdirY**2))*180/numpy.pi | |
|
5119 | # azimuthAngle = numpy.arctan2(cosdirX,cosdirY)*180/numpy.pi + azimuth #0 deg north, 90 deg east | |
|
5120 | # angles = numpy.vstack((azimuthAngle, zenithAngle)).transpose() | |
|
5121 | # | |
|
5122 | # return angles | |
|
5123 | # | |
|
5124 | # def __getHeights(self, Ranges, zenith, error, minHeight, maxHeight): | |
|
5125 | # | |
|
5126 | # Ramb = 375 #Ramb = c/(2*PRF) | |
|
5127 | # Re = 6371 #Earth Radius | |
|
5128 | # heights = numpy.zeros(Ranges.shape) | |
|
5129 | # | |
|
5130 | # R_aux = numpy.array([0,1,2])*Ramb | |
|
5131 | # R_aux = R_aux.reshape(1,R_aux.size) | |
|
5132 | # | |
|
5133 | # Ranges = Ranges.reshape(Ranges.size,1) | |
|
5134 | # | |
|
5135 | # Ri = Ranges + R_aux | |
|
5136 | # hi = numpy.sqrt(Re**2 + Ri**2 + (2*Re*numpy.cos(zenith*numpy.pi/180)*Ri.transpose()).transpose()) - Re | |
|
5137 | # | |
|
5138 | # #Check if there is a height between 70 and 110 km | |
|
5139 | # h_bool = numpy.sum(numpy.logical_and(hi > minHeight, hi < maxHeight), axis = 1) | |
|
5140 | # ind_h = numpy.where(h_bool == 1)[0] | |
|
5141 | # | |
|
5142 | # hCorr = hi[ind_h, :] | |
|
5143 | # ind_hCorr = numpy.where(numpy.logical_and(hi > minHeight, hi < maxHeight)) | |
|
5144 | # | |
|
5145 | # hCorr = hi[ind_hCorr] | |
|
5146 | # heights[ind_h] = hCorr | |
|
5147 | # | |
|
5148 | # #Setting Error | |
|
5149 | # #Number 13: Height unresolvable echo: not valid height within 70 to 110 km | |
|
5150 | # #Number 14: Height ambiguous echo: more than one possible height within 70 to 110 km | |
|
5151 | # | |
|
5152 | # indInvalid2 = numpy.where(numpy.logical_and(h_bool > 1, error == 0))[0] | |
|
5153 | # error[indInvalid2] = 14 | |
|
5154 | # indInvalid1 = numpy.where(numpy.logical_and(h_bool == 0, error == 0))[0] | |
|
5155 | # error[indInvalid1] = 13 | |
|
5156 | # | |
|
5157 | # return heights, error | |
|
5158 | 5048 | |
|
5159 | 5049 | class IGRFModel(Operation): |
|
5160 | 5050 | """Operation to calculate Geomagnetic parameters. |
General Comments 0
You need to be logged in to leave comments.
Login now