@@ -254,6 +254,7 class Plot(Operation): | |||
|
254 | 254 | self.data = PlotterData(self.CODE, self.exp_code, self.localtime) |
|
255 | 255 | self.ang_min = kwargs.get('ang_min', None) |
|
256 | 256 | self.ang_max = kwargs.get('ang_max', None) |
|
257 | self.mode = kwargs.get('mode', None) | |
|
257 | 258 | |
|
258 | 259 | |
|
259 | 260 | if self.server: |
@@ -434,9 +435,15 class Plot(Operation): | |||
|
434 | 435 | self.time_label), |
|
435 | 436 | size=8) |
|
436 | 437 | else: |
|
437 | ax.set_title('{}'.format(self.titles[n]), size=8) | |
|
438 |
ax.set_ |
|
|
439 | ax.set_yticks(numpy.arange(0, 90, 20)) | |
|
438 | #ax.set_title('{}'.format(self.titles[n]), size=8) | |
|
439 | ax.set_title('{} {} {}'.format( | |
|
440 | self.titles[n], | |
|
441 | self.getDateTime(self.data.max_time).strftime( | |
|
442 | '%Y-%m-%d %H:%M:%S'), | |
|
443 | self.time_label), | |
|
444 | size=8) | |
|
445 | ax.set_ylim(0, self.ymax) | |
|
446 | #ax.set_yticks(numpy.arange(0, self.ymax, 20)) | |
|
440 | 447 | ax.yaxis.labelpad = 40 |
|
441 | 448 | |
|
442 | 449 | if self.firsttime: |
@@ -2376,3 +2376,147 class WeatherRHI_vRF3_Plot(Plot): | |||
|
2376 | 2376 | plt.text(1.0, 1.05, 'Elevacion '+str(thisDatetime)+" Step "+str(self.ini)+ " Azi: "+str(round(self.res_azi,2)), transform=caax.transAxes, va='bottom',ha='right') |
|
2377 | 2377 | print("***************************self.ini****************************",self.ini) |
|
2378 | 2378 | self.ini= self.ini+1 |
|
2379 | ||
|
2380 | class WeatherRHI_vRF4_Plot(Plot): | |
|
2381 | CODE = 'weather' | |
|
2382 | plot_name = 'weather' | |
|
2383 | #plot_type = 'rhistyle' | |
|
2384 | buffering = False | |
|
2385 | data_ele_tmp = None | |
|
2386 | ||
|
2387 | def setup(self): | |
|
2388 | ||
|
2389 | self.ncols = 1 | |
|
2390 | self.nrows = 1 | |
|
2391 | self.nplots= 1 | |
|
2392 | self.ylabel= 'Range [Km]' | |
|
2393 | self.titles= ['Weather'] | |
|
2394 | self.polar = True | |
|
2395 | if self.channels is not None: | |
|
2396 | self.nplots = len(self.channels) | |
|
2397 | self.nrows = len(self.channels) | |
|
2398 | else: | |
|
2399 | self.nplots = self.data.shape(self.CODE)[0] | |
|
2400 | self.nrows = self.nplots | |
|
2401 | self.channels = list(range(self.nplots)) | |
|
2402 | #print("JERE") | |
|
2403 | #exit(1) | |
|
2404 | #print("channels",self.channels) | |
|
2405 | #print("que saldra", self.data.shape(self.CODE)[0]) | |
|
2406 | #self.titles = ['{} Channel {}'.format(self.CODE.upper(), x) for x in range(self.nrows)] | |
|
2407 | ||
|
2408 | #print("self.titles",self.titles) | |
|
2409 | if self.CODE == 'Power': | |
|
2410 | self.cb_label = r'Power (dB)' | |
|
2411 | elif self.CODE == 'Doppler': | |
|
2412 | self.cb_label = r'Velocity (m/s)' | |
|
2413 | self.colorbar=True | |
|
2414 | self.width =8 | |
|
2415 | self.height =8 | |
|
2416 | self.ini =0 | |
|
2417 | self.len_azi =0 | |
|
2418 | self.buffer_ini = None | |
|
2419 | self.buffer_ele = None | |
|
2420 | self.plots_adjust.update({'wspace': 0.4, 'hspace':0.4, 'left': 0.1, 'right': 0.9, 'bottom': 0.08}) | |
|
2421 | self.flag =0 | |
|
2422 | self.indicador= 0 | |
|
2423 | self.last_data_ele = None | |
|
2424 | self.val_mean = None | |
|
2425 | ||
|
2426 | def update(self, dataOut): | |
|
2427 | ||
|
2428 | if self.mode == 'Power': | |
|
2429 | self.CODE = 'Power' | |
|
2430 | elif self.mode == 'Doppler': | |
|
2431 | self.CODE = 'Doppler' | |
|
2432 | ||
|
2433 | data = {} | |
|
2434 | meta = {} | |
|
2435 | if hasattr(dataOut, 'dataPP_POWER'): | |
|
2436 | factor = 1 | |
|
2437 | if hasattr(dataOut, 'nFFTPoints'): | |
|
2438 | factor = dataOut.normFactor | |
|
2439 | ||
|
2440 | if self.CODE == 'Power': | |
|
2441 | data[self.CODE] = 10*numpy.log10(dataOut.data_360_Power/(factor)) | |
|
2442 | elif self.CODE == 'Doppler': | |
|
2443 | data[self.CODE] = dataOut.data_360_Velocity/(factor) | |
|
2444 | ||
|
2445 | data['azi'] = dataOut.data_azi | |
|
2446 | data['ele'] = dataOut.data_ele | |
|
2447 | ||
|
2448 | return data, meta | |
|
2449 | ||
|
2450 | def plot(self): | |
|
2451 | thisDatetime = datetime.datetime.utcfromtimestamp(self.data.times[-1]).strftime('%Y-%m-%d %H:%M:%S') | |
|
2452 | data = self.data[-1] | |
|
2453 | r = self.data.yrange | |
|
2454 | delta_height = r[1]-r[0] | |
|
2455 | r_mask = numpy.where(r>=0)[0] | |
|
2456 | self.r_mask =r_mask | |
|
2457 | r = numpy.arange(len(r_mask))*delta_height | |
|
2458 | self.y = 2*r | |
|
2459 | res = 1 | |
|
2460 | ang_max = self.ang_max | |
|
2461 | ang_min = self.ang_min | |
|
2462 | var_ang =ang_max - ang_min | |
|
2463 | step = (int(var_ang)/(res*data[self.CODE].shape[0])) | |
|
2464 | ||
|
2465 | z = data[self.CODE][self.channels[0]][:,r_mask] | |
|
2466 | ||
|
2467 | #print(z[2,:]) | |
|
2468 | self.titles = [] | |
|
2469 | ||
|
2470 | #exit(1) | |
|
2471 | ||
|
2472 | if self.CODE == 'Power': | |
|
2473 | cmap = 'jet' | |
|
2474 | elif self.CODE == 'Doppler': | |
|
2475 | cmap = 'RdBu' | |
|
2476 | ||
|
2477 | self.ymax = self.ymax if self.ymax else numpy.nanmax(r) | |
|
2478 | self.ymin = self.ymin if self.ymin else numpy.nanmin(r) | |
|
2479 | self.zmax = self.zmax if self.zmax else numpy.nanmax(z) | |
|
2480 | self.zmin = self.zmin if self.zmin else numpy.nanmin(z) | |
|
2481 | ||
|
2482 | #plt.clf() | |
|
2483 | subplots = [121, 122] | |
|
2484 | ||
|
2485 | r, theta = numpy.meshgrid(r, numpy.radians(data['ele']) ) | |
|
2486 | ||
|
2487 | points_cb = 200 | |
|
2488 | mylevs_cbar = list(numpy.linspace(self.zmin,self.zmax,points_cb)) #niveles de la barra de colores | |
|
2489 | ||
|
2490 | for i,ax in enumerate(self.axes): | |
|
2491 | ||
|
2492 | if ax.firsttime: | |
|
2493 | ax.set_xlim(numpy.radians(self.ang_min),numpy.radians(self.ang_max)) | |
|
2494 | ax.plt = ax.contourf(theta, r, z, points_cb, cmap=cmap, vmin=self.zmin, vmax=self.zmax, levels=mylevs_cbar) | |
|
2495 | #print(ax.plt) | |
|
2496 | #exit(1) | |
|
2497 | ''' | |
|
2498 | self.figures[-1].colorbar(plt, orientation="vertical", fraction=0.025, pad=0.07) | |
|
2499 | print(self.figures[0]) | |
|
2500 | print(self.figures) | |
|
2501 | print(plt) | |
|
2502 | print(ax) | |
|
2503 | exit(1) | |
|
2504 | ''' | |
|
2505 | ||
|
2506 | else: | |
|
2507 | ax.set_xlim(numpy.radians(self.ang_min),numpy.radians(self.ang_max)) | |
|
2508 | ax.plt = ax.contourf(theta, r, z, points_cb, cmap=cmap, vmin=self.zmin, vmax=self.zmax, levels=mylevs_cbar) | |
|
2509 | #self.figures[0].colorbar(plt, orientation="vertical", fraction=0.025, pad=0.07) | |
|
2510 | ||
|
2511 | #print(self.titles) | |
|
2512 | if len(self.channels) !=1: | |
|
2513 | self.titles = ['{} Azi: {} Channel {}'.format(self.CODE.upper(), str(round(numpy.mean(data['azi']),2)), x) for x in range(self.nrows)] | |
|
2514 | else: | |
|
2515 | self.titles = ['{} Azi: {} Channel {}'.format(self.CODE.upper(), str(round(numpy.mean(data['azi']),2)), self.channels[0])] | |
|
2516 | #self.titles.append('Azi: {}'.format(str(round(numpy.mean(data['azi']),2)))) | |
|
2517 | #self.titles.append(str(round(numpy.mean(data['azi']),2))) | |
|
2518 | #print(self.titles) | |
|
2519 | #plt.text(1.0, 1.05, str(thisDatetime)+ " Azi: "+str(round(numpy.mean(data['azi']),2)), transform=caax.transAxes, va='bottom',ha='right') | |
|
2520 | #print("***************************self.ini****************************",self.ini) | |
|
2521 | #self.figures[-1].colorbar(plt, orientation="vertical", fraction=0.025, pad=0.07) | |
|
2522 | #self.ini= self.ini+1 |
@@ -394,11 +394,22 class HDFWriter(Operation): | |||
|
394 | 394 | flag = True |
|
395 | 395 | return flag |
|
396 | 396 | |
|
397 | def generalFlag_vRF(self): | |
|
398 | ####rint("GENERALFLAG") | |
|
399 | ||
|
400 | try: | |
|
401 | self.dataOut.flagBlock360Done | |
|
402 | return self.dataOut.flagBlock360Done | |
|
403 | except: | |
|
404 | return 0 | |
|
405 | ||
|
406 | ||
|
397 | 407 | def setup(self, path=None, blocksPerFile=10, metadataList=None, dataList=None, setType=None, description=None,type_data=None,**kwargs): |
|
398 | 408 | self.path = path |
|
399 | 409 | self.blocksPerFile = blocksPerFile |
|
400 | 410 | self.metadataList = metadataList |
|
401 | 411 | self.dataList = [s.strip() for s in dataList] |
|
412 | self.setType = setType | |
|
402 | 413 | if self.mode == "weather": |
|
403 | 414 | self.setType = "weather" |
|
404 | 415 | #---------------------------------------- |
@@ -624,7 +635,7 class HDFWriter(Operation): | |||
|
624 | 635 | return |
|
625 | 636 | |
|
626 | 637 | def writeData(self, fp): |
|
627 | ||
|
638 | print("writing data") | |
|
628 | 639 | if self.description: |
|
629 | 640 | if 'Data' in self.description: |
|
630 | 641 | grp = fp.create_group('Data') |
@@ -671,7 +682,7 class HDFWriter(Operation): | |||
|
671 | 682 | |
|
672 | 683 | def putData(self): |
|
673 | 684 | ###print("**************************PUT DATA***************************************************") |
|
674 |
if (self.blockIndex == self.blocksPerFile) or self.timeFlag() |
|
|
685 | if (self.blockIndex == self.blocksPerFile) or self.timeFlag():# or self.generalFlag_vRF(): | |
|
675 | 686 | self.closeFile() |
|
676 | 687 | self.setNextFile() |
|
677 | 688 |
@@ -4,6 +4,7 must be used in plotting and writing operations to allow to run as an | |||
|
4 | 4 | external process. |
|
5 | 5 | ''' |
|
6 | 6 | |
|
7 | import os | |
|
7 | 8 | import inspect |
|
8 | 9 | import zmq |
|
9 | 10 | import time |
@@ -13,6 +14,7 from threading import Thread | |||
|
13 | 14 | from multiprocessing import Process, Queue |
|
14 | 15 | from schainpy.utils import log |
|
15 | 16 | |
|
17 | QUEUE_SIZE = int(os.environ.get('QUEUE_MAX_SIZE', '10')) | |
|
16 | 18 | |
|
17 | 19 | class ProcessingUnit(object): |
|
18 | 20 | ''' |
@@ -178,7 +180,7 def MPDecorator(BaseClass): | |||
|
178 | 180 | |
|
179 | 181 | self.start_time = time.time() |
|
180 | 182 | self.err_queue = args[3] |
|
181 |
self.queue = Queue(maxsize= |
|
|
183 | self.queue = Queue(maxsize=QUEUE_SIZE) | |
|
182 | 184 | self.myrun = BaseClass.run |
|
183 | 185 | |
|
184 | 186 | def run(self): |
@@ -4509,7 +4509,7 class Block360_vRF2(Operation): | |||
|
4509 | 4509 | __nch = 0 |
|
4510 | 4510 | __nHeis = 0 |
|
4511 | 4511 | index = 0 |
|
4512 |
mode = |
|
|
4512 | mode = None | |
|
4513 | 4513 | |
|
4514 | 4514 | def __init__(self,**kwargs): |
|
4515 | 4515 | Operation.__init__(self,**kwargs) |
@@ -4534,28 +4534,24 class Block360_vRF2(Operation): | |||
|
4534 | 4534 | self.__buffer = [] |
|
4535 | 4535 | self.__buffer2 = [] |
|
4536 | 4536 | self.__buffer3 = [] |
|
4537 | self.__buffer4 = [] | |
|
4537 | 4538 | |
|
4538 | 4539 | def putData(self,data,mode): |
|
4539 | 4540 | ''' |
|
4540 | 4541 | Add a profile to he __buffer and increase in one the __profiel Index |
|
4541 | 4542 | ''' |
|
4542 | #print("line 4049",data.dataPP_POW.shape,data.dataPP_POW[:10]) | |
|
4543 | #print("line 4049",data.azimuth.shape,data.azimuth) | |
|
4543 | ||
|
4544 | 4544 | if self.mode==0: |
|
4545 | 4545 | self.__buffer.append(data.dataPP_POWER)# PRIMER MOMENTO |
|
4546 | 4546 | if self.mode==1: |
|
4547 | 4547 | self.__buffer.append(data.data_pow) |
|
4548 | #print("me casi",self.index,data.azimuth[self.index]) | |
|
4549 | #print(self.__profIndex, self.index , data.azimuth[self.index] ) | |
|
4550 | #print("magic",data.profileIndex) | |
|
4551 | #print(data.azimuth[self.index]) | |
|
4552 | #print("index",self.index) | |
|
4553 | 4548 | |
|
4554 | #####self.__buffer2[self.__profIndex] = data.azimuth[self.index] | |
|
4549 | self.__buffer4.append(data.dataPP_DOP) | |
|
4550 | ||
|
4555 | 4551 | self.__buffer2.append(data.azimuth) |
|
4556 | 4552 | self.__buffer3.append(data.elevation) |
|
4557 | 4553 | self.__profIndex += 1 |
|
4558 | #print("q pasa") | |
|
4554 | ||
|
4559 | 4555 | return numpy.array(self.__buffer3) #Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β· Remove DCΒ·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β· |
|
4560 | 4556 | |
|
4561 | 4557 | def pushData(self,data): |
@@ -4563,98 +4559,233 class Block360_vRF2(Operation): | |||
|
4563 | 4559 | Return the PULSEPAIR and the profiles used in the operation |
|
4564 | 4560 | Affected : self.__profileIndex |
|
4565 | 4561 | ''' |
|
4566 | #print("pushData") | |
|
4567 | 4562 | |
|
4568 | data_360 = numpy.array(self.__buffer).transpose(1,0,2) | |
|
4563 | data_360_Power = numpy.array(self.__buffer).transpose(1,0,2) | |
|
4564 | data_360_Velocity = numpy.array(self.__buffer4).transpose(1,0,2) | |
|
4569 | 4565 | data_p = numpy.array(self.__buffer2) |
|
4570 | 4566 | data_e = numpy.array(self.__buffer3) |
|
4571 | 4567 | n = self.__profIndex |
|
4572 | 4568 | |
|
4573 | 4569 | self.__buffer = [] |
|
4570 | self.__buffer4 = [] | |
|
4574 | 4571 | self.__buffer2 = [] |
|
4575 | 4572 | self.__buffer3 = [] |
|
4576 | 4573 | self.__profIndex = 0 |
|
4577 | #print("pushData") | |
|
4578 | return data_360,n,data_p,data_e | |
|
4574 | return data_360_Power,data_360_Velocity,n,data_p,data_e | |
|
4579 | 4575 | |
|
4580 | 4576 | |
|
4581 | 4577 | def byProfiles(self,dataOut): |
|
4582 | 4578 | |
|
4583 | 4579 | self.__dataReady = False |
|
4584 |
data_360 = |
|
|
4580 | data_360_Power = [] | |
|
4581 | data_360_Velocity = [] | |
|
4585 | 4582 | data_p = None |
|
4586 | 4583 | data_e = None |
|
4587 | #print("dataOu",dataOut.dataPP_POW) | |
|
4588 | 4584 | |
|
4589 | 4585 | elevations = self.putData(data=dataOut,mode = self.mode) |
|
4590 | ##### print("profIndex",self.__profIndex) | |
|
4591 | ||
|
4592 | 4586 | |
|
4593 | 4587 | if self.__profIndex > 1: |
|
4594 | 4588 | case_flag = self.checkcase(elevations) |
|
4595 | 4589 | |
|
4596 | 4590 | if case_flag == 0: #Subida |
|
4597 | #Se borra el dato anterior para liberar buffer y comparar el dato actual con el siguiente | |
|
4591 | ||
|
4598 | 4592 | if len(self.__buffer) == 2: #Cuando estΓ‘ de subida |
|
4593 | #Se borra el dato anterior para liberar buffer y comparar el dato actual con el siguiente | |
|
4599 | 4594 | self.__buffer.pop(0) #Erase first data |
|
4600 | 4595 | self.__buffer2.pop(0) |
|
4601 | 4596 | self.__buffer3.pop(0) |
|
4597 | self.__buffer4.pop(0) | |
|
4602 | 4598 | self.__profIndex -= 1 |
|
4603 | 4599 | else: #Cuando ha estado de bajada y ha vuelto a subir |
|
4604 | #print("else",self.__buffer3) | |
|
4600 | #Se borra el ΓΊltimo dato | |
|
4605 | 4601 | self.__buffer.pop() #Erase last data |
|
4606 | 4602 | self.__buffer2.pop() |
|
4607 | 4603 | self.__buffer3.pop() |
|
4608 | data_360,n,data_p,data_e = self.pushData(data=dataOut) | |
|
4609 | #print(data_360.shape) | |
|
4610 | #print(data_e.shape) | |
|
4611 | #exit(1) | |
|
4604 | self.__buffer4.pop() | |
|
4605 | data_360_Power,data_360_Velocity,n,data_p,data_e = self.pushData(data=dataOut) | |
|
4606 | ||
|
4612 | 4607 | self.__dataReady = True |
|
4608 | ||
|
4609 | return data_360_Power,data_360_Velocity,data_p,data_e | |
|
4610 | ||
|
4611 | ||
|
4612 | def blockOp(self, dataOut, datatime= None): | |
|
4613 | if self.__initime == None: | |
|
4614 | self.__initime = datatime | |
|
4615 | data_360_Power,data_360_Velocity,data_p,data_e = self.byProfiles(dataOut) | |
|
4616 | self.__lastdatatime = datatime | |
|
4617 | ||
|
4618 | avgdatatime = self.__initime | |
|
4619 | if self.n==1: | |
|
4620 | avgdatatime = datatime | |
|
4621 | deltatime = datatime - self.__lastdatatime | |
|
4622 | self.__initime = datatime | |
|
4623 | return data_360_Power,data_360_Velocity,avgdatatime,data_p,data_e | |
|
4624 | ||
|
4625 | def checkcase(self,data_ele): | |
|
4626 | #print(data_ele) | |
|
4627 | start = data_ele[-2] | |
|
4628 | end = data_ele[-1] | |
|
4629 | diff_angle = (end-start) | |
|
4630 | len_ang=len(data_ele) | |
|
4631 | ||
|
4632 | if diff_angle > 0: #Subida | |
|
4633 | return 0 | |
|
4634 | ||
|
4635 | def run(self, dataOut,mode='Power',**kwargs): | |
|
4636 | #print("BLOCK 360 HERE WE GO MOMENTOS") | |
|
4637 | #print("Block 360") | |
|
4638 | dataOut.mode = mode | |
|
4639 | ||
|
4640 | if not self.isConfig: | |
|
4641 | self.setup(dataOut = dataOut ,mode= mode ,**kwargs) | |
|
4642 | self.isConfig = True | |
|
4643 | ||
|
4644 | ||
|
4645 | data_360_Power, data_360_Velocity, avgdatatime,data_p,data_e = self.blockOp(dataOut, dataOut.utctime) | |
|
4646 | ||
|
4647 | ||
|
4648 | dataOut.flagNoData = True | |
|
4649 | ||
|
4650 | ||
|
4651 | if self.__dataReady: | |
|
4652 | dataOut.data_360_Power = data_360_Power # S | |
|
4653 | dataOut.data_360_Velocity = data_360_Velocity | |
|
4654 | dataOut.data_azi = data_p | |
|
4655 | dataOut.data_ele = data_e | |
|
4656 | dataOut.utctime = avgdatatime | |
|
4657 | dataOut.flagNoData = False | |
|
4658 | ||
|
4659 | return dataOut | |
|
4660 | ||
|
4661 | class Block360_vRF3(Operation): | |
|
4662 | ''' | |
|
4663 | ''' | |
|
4664 | isConfig = False | |
|
4665 | __profIndex = 0 | |
|
4666 | __initime = None | |
|
4667 | __lastdatatime = None | |
|
4668 | __buffer = None | |
|
4669 | __dataReady = False | |
|
4670 | n = None | |
|
4671 | __nch = 0 | |
|
4672 | __nHeis = 0 | |
|
4673 | index = 0 | |
|
4674 | mode = None | |
|
4675 | ||
|
4676 | def __init__(self,**kwargs): | |
|
4677 | Operation.__init__(self,**kwargs) | |
|
4678 | ||
|
4679 | def setup(self, dataOut, n = None, mode = None): | |
|
4680 | ''' | |
|
4681 | n= Numero de PRF's de entrada | |
|
4682 | ''' | |
|
4683 | self.__initime = None | |
|
4684 | self.__lastdatatime = 0 | |
|
4685 | self.__dataReady = False | |
|
4686 | self.__buffer = 0 | |
|
4687 | self.__buffer_1D = 0 | |
|
4688 | #self.__profIndex = 0 | |
|
4689 | self.index = 0 | |
|
4690 | self.__nch = dataOut.nChannels | |
|
4691 | self.__nHeis = dataOut.nHeights | |
|
4692 | ||
|
4693 | self.mode = mode | |
|
4694 | #print("self.mode",self.mode) | |
|
4695 | #print("nHeights") | |
|
4696 | self.__buffer = [] | |
|
4697 | self.__buffer2 = [] | |
|
4698 | self.__buffer3 = [] | |
|
4699 | self.__buffer4 = [] | |
|
4700 | ||
|
4701 | def putData(self,data,mode): | |
|
4702 | ''' | |
|
4703 | Add a profile to he __buffer and increase in one the __profiel Index | |
|
4704 | ''' | |
|
4705 | ||
|
4706 | if self.mode==0: | |
|
4707 | self.__buffer.append(data.dataPP_POWER)# PRIMER MOMENTO | |
|
4708 | if self.mode==1: | |
|
4709 | self.__buffer.append(data.data_pow) | |
|
4710 | ||
|
4711 | self.__buffer4.append(data.dataPP_DOP) | |
|
4712 | ||
|
4713 | self.__buffer2.append(data.azimuth) | |
|
4714 | self.__buffer3.append(data.elevation) | |
|
4715 | self.__profIndex += 1 | |
|
4716 | ||
|
4717 | return numpy.array(self.__buffer3) #Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β· Remove DCΒ·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β·Β· | |
|
4718 | ||
|
4719 | def pushData(self,data): | |
|
4613 | 4720 | ''' |
|
4614 | elif elevations[-1]<0.: | |
|
4615 | if len(self.__buffer) == 2: | |
|
4721 | Return the PULSEPAIR and the profiles used in the operation | |
|
4722 | Affected : self.__profileIndex | |
|
4723 | ''' | |
|
4724 | ||
|
4725 | data_360_Power = numpy.array(self.__buffer).transpose(1,0,2) | |
|
4726 | data_360_Velocity = numpy.array(self.__buffer4).transpose(1,0,2) | |
|
4727 | data_p = numpy.array(self.__buffer2) | |
|
4728 | data_e = numpy.array(self.__buffer3) | |
|
4729 | n = self.__profIndex | |
|
4730 | ||
|
4731 | self.__buffer = [] | |
|
4732 | self.__buffer4 = [] | |
|
4733 | self.__buffer2 = [] | |
|
4734 | self.__buffer3 = [] | |
|
4735 | self.__profIndex = 0 | |
|
4736 | return data_360_Power,data_360_Velocity,n,data_p,data_e | |
|
4737 | ||
|
4738 | ||
|
4739 | def byProfiles(self,dataOut): | |
|
4740 | ||
|
4741 | self.__dataReady = False | |
|
4742 | data_360_Power = [] | |
|
4743 | data_360_Velocity = [] | |
|
4744 | data_p = None | |
|
4745 | data_e = None | |
|
4746 | ||
|
4747 | elevations = self.putData(data=dataOut,mode = self.mode) | |
|
4748 | ||
|
4749 | if self.__profIndex > 1: | |
|
4750 | case_flag = self.checkcase(elevations) | |
|
4751 | ||
|
4752 | if case_flag == 0: #Subida | |
|
4753 | ||
|
4754 | if len(self.__buffer) == 2: #Cuando estΓ‘ de subida | |
|
4755 | #Se borra el dato anterior para liberar buffer y comparar el dato actual con el siguiente | |
|
4616 | 4756 | self.__buffer.pop(0) #Erase first data |
|
4617 | 4757 | self.__buffer2.pop(0) |
|
4618 | 4758 | self.__buffer3.pop(0) |
|
4759 | self.__buffer4.pop(0) | |
|
4619 | 4760 | self.__profIndex -= 1 |
|
4620 | else: | |
|
4761 | else: #Cuando ha estado de bajada y ha vuelto a subir | |
|
4762 | #Se borra el ΓΊltimo dato | |
|
4621 | 4763 | self.__buffer.pop() #Erase last data |
|
4622 | 4764 | self.__buffer2.pop() |
|
4623 | 4765 | self.__buffer3.pop() |
|
4624 | data_360,n,data_p,data_e = self.pushData(data=dataOut) | |
|
4625 | self.__dataReady = True | |
|
4626 | ''' | |
|
4627 | ||
|
4766 | self.__buffer4.pop() | |
|
4767 | data_360_Power,data_360_Velocity,n,data_p,data_e = self.pushData(data=dataOut) | |
|
4628 | 4768 | |
|
4629 | ''' | |
|
4630 | if self.__profIndex == self.n: | |
|
4631 | data_360,n,data_p,data_e = self.pushData(data=dataOut) | |
|
4632 | 4769 | self.__dataReady = True |
|
4633 | ''' | |
|
4634 | 4770 | |
|
4635 | return data_360,data_p,data_e | |
|
4771 | return data_360_Power,data_360_Velocity,data_p,data_e | |
|
4636 | 4772 | |
|
4637 | 4773 | |
|
4638 | 4774 | def blockOp(self, dataOut, datatime= None): |
|
4639 | 4775 | if self.__initime == None: |
|
4640 | 4776 | self.__initime = datatime |
|
4641 | data_360,data_p,data_e = self.byProfiles(dataOut) | |
|
4777 | data_360_Power,data_360_Velocity,data_p,data_e = self.byProfiles(dataOut) | |
|
4642 | 4778 | self.__lastdatatime = datatime |
|
4643 | 4779 | |
|
4644 | if data_360 is None: | |
|
4645 | return None, None,None,None | |
|
4646 | ||
|
4647 | ||
|
4648 | 4780 | avgdatatime = self.__initime |
|
4649 | 4781 | if self.n==1: |
|
4650 | 4782 | avgdatatime = datatime |
|
4651 | 4783 | deltatime = datatime - self.__lastdatatime |
|
4652 | 4784 | self.__initime = datatime |
|
4653 |
|
|
|
4654 | return data_360,avgdatatime,data_p,data_e | |
|
4785 | return data_360_Power,data_360_Velocity,avgdatatime,data_p,data_e | |
|
4655 | 4786 | |
|
4656 | 4787 | def checkcase(self,data_ele): |
|
4657 | print(data_ele) | |
|
4788 | #print(data_ele) | |
|
4658 | 4789 | start = data_ele[-2] |
|
4659 | 4790 | end = data_ele[-1] |
|
4660 | 4791 | diff_angle = (end-start) |
@@ -4663,46 +4794,28 class Block360_vRF2(Operation): | |||
|
4663 | 4794 | if diff_angle > 0: #Subida |
|
4664 | 4795 | return 0 |
|
4665 | 4796 | |
|
4666 |
def run(self, dataOut, |
|
|
4797 | def run(self, dataOut,mode='Power',**kwargs): | |
|
4667 | 4798 | #print("BLOCK 360 HERE WE GO MOMENTOS") |
|
4668 | print("Block 360") | |
|
4799 | #print("Block 360") | |
|
4800 | dataOut.mode = mode | |
|
4669 | 4801 | |
|
4670 | #exit(1) | |
|
4671 | 4802 | if not self.isConfig: |
|
4672 | ||
|
4673 | print(n) | |
|
4674 | 4803 | self.setup(dataOut = dataOut ,mode= mode ,**kwargs) |
|
4675 | ####self.index = 0 | |
|
4676 | #print("comova",self.isConfig) | |
|
4677 | 4804 | self.isConfig = True |
|
4678 | ####if self.index==dataOut.azimuth.shape[0]: | |
|
4679 | #### self.index=0 | |
|
4680 | ||
|
4681 | data_360, avgdatatime,data_p,data_e = self.blockOp(dataOut, dataOut.utctime) | |
|
4682 | 4805 | |
|
4683 | 4806 | |
|
4807 | data_360_Power, data_360_Velocity, avgdatatime,data_p,data_e = self.blockOp(dataOut, dataOut.utctime) | |
|
4684 | 4808 | |
|
4685 | 4809 | |
|
4686 | 4810 | dataOut.flagNoData = True |
|
4687 | 4811 | |
|
4812 | ||
|
4688 | 4813 | if self.__dataReady: |
|
4689 | dataOut.data_360 = data_360 # S | |
|
4690 | #print("DATA 360") | |
|
4691 | #print(dataOut.data_360) | |
|
4692 | #print("---------------------------------------------------------------------------------") | |
|
4693 | print("---------------------------DATAREADY---------------------------------------------") | |
|
4694 | #print("---------------------------------------------------------------------------------") | |
|
4695 | #print("data_360",dataOut.data_360.shape) | |
|
4696 | print(data_e) | |
|
4697 | #exit(1) | |
|
4814 | dataOut.data_360_Power = data_360_Power # S | |
|
4815 | dataOut.data_360_Velocity = data_360_Velocity | |
|
4698 | 4816 | dataOut.data_azi = data_p |
|
4699 | 4817 | dataOut.data_ele = data_e |
|
4700 | ###print("azi: ",dataOut.data_azi) | |
|
4701 | #print("ele: ",dataOut.data_ele) | |
|
4702 | #print("jroproc_parameters",data_p[0],data_p[-1])#,data_360.shape,avgdatatime) | |
|
4703 | 4818 | dataOut.utctime = avgdatatime |
|
4704 | ||
|
4705 | ||
|
4706 | ||
|
4707 | 4819 | dataOut.flagNoData = False |
|
4820 | ||
|
4708 | 4821 | return dataOut |
General Comments 0
You need to be logged in to leave comments.
Login now