##// END OF EJS Templates
GUI: Bug fixed when *Read from header* is selected...
Miguel Valdez -
r655:9d147099e1e8
parent child
Show More
@@ -1,5865 +1,5866
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 Module implementing MainWindow.
4 4 #+++++++++++++GUI V1++++++++++++++#
5 5 @author: AlexanderValdezPortocarrero ñ_ñ
6 6 """
7 7 import os, sys, time
8 8 import datetime
9 9 import numpy
10 10 import Queue
11 11
12 12 from collections import OrderedDict
13 13 from os.path import expanduser
14 14 from time import sleep
15 15 # from gevent import sleep
16 16
17 17 import ast
18 18
19 19 from PyQt4.QtGui import QMainWindow
20 20 from PyQt4.QtCore import pyqtSignature
21 21 from PyQt4.QtCore import pyqtSignal
22 22 from PyQt4 import QtCore
23 23 from PyQt4 import QtGui
24 24 # from PyQt4.QtCore import QThread
25 25 # from PyQt4.QtCore import QObject, SIGNAL
26 26
27 27 from schainpy.gui.viewer.ui_unitprocess import Ui_UnitProcess
28 28 from schainpy.gui.viewer.ui_ftp import Ui_Ftp
29 29 from schainpy.gui.viewer.ui_mainwindow import Ui_BasicWindow
30 30 from schainpy.controller_api import ControllerThread
31 31 from schainpy.controller import Project
32 32
33 33 from propertiesViewModel import TreeModel, PropertyBuffer
34 34 from parametersModel import ProjectParms
35 35
36 36 from schainpy.gui.figures import tools
37 37
38 38 FIGURES_PATH = tools.get_path()
39 39 TEMPORAL_FILE = ".temp.xml"
40 40
41 41 def isRadarFile(file):
42 42 try:
43 43 year = int(file[1:5])
44 44 doy = int(file[5:8])
45 45 set = int(file[8:11])
46 46 except:
47 47 return 0
48 48
49 49 return 1
50 50
51 51 def isRadarPath(path):
52 52 try:
53 53 year = int(path[1:5])
54 54 doy = int(path[5:8])
55 55 except:
56 56 return 0
57 57
58 58 return 1
59 59
60 60 def isInt(value):
61 61
62 62 try:
63 63 int(value)
64 64 except:
65 65 return 0
66 66
67 67 return 1
68 68
69 69 def isFloat(value):
70 70
71 71 try:
72 72 float(value)
73 73 except:
74 74 return 0
75 75
76 76 return 1
77 77
78 78 def isList(value):
79 79
80 80 x = ast.literal_eval(value)
81 81
82 82 if type(x) in (tuple, list):
83 83 return 1
84 84
85 85 return 0
86 86
87 87 class BasicWindow(QMainWindow, Ui_BasicWindow):
88 88 """
89 89 """
90 90 def __init__(self, parent=None):
91 91 """
92 92
93 93 """
94 94 QMainWindow.__init__(self, parent)
95 95 self.setupUi(self)
96 96 self.__puObjDict = {}
97 97 self.__itemTreeDict = {}
98 98 self.readUnitConfObjList = []
99 99 self.operObjList = []
100 100 self.projecObjView = None
101 101 self.idProject = 0
102 102 # self.idImag = 0
103 103
104 104 self.idImagscope = 0
105 105 self.idImagspectra = 0
106 106 self.idImagcross = 0
107 107 self.idImagrti = 0
108 108 self.idImagcoherence = 0
109 109 self.idImagpower = 0
110 110 self.idImagrtinoise = 0
111 111 self.idImagspectraHeis = 0
112 112 self.idImagrtiHeis = 0
113 113
114 114 self.dataPath = None
115 115 self.online = 0
116 116 self.walk = 0
117 117 self.create = False
118 118 self.selectedItemTree = None
119 119 self.controllerThread = None
120 120 # self.commCtrlPThread = None
121 121 # self.create_figure()
122 122 self.temporalFTP = ftpBuffer()
123 123 self.projectProperCaracteristica = []
124 124 self.projectProperPrincipal = []
125 125 self.projectProperDescripcion = []
126 126 self.volProperCaracteristica = []
127 127 self.volProperPrincipal = []
128 128 self.volProperDescripcion = []
129 129 self.specProperCaracteristica = []
130 130 self.specProperPrincipal = []
131 131 self.specProperDescripcion = []
132 132
133 133 self.specHeisProperCaracteristica = []
134 134 self.specHeisProperPrincipal = []
135 135 self.specHeisProperDescripcion = []
136 136
137 137 # self.pathWorkSpace = './'
138 138
139 139 self.__projectObjDict = {}
140 140 self.__operationObjDict = {}
141 141
142 142 self.__puLocalFolder2FTP = {}
143 143 self.__enable = False
144 144
145 145 # self.create_comm()
146 146 self.create_updating_timer()
147 147 self.setGUIStatus()
148 148
149 149 @pyqtSignature("")
150 150 def on_actionOpen_triggered(self):
151 151 """
152 152 Slot documentation goes here.
153 153 """
154 154 self.openProject()
155 155
156 156 @pyqtSignature("")
157 157 def on_actionCreate_triggered(self):
158 158 """
159 159 Slot documentation goes here.
160 160 """
161 161 self.setInputsProject_View()
162 162 self.create = True
163 163
164 164 @pyqtSignature("")
165 165 def on_actionSave_triggered(self):
166 166 """
167 167 Slot documentation goes here.
168 168 """
169 169 self.saveProject()
170 170
171 171 @pyqtSignature("")
172 172 def on_actionClose_triggered(self):
173 173 """
174 174 Slot documentation goes here.
175 175 """
176 176 self.close()
177 177
178 178 @pyqtSignature("")
179 179 def on_actionStart_triggered(self):
180 180 """
181 181 """
182 182 self.playProject()
183 183
184 184 @pyqtSignature("")
185 185 def on_actionPause_triggered(self):
186 186 """
187 187 """
188 188 self.pauseProject()
189 189
190 190 @pyqtSignature("")
191 191 def on_actionStop_triggered(self):
192 192 """
193 193 """
194 194 self.stopProject()
195 195
196 196 @pyqtSignature("")
197 197 def on_actionAbout_triggered(self):
198 198 """
199 199 """
200 200 self.aboutEvent()
201 201
202 202 @pyqtSignature("")
203 203 def on_actionFTP_triggered(self):
204 204 """
205 205 """
206 206 self.configFTPWindowObj = Ftp(self)
207 207
208 208 if not self.temporalFTP.create:
209 209 self.temporalFTP.setwithoutconfiguration()
210 210
211 211 self.configFTPWindowObj.setParmsfromTemporal(self.temporalFTP.server,
212 212 self.temporalFTP.remotefolder,
213 213 self.temporalFTP.username,
214 214 self.temporalFTP.password,
215 215 self.temporalFTP.ftp_wei,
216 216 self.temporalFTP.exp_code,
217 217 self.temporalFTP.sub_exp_code,
218 218 self.temporalFTP.plot_pos)
219 219
220 220 self.configFTPWindowObj.show()
221 221 self.configFTPWindowObj.closed.connect(self.createFTPConfig)
222 222
223 223 def createFTPConfig(self):
224 224
225 225 if not self.configFTPWindowObj.create:
226 226 self.console.clear()
227 227 self.console.append("There is no FTP configuration")
228 228 return
229 229
230 230 self.console.append("Push Ok in Spectra view to Add FTP Configuration")
231 231
232 232 server, remotefolder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos = self.configFTPWindowObj.getParmsFromFtpWindow()
233 233 self.temporalFTP.save(server=server,
234 234 remotefolder=remotefolder,
235 235 username=username,
236 236 password=password,
237 237 ftp_wei=ftp_wei,
238 238 exp_code=exp_code,
239 239 sub_exp_code=sub_exp_code,
240 240 plot_pos=plot_pos)
241 241
242 242 @pyqtSignature("")
243 243 def on_actionOpenToolbar_triggered(self):
244 244 """
245 245 Slot documentation goes here.
246 246 """
247 247 self.openProject()
248 248
249 249 @pyqtSignature("")
250 250 def on_actionCreateToolbar_triggered(self):
251 251 """
252 252 Slot documentation goes here.
253 253 """
254 254 self.setInputsProject_View()
255 255 self.create = True
256 256
257 257 @pyqtSignature("")
258 258 def on_actionAddPU_triggered(self):
259 259 if len(self.__projectObjDict) == 0:
260 260 outputstr = "First Create a Project then add Processing Unit"
261 261 self.console.clear()
262 262 self.console.append(outputstr)
263 263 return 0
264 264 else:
265 265 self.addPUWindow()
266 266 self.console.clear()
267 267 self.console.append("Please, Choose the type of Processing Unit")
268 268 self.console.append("If your Datatype is rawdata, you will start with processing unit Type Voltage")
269 269 self.console.append("If your Datatype is pdata, you will choose between processing unit Type Spectra or Correlation")
270 270 self.console.append("If your Datatype is fits, you will start with processing unit Type SpectraHeis")
271 271
272 272
273 273 @pyqtSignature("")
274 274 def on_actionSaveToolbar_triggered(self):
275 275 """
276 276 Slot documentation goes here.
277 277 """
278 278 self.saveProject()
279 279
280 280 @pyqtSignature("")
281 281 def on_actionStarToolbar_triggered(self):
282 282 """
283 283 Slot documentation goes here.
284 284 """
285 285 self.playProject()
286 286
287 287 @pyqtSignature("")
288 288 def on_actionPauseToolbar_triggered(self):
289 289
290 290 self.pauseProject()
291 291
292 292 @pyqtSignature("")
293 293 def on_actionStopToolbar_triggered(self):
294 294 """
295 295 Slot documentation goes here.
296 296 """
297 297 self.stopProject()
298 298
299 299 @pyqtSignature("int")
300 300 def on_proComReadMode_activated(self, index):
301 301 """
302 302 SELECCION DEL MODO DE LECTURA ON=1, OFF=0
303 303 """
304 304 if index == 0:
305 305 self.online = 0
306 306 self.proDelay.setText("0")
307 307 self.proSet.setText("")
308 308 self.proSet.setEnabled(False)
309 309 self.proDelay.setEnabled(False)
310 310 elif index == 1:
311 311 self.online = 1
312 312 self.proSet.setText("")
313 313 self.proDelay.setText("5")
314 314 self.proSet.setEnabled(True)
315 315 self.proDelay.setEnabled(True)
316 316
317 317 @pyqtSignature("int")
318 318 def on_proComDataType_activated(self, index):
319 319 """
320 320 Voltage or Spectra
321 321 """
322 322 self.labelSet.show()
323 323 self.proSet.show()
324 324
325 325 self.labExpLabel.show()
326 326 self.proExpLabel.show()
327 327
328 328 self.labelIPPKm.hide()
329 329 self.proIPPKm.hide()
330 330
331 331 if index == 0:
332 332 extension = '.r'
333 333 elif index == 1:
334 334 extension = '.pdata'
335 335 elif index == 2:
336 336 extension = '.fits'
337 337 elif index == 3:
338 338 extension = '.hdf5'
339 339
340 340 self.labelIPPKm.show()
341 341 self.proIPPKm.show()
342 342
343 343 self.labelSet.hide()
344 344 self.proSet.hide()
345 345
346 346 self.labExpLabel.hide()
347 347 self.proExpLabel.hide()
348 348
349 349 self.proDataType.setText(extension)
350 350
351 351 @pyqtSignature("int")
352 352 def on_proComWalk_activated(self, index):
353 353 """
354 354
355 355 """
356 356 if index == 0:
357 357 self.walk = 0
358 358 elif index == 1:
359 359 self.walk = 1
360 360
361 361 @pyqtSignature("")
362 362 def on_proToolPath_clicked(self):
363 363 """
364 364 Choose your path
365 365 """
366 366
367 367 current_dpath = './'
368 368 if self.dataPath:
369 369 current_dpath = self.dataPath
370 370
371 371 datapath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', current_dpath, QtGui.QFileDialog.ShowDirsOnly))
372 372
373 373 #If it was canceled
374 374 if not datapath:
375 375 return
376 376
377 377 #If any change was done
378 378 if datapath == self.dataPath:
379 379 return
380 380
381 381 self.proDataPath.setText(datapath)
382 382
383 383 self.actionStart.setEnabled(False)
384 384 self.actionStarToolbar.setEnabled(False)
385 385 self.proOk.setEnabled(False)
386 386
387 387 self.proComStartDate.clear()
388 388 self.proComEndDate.clear()
389 389
390 390 if not os.path.exists(datapath):
391 391
392 392 self.console.clear()
393 393 self.console.append("Write a valid path")
394 394 return
395 395
396 396 self.dataPath = datapath
397 397
398 398 self.console.clear()
399 399 self.console.append("Select the read mode and press 'load button'")
400 400
401 401
402 402 @pyqtSignature("")
403 403 def on_proLoadButton_clicked(self):
404 404
405 405 self.console.clear()
406 406
407 407 # if not self.getSelectedProjectObj():
408 408 # self.console.append("Please select a project before load files")
409 409 # return
410 410
411 411 parameter_list = self.checkInputsProject()
412 412
413 413 if not parameter_list[0]:
414 414 return
415 415
416 416 parms_ok, project_name, datatype, ext, data_path, read_mode, delay, walk, set, expLabel = parameter_list
417 417
418 418 if read_mode == "Offline":
419 419 self.proComStartDate.clear()
420 420 self.proComEndDate.clear()
421 421 self.proComStartDate.setEnabled(True)
422 422 self.proComEndDate.setEnabled(True)
423 423 self.proStartTime.setEnabled(True)
424 424 self.proEndTime.setEnabled(True)
425 425 self.frame_2.setEnabled(True)
426 426
427 427 if read_mode == "Online":
428 428 self.proComStartDate.addItem("1960/01/30")
429 429 self.proComEndDate.addItem("2018/12/31")
430 430 self.proComStartDate.setEnabled(False)
431 431 self.proComEndDate.setEnabled(False)
432 432 self.proStartTime.setEnabled(False)
433 433 self.proEndTime.setEnabled(False)
434 434 self.frame_2.setEnabled(True)
435 435
436 436 self.loadDays(data_path, ext, walk, expLabel)
437 437
438 438 @pyqtSignature("int")
439 439 def on_proComStartDate_activated(self, index):
440 440 """
441 441 SELECCION DEL RANGO DE FECHAS -START DATE
442 442 """
443 443 stopIndex = self.proComEndDate.count() - self.proComEndDate.currentIndex() - 1
444 444
445 445 self.proComEndDate.clear()
446 446 for i in self.dateList[index:]:
447 447 self.proComEndDate.addItem(i)
448 448
449 449 if self.proComEndDate.count() - stopIndex - 1 >= 0:
450 450 self.proComEndDate.setCurrentIndex(self.proComEndDate.count() - stopIndex - 1)
451 451 else:
452 452 self.proComEndDate.setCurrentIndex(self.proComEndDate.count() - 1)
453 453
454 454 @pyqtSignature("int")
455 455 def on_proComEndDate_activated(self, index):
456 456 """
457 457 SELECCION DEL RANGO DE FECHAS-END DATE
458 458 """
459 459 pass
460 460
461 461 @pyqtSignature("")
462 462 def on_proOk_clicked(self):
463 463 """
464 464 Añade al Obj XML de Projecto, name,datatype,date,time,readmode,wait,etc, crea el readUnitProcess del archivo xml.
465 465 Prepara la configuración del diágrama del Arbol del treeView numero 2
466 466 """
467 467
468 468 self.actionStart.setEnabled(False)
469 469 self.actionStarToolbar.setEnabled(False)
470 470
471 471 self.console.clear()
472 472
473 473 if self.create:
474 474
475 475 projectId = self.__getNewProjectId()
476 476
477 477 if not projectId:
478 478 return 0
479 479
480 480 projectObjView = self.createProjectView(projectId)
481 481
482 482 if not projectObjView:
483 483 return 0
484 484
485 485 self.create = False
486 486
487 487 readUnitObj = self.createReadUnitView(projectObjView)
488 488
489 489 if not readUnitObj:
490 490 return 0
491 491
492 492 else:
493 493 projectObjView = self.updateProjectView()
494 494
495 495 if not projectObjView:
496 496 return 0
497 497
498 498 projectId = projectObjView.getId()
499 499 idReadUnit = projectObjView.getReadUnitId()
500 500 readUnitObj = self.updateReadUnitView(projectObjView, idReadUnit)
501 501
502 502 if not readUnitObj:
503 503 return 0
504 504
505 505 self.__itemTreeDict[projectId].setText(projectObjView.name)
506 506 # Project Properties
507 507 self.refreshProjectProperties(projectObjView)
508 508 # Disable tabProject after finish the creation
509 509
510 510 self.actionStart.setEnabled(True)
511 511 self.actionStarToolbar.setEnabled(True)
512 512 self.console.clear()
513 513 self.console.append("The project parameters were validated")
514 514
515 515 return 1
516 516
517 517 @pyqtSignature("")
518 518 def on_proClear_clicked(self):
519 519
520 520 self.console.clear()
521 521
522 522 @pyqtSignature("int")
523 523 def on_volOpCebChannels_stateChanged(self, p0):
524 524 """
525 525 Check Box habilita operaciones de Seleccin de Canales
526 526 """
527 527 if p0 == 2:
528 528 self.volOpComChannels.setEnabled(True)
529 529 self.volOpChannel.setEnabled(True)
530 530
531 531 if p0 == 0:
532 532 self.volOpComChannels.setEnabled(False)
533 533 self.volOpChannel.setEnabled(False)
534 534 self.volOpChannel.clear()
535 535
536 536 @pyqtSignature("int")
537 537 def on_volOpCebHeights_stateChanged(self, p0):
538 538 """
539 539 Check Box habilita operaciones de Seleccin de Alturas
540 540 """
541 541 if p0 == 2:
542 542 self.volOpHeights.setEnabled(True)
543 543 self.volOpComHeights.setEnabled(True)
544 544
545 545 if p0 == 0:
546 546 self.volOpHeights.setEnabled(False)
547 547 self.volOpHeights.clear()
548 548 self.volOpComHeights.setEnabled(False)
549 549
550 550 @pyqtSignature("int")
551 551 def on_volOpCebFilter_stateChanged(self, p0):
552 552 """
553 553 Name='Decoder', optype='other'
554 554 """
555 555 if p0 == 2:
556 556 self.volOpFilter.setEnabled(True)
557 557
558 558 if p0 == 0:
559 559 self.volOpFilter.setEnabled(False)
560 560 self.volOpFilter.clear()
561 561
562 562 @pyqtSignature("int")
563 563 def on_volOpCebProfile_stateChanged(self, p0):
564 564 """
565 565 Check Box habilita ingreso del rango de Perfiles
566 566 """
567 567 if p0 == 2:
568 568 self.volOpComProfile.setEnabled(True)
569 569 self.volOpProfile.setEnabled(True)
570 570
571 571 if p0 == 0:
572 572 self.volOpComProfile.setEnabled(False)
573 573 self.volOpProfile.setEnabled(False)
574 574 self.volOpProfile.clear()
575 575
576 576 @pyqtSignature("int")
577 577 def on_volOpComProfile_activated(self, index):
578 578 """
579 579 Check Box habilita ingreso del rango de Perfiles
580 580 """
581 581 #Profile List
582 582 if index == 0:
583 583 self.volOpProfile.setToolTip('List of selected profiles. Example: 0, 1, 2, 3, 4, 5, 6, 7')
584 584
585 585 #Profile Range
586 586 if index == 1:
587 587 self.volOpProfile.setToolTip('Minimum and maximum profile index. Example: 0, 7')
588 588
589 589 #Profile Range List
590 590 if index == 2:
591 591 self.volOpProfile.setToolTip('List of profile ranges. Example: (0, 7), (12, 19), (100, 200)')
592 592
593 593 @pyqtSignature("int")
594 594 def on_volOpCebDecodification_stateChanged(self, p0):
595 595 """
596 596 Check Box habilita
597 597 """
598 598 if p0 == 2:
599 599 self.volOpComCode.setEnabled(True)
600 600 self.volOpComMode.setEnabled(True)
601 601 if p0 == 0:
602 602 self.volOpComCode.setEnabled(False)
603 603 self.volOpComMode.setEnabled(False)
604 604
605 605 @pyqtSignature("int")
606 606 def on_volOpComCode_activated(self, index):
607 607 """
608 608 Check Box habilita ingreso
609 609 """
610 610 if index == 13:
611 611 self.volOpCode.setEnabled(True)
612 612 else:
613 613 self.volOpCode.setEnabled(False)
614 614
615 615 if index == 0:
616 616 code = ''
617 617 self.volOpCode.setText(str(code))
618 618 return
619 619
620 620 if index == 1:
621 621 code = '(1,1,-1)'
622 622 nCode = '1'
623 623 nBaud = '3'
624 624 if index == 2:
625 625 code = '(1,1,-1,1)'
626 626 nCode = '1'
627 627 nBaud = '4'
628 628 if index == 3:
629 629 code = '(1,1,1,-1,1)'
630 630 nCode = '1'
631 631 nBaud = '5'
632 632 if index == 4:
633 633 code = '(1,1,1,-1,-1,1,-1)'
634 634 nCode = '1'
635 635 nBaud = '7'
636 636 if index == 5:
637 637 code = '(1,1,1,-1,-1,-1,1,-1,-1,1,-1)'
638 638 nCode = '1'
639 639 nBaud = '11'
640 640 if index == 6:
641 641 code = '(1,1,1,1,1,-1,-1,1,1,-1,1,-1,1)'
642 642 nCode = '1'
643 643 nBaud = '13'
644 644 if index == 7:
645 645 code = '(1,1,-1,-1,-1,1)'
646 646 nCode = '2'
647 647 nBaud = '3'
648 648 if index == 8:
649 649 code = '(1,1,-1,1,-1,-1,1,-1)'
650 650 nCode = '2'
651 651 nBaud = '4'
652 652 if index == 9:
653 653 code = '(1,1,1,-1,1,-1,-1,-1,1,-1)'
654 654 nCode = '2'
655 655 nBaud = '5'
656 656 if index == 10:
657 657 code = '(1,1,1,-1,-1,1,-1,-1,-1,-1,1,1,-1,1)'
658 658 nCode = '2'
659 659 nBaud = '7'
660 660 if index == 11:
661 661 code = '(1,1,1,-1,-1,-1,1,-1,-1,1,-1,-1 ,-1 ,-1 ,1 ,1,1,-1 ,1 ,1 ,-1 ,1)'
662 662 nCode = '2'
663 663 nBaud = '11'
664 664 if index == 12:
665 665 code = '(1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1)'
666 666 nCode = '2'
667 667 nBaud = '13'
668 668
669 669 code = ast.literal_eval(code)
670 670 nCode = int(nCode)
671 671 nBaud = int(nBaud)
672 672
673 673 code = numpy.asarray(code).reshape((nCode, nBaud)).tolist()
674 674
675 675 self.volOpCode.setText(str(code))
676 676
677 677 @pyqtSignature("int")
678 678 def on_volOpCebFlip_stateChanged(self, p0):
679 679 """
680 680 Check Box habilita ingresode del numero de Integraciones a realizar
681 681 """
682 682 if p0 == 2:
683 683 self.volOpFlip.setEnabled(True)
684 684 if p0 == 0:
685 685 self.volOpFlip.setEnabled(False)
686 686 self.volOpFlip.clear()
687 687
688 688 @pyqtSignature("int")
689 689 def on_volOpCebCohInt_stateChanged(self, p0):
690 690 """
691 691 Check Box habilita ingresode del numero de Integraciones a realizar
692 692 """
693 693 if p0 == 2:
694 694 self.volOpCohInt.setEnabled(True)
695 695 if p0 == 0:
696 696 self.volOpCohInt.setEnabled(False)
697 697 self.volOpCohInt.clear()
698 698
699 699 @pyqtSignature("int")
700 700 def on_volOpCebRadarfrequency_stateChanged(self, p0):
701 701 """
702 702 Check Box habilita ingresode del numero de Integraciones a realizar
703 703 """
704 704 if p0 == 2:
705 705 self.volOpRadarfrequency.setEnabled(True)
706 706 if p0 == 0:
707 707 self.volOpRadarfrequency.clear()
708 708 self.volOpRadarfrequency.setEnabled(False)
709 709
710 710 @pyqtSignature("")
711 711 def on_volOutputToolPath_clicked(self):
712 712 dirOutPath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
713 713 self.volOutputPath.setText(dirOutPath)
714 714
715 715 @pyqtSignature("")
716 716 def on_specOutputToolPath_clicked(self):
717 717 dirOutPath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
718 718 self.specOutputPath.setText(dirOutPath)
719 719
720 720 @pyqtSignature("")
721 721 def on_specHeisOutputToolPath_clicked(self):
722 722 dirOutPath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
723 723 self.specHeisOutputPath.setText(dirOutPath)
724 724
725 725 @pyqtSignature("")
726 726 def on_specHeisOutputMetadaToolPath_clicked(self):
727 727
728 728 filename = str(QtGui.QFileDialog.getOpenFileName(self, "Open text file", self.pathWorkSpace, self.tr("Text Files (*.xml)")))
729 729 self.specHeisOutputMetada.setText(filename)
730 730
731 731 @pyqtSignature("")
732 732 def on_volOpOk_clicked(self):
733 733 """
734 734 BUSCA EN LA LISTA DE OPERACIONES DEL TIPO VOLTAJE Y LES AADE EL PARAMETRO ADECUADO ESPERANDO LA ACEPTACION DEL USUARIO
735 735 PARA AGREGARLO AL ARCHIVO DE CONFIGURACION XML
736 736 """
737 737
738 738 checkPath = False
739 739
740 740 self.actionSaveToolbar.setEnabled(False)
741 741 self.actionStarToolbar.setEnabled(False)
742 742
743 743 self.console.clear()
744 744 self.console.append("Checking input parameters ...")
745 745
746 746 puObj = self.getSelectedItemObj()
747 747 puObj.removeOperations()
748 748
749 749 if self.volOpCebRadarfrequency.isChecked():
750 750 value = str(self.volOpRadarfrequency.text())
751 751 format = 'float'
752 752 name_operation = 'setRadarFrequency'
753 753 name_parameter = 'frequency'
754 754 if not value == "":
755 755 try:
756 756 radarfreq = float(self.volOpRadarfrequency.text())*1e6
757 757 except:
758 758 self.console.clear()
759 759 self.console.append("Invalid value '%s' for Radar Frequency" %value)
760 760 return 0
761 761
762 762 opObj = puObj.addOperation(name=name_operation)
763 763 if not opObj.addParameter(name=name_parameter, value=radarfreq, format=format):
764 764 self.console.append("Invalid value '%s' for %s" %(value,name_parameter))
765 765 return 0
766 766
767 767 if self.volOpCebChannels.isChecked():
768 768 value = str(self.volOpChannel.text())
769 769
770 770 if value == "":
771 771 print "Please fill channel list"
772 772 return 0
773 773
774 774 format = 'intlist'
775 775 if self.volOpComChannels.currentIndex() == 0:
776 776 name_operation = "selectChannels"
777 777 name_parameter = 'channelList'
778 778 else:
779 779 name_operation = "selectChannelsByIndex"
780 780 name_parameter = 'channelIndexList'
781 781
782 782 opObj = puObj.addOperation(name=name_operation)
783 783 if not opObj.addParameter(name=name_parameter, value=value, format=format):
784 784 self.console.append("Invalid value '%s' for %s" %(value,name_parameter))
785 785 return 0
786 786
787 787 if self.volOpCebHeights.isChecked():
788 788 value = str(self.volOpHeights.text())
789 789
790 790 if value == "":
791 791 print "Please fill height range"
792 792 return 0
793 793
794 794 valueList = value.split(',')
795 795 format = 'float'
796 796 if self.volOpComHeights.currentIndex() == 0:
797 797 name_operation = 'selectHeights'
798 798 name_parameter1 = 'minHei'
799 799 name_parameter2 = 'maxHei'
800 800 else:
801 801 name_operation = 'selectHeightsByIndex'
802 802 name_parameter1 = 'minIndex'
803 803 name_parameter2 = 'maxIndex'
804 804
805 805 opObj = puObj.addOperation(name=name_operation)
806 806 opObj.addParameter(name=name_parameter1, value=valueList[0], format=format)
807 807 opObj.addParameter(name=name_parameter2, value=valueList[1], format=format)
808 808
809 809 if self.volOpCebFilter.isChecked():
810 810 value = str(self.volOpFilter.text())
811 811 if value == "":
812 812 print "Please fill filter value"
813 813 return 0
814 814
815 815 format = 'int'
816 816 name_operation = 'filterByHeights'
817 817 name_parameter = 'window'
818 818 opObj = puObj.addOperation(name=name_operation)
819 819 if not opObj.addParameter(name=name_parameter, value=value, format=format):
820 820 self.console.append("Invalid value '%s' for %s" %(value,name_parameter))
821 821 return 0
822 822
823 823 if self.volOpCebProfile.isChecked():
824 824 value = str(self.volOpProfile.text())
825 825
826 826 if value == "":
827 827 print "Please fill profile value"
828 828 return 0
829 829
830 830 format = 'intlist'
831 831 optype = 'other'
832 832 name_operation = 'ProfileSelector'
833 833 if self.volOpComProfile.currentIndex() == 0:
834 834 name_parameter = 'profileList'
835 835 if self.volOpComProfile.currentIndex() == 1:
836 836 name_parameter = 'profileRangeList'
837 837 if self.volOpComProfile.currentIndex() == 2:
838 838 name_parameter = 'rangeList'
839 839
840 840 opObj = puObj.addOperation(name='ProfileSelector', optype='other')
841 841 if not opObj.addParameter(name=name_parameter, value=value, format=format):
842 842 self.console.append("Invalid value '%s' for %s" %(value,name_parameter))
843 843 return 0
844 844
845 845 if self.volOpCebDecodification.isChecked():
846 846 name_operation = 'Decoder'
847 opObj = puObj.addOperation(name=name_operation, optype='other')
847 848
848 849 #User defined
849 850 nBaud = None
850 851 nCode = None
851 852
852 853 code = str(self.volOpCode.text())
853 854 try:
854 855 code_tmp = ast.literal_eval(code)
855 856 except:
856 857 code_tmp = []
857 858
858 if len(code_tmp) < 1:
859 self.console.append("Please write a right value for Code (Exmaple: [1,1,-1], [1,-1,1])")
860 return 0
859 if len(code_tmp) > 0:
861 860
862 861 if type(code_tmp) not in (tuple, list):
863 862 self.console.append("Please write a right value for Code (Exmaple: [1,1,-1], [1,-1,1])")
864 863 return 0
865 864
866 865 if len(code_tmp) > 1 and type(code_tmp[0]) in (tuple, list): #[ [1,-1,1], [1,1,-1] ]
867 866 nBaud = len(code_tmp[0])
868 867 nCode = len(code_tmp)
869 868 elif len(code_tmp) == 1 and type(code_tmp[0]) in (tuple, list): #[ [1,-1,1] ]
870 869 nBaud = len(code_tmp[0])
871 870 nCode = 1
872 871 elif type(code_tmp[0]) in (int, float): #[1,-1,1] or (1,-1,1)
873 872 nBaud = len(code_tmp)
874 873 nCode = 1
875 874 else:
876 875 self.console.append("Please write a right value for Code (Exmaple: [1,1,-1], [1,-1,1])")
877 876 return 0
878 877
879 878 if not nBaud or not nCode:
880 879 self.console.append("Please write a right value for Code")
881 880 return 0
882 881
883 opObj = puObj.addOperation(name='Decoder', optype='other')
884
885 882 code = code.replace("(", "")
886 883 code = code.replace(")", "")
887 884 code = code.replace("[", "")
888 885 code = code.replace("]", "")
889 886
890 887 if not opObj.addParameter(name='code', value=code, format='intlist'):
891 888 self.console.append("Please write a right value for Code")
892 889 return 0
893 890 if not opObj.addParameter(name='nCode', value=nCode, format='int'):
894 891 self.console.append("Please write a right value for Code")
895 892 return 0
896 893 if not opObj.addParameter(name='nBaud', value=nBaud, format='int'):
897 894 self.console.append("Please write a right value for Code")
898 895 return 0
899 896
900 897 name_parameter = 'mode'
901 898 format = 'int'
902 899
903 900 value = str(self.volOpComMode.currentIndex())
904 901
905 902 if not opObj.addParameter(name=name_parameter, value=value, format=format):
906 903 self.console.append("Invalid value '%s' for '%s'" %(value,name_parameter))
907 904 return 0
908 905
909 906
910 907 if self.volOpCebFlip.isChecked():
911 908 name_operation = 'deFlip'
912 909 optype = 'self'
913 910
914 911 opObj = puObj.addOperation(name=name_operation, optype=optype)
915 912
916 913 name_parameter = 'channelList'
917 914 format = 'intlist'
918 915 value = str(self.volOpFlip.text())
919 916
920 917 if value != "":
921 918 if not opObj.addParameter(name=name_parameter, value=value, format=format):
922 919 self.console.append("Invalid value '%s' for '%s'" %(value,name_parameter))
923 920 return 0
924 921
925 922 if self.volOpCebCohInt.isChecked():
926 923 name_operation = 'CohInt'
927 924 optype = 'other'
928 925 value = str(self.volOpCohInt.text())
929 926
930 927 if value == "":
931 928 print "Please fill number of coherent integrations"
932 929 return 0
933 930
934 931 name_parameter = 'n'
935 932 format = 'float'
936 933
937 934 opObj = puObj.addOperation(name=name_operation, optype=optype)
938 935
939 936 if not opObj.addParameter(name=name_parameter, value=value, format=format):
940 937 self.console.append("Invalid value '%s' for '%s'" %(value,name_parameter))
941 938 return 0
942 939
943 940 if self.volGraphCebshow.isChecked():
944 941 name_operation = 'Scope'
945 942 optype = 'other'
946 943 name_parameter = 'type'
947 944 value = 'Scope'
948 945 if self.idImagscope == 0:
949 946 self.idImagscope = 100
950 947 else:
951 948 self.idImagscope = self.idImagscope + 1
952 949
953 950 name_parameter1 = 'id'
954 951 value1 = int(self.idImagscope)
955 952 format1 = 'int'
956 953 format = 'str'
957 954
958 955 opObj = puObj.addOperation(name=name_operation, optype=optype)
959 956 # opObj.addParameter(name=name_parameter, value=value, format=format)
960 957 opObj.addParameter(name=name_parameter1, value=opObj.id, format=format1)
961 958
962 959 channelList = str(self.volGraphChannelList.text()).replace(" ","")
963 960 xvalue = str(self.volGraphfreqrange.text()).replace(" ","")
964 961 yvalue = str(self.volGraphHeightrange.text()).replace(" ","")
965 962
966 963 if channelList:
967 964 opObj.addParameter(name='channelList', value=channelList, format='intlist')
968 965
969 966 if xvalue:
970 967 xvalueList = xvalue.split(',')
971 968 try:
972 969 value0 = float(xvalueList[0])
973 970 value1 = float(xvalueList[1])
974 971 except:
975 972 return 0
976 973 opObj.addParameter(name='xmin', value=value0, format='float')
977 974 opObj.addParameter(name='xmax', value=value1, format='float')
978 975
979 976
980 977 if not yvalue == "":
981 978 yvalueList = yvalue.split(",")
982 979 try:
983 980 value0 = int(yvalueList[0])
984 981 value1 = int(yvalueList[1])
985 982 except:
986 983 return 0
987 984
988 985 opObj.addParameter(name='ymin', value=value0, format='int')
989 986 opObj.addParameter(name='ymax', value=value1, format='int')
990 987
991 988 if self.volGraphCebSave.isChecked():
992 989 checkPath = True
993 990 opObj.addParameter(name='save', value='1', format='int')
994 991 opObj.addParameter(name='figpath', value=str(self.volGraphPath.text()), format='str')
995 992 value = str(self.volGraphPrefix.text()).replace(" ","")
996 993 if value:
997 994 opObj.addParameter(name='figfile', value=value, format='str')
998 995
999 996 localfolder = None
1000 997 if checkPath:
1001 998 localfolder = str(self.volGraphPath.text())
1002 999 if localfolder == '':
1003 1000 self.console.clear()
1004 1001 self.console.append("Graphic path should be defined")
1005 1002 return 0
1006 1003
1007 1004 # if something happend
1008 1005 parms_ok, output_path, blocksperfile, profilesperblock = self.checkInputsPUSave(datatype='Voltage')
1009 1006 if parms_ok:
1010 1007 name_operation = 'VoltageWriter'
1011 1008 optype = 'other'
1012 1009 name_parameter1 = 'path'
1013 1010 name_parameter2 = 'blocksPerFile'
1014 1011 name_parameter3 = 'profilesPerBlock'
1015 1012 value1 = output_path
1016 1013 value2 = blocksperfile
1017 1014 value3 = profilesperblock
1018 1015 format = "int"
1019 1016 opObj = puObj.addOperation(name=name_operation, optype=optype)
1020 1017 opObj.addParameter(name=name_parameter1, value=value1)
1021 1018 opObj.addParameter(name=name_parameter2, value=value2, format=format)
1022 1019 opObj.addParameter(name=name_parameter3, value=value3, format=format)
1023 1020
1024 1021 self.console.clear()
1025 1022 try:
1026 1023 self.refreshPUProperties(puObj)
1027 1024 except:
1028 1025 self.console.append("An error reading input parameters was found ...Check them!")
1029 1026 return 0
1030 1027
1031 1028 self.console.append("Save your project and press Play button to start signal processing")
1032 1029
1033 1030 self.actionSaveToolbar.setEnabled(True)
1034 1031 self.actionStarToolbar.setEnabled(True)
1035 1032
1036 1033 return 1
1037 1034
1038 1035 """
1039 1036 Voltage Graph
1040 1037 """
1041 1038 @pyqtSignature("int")
1042 1039 def on_volGraphCebSave_stateChanged(self, p0):
1043 1040 """
1044 1041 Check Box habilita ingresode del numero de Integraciones a realizar
1045 1042 """
1046 1043 if p0 == 2:
1047 1044 self.volGraphPath.setEnabled(True)
1048 1045 self.volGraphPrefix.setEnabled(True)
1049 1046 self.volGraphToolPath.setEnabled(True)
1050 1047
1051 1048 if p0 == 0:
1052 1049 self.volGraphPath.setEnabled(False)
1053 1050 self.volGraphPrefix.setEnabled(False)
1054 1051 self.volGraphToolPath.setEnabled(False)
1055 1052
1056 1053 @pyqtSignature("")
1057 1054 def on_volGraphToolPath_clicked(self):
1058 1055 """
1059 1056 Donde se guardan los DATOS
1060 1057 """
1061 1058 save_path = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
1062 1059 self.volGraphPath.setText(save_path)
1063 1060
1064 1061 if not os.path.exists(save_path):
1065 1062 self.console.clear()
1066 1063 self.console.append("Set a valid path")
1067 1064 self.volGraphOk.setEnabled(False)
1068 1065 return
1069 1066
1070 1067 @pyqtSignature("int")
1071 1068 def on_volGraphCebshow_stateChanged(self, p0):
1072 1069 """
1073 1070 Check Box habilita ingresode del numero de Integraciones a realizar
1074 1071 """
1075 1072 if p0 == 0:
1076 1073
1077 1074 self.volGraphChannelList.setEnabled(False)
1078 1075 self.volGraphfreqrange.setEnabled(False)
1079 1076 self.volGraphHeightrange.setEnabled(False)
1080 1077 if p0 == 2:
1081 1078
1082 1079 self.volGraphChannelList.setEnabled(True)
1083 1080 self.volGraphfreqrange.setEnabled(True)
1084 1081 self.volGraphHeightrange.setEnabled(True)
1085 1082
1086 1083 """
1087 1084 Spectra operation
1088 1085 """
1089 1086 @pyqtSignature("int")
1090 1087 def on_specOpCebRadarfrequency_stateChanged(self, p0):
1091 1088 """
1092 1089 Check Box habilita ingresode del numero de Integraciones a realizar
1093 1090 """
1094 1091 if p0 == 2:
1095 1092 self.specOpRadarfrequency.setEnabled(True)
1096 1093 if p0 == 0:
1097 1094 self.specOpRadarfrequency.clear()
1098 1095 self.specOpRadarfrequency.setEnabled(False)
1099 1096
1100 1097
1101 1098 @pyqtSignature("int")
1102 1099 def on_specOpCebCrossSpectra_stateChanged(self, p0):
1103 1100 """
1104 1101 Habilita la opcion de aadir el parmetro CrossSpectra a la Unidad de Procesamiento .
1105 1102 """
1106 1103 if p0 == 2:
1107 1104 # self.specOpnFFTpoints.setEnabled(True)
1108 1105 self.specOppairsList.setEnabled(True)
1109 1106 if p0 == 0:
1110 1107 # self.specOpnFFTpoints.setEnabled(False)
1111 1108 self.specOppairsList.setEnabled(False)
1112 1109
1113 1110 @pyqtSignature("int")
1114 1111 def on_specOpCebChannel_stateChanged(self, p0):
1115 1112 """
1116 1113 Habilita la opcion de aadir el parmetro numero de Canales a la Unidad de Procesamiento .
1117 1114 """
1118 1115 if p0 == 2:
1119 1116 self.specOpChannel.setEnabled(True)
1120 1117 self.specOpComChannel.setEnabled(True)
1121 1118 if p0 == 0:
1122 1119 self.specOpChannel.setEnabled(False)
1123 1120 self.specOpComChannel.setEnabled(False)
1124 1121
1125 1122 @pyqtSignature("int")
1126 1123 def on_specOpCebHeights_stateChanged(self, p0):
1127 1124 """
1128 1125 Habilita la opcion de aadir el parmetro de alturas a la Unidad de Procesamiento .
1129 1126 """
1130 1127 if p0 == 2:
1131 1128 self.specOpComHeights.setEnabled(True)
1132 1129 self.specOpHeights.setEnabled(True)
1133 1130 if p0 == 0:
1134 1131 self.specOpComHeights.setEnabled(False)
1135 1132 self.specOpHeights.setEnabled(False)
1136 1133
1137 1134
1138 1135 @pyqtSignature("int")
1139 1136 def on_specOpCebIncoherent_stateChanged(self, p0):
1140 1137 """
1141 1138 Habilita la opcion de aadir el parmetro integraciones incoherentes a la Unidad de Procesamiento .
1142 1139 """
1143 1140 if p0 == 2:
1144 1141 self.specOpIncoherent.setEnabled(True)
1145 1142 if p0 == 0:
1146 1143 self.specOpIncoherent.setEnabled(False)
1147 1144
1148 1145 @pyqtSignature("int")
1149 1146 def on_specOpCebRemoveDC_stateChanged(self, p0):
1150 1147 """
1151 1148 Habilita la opcion de aadir el parmetro remover DC a la Unidad de Procesamiento .
1152 1149 """
1153 1150 if p0 == 2:
1154 1151 self.specOpComRemoveDC.setEnabled(True)
1155 1152 if p0 == 0:
1156 1153 self.specOpComRemoveDC.setEnabled(False)
1157 1154
1158 1155 @pyqtSignature("int")
1159 1156 def on_specOpCebgetNoise_stateChanged(self, p0):
1160 1157 """
1161 1158 Habilita la opcion de aadir la estimacion de ruido a la Unidad de Procesamiento .
1162 1159 """
1163 1160 if p0 == 2:
1164 1161 self.specOpgetNoise.setEnabled(True)
1165 1162
1166 1163 if p0 == 0:
1167 1164 self.specOpgetNoise.setEnabled(False)
1168 1165
1169 1166 @pyqtSignature("")
1170 1167 def on_specOpOk_clicked(self):
1171 1168 """
1172 1169 AÑADE OPERACION SPECTRA
1173 1170 """
1174 1171
1175 1172 addFTP = False
1176 1173 checkPath = False
1177 1174
1178 1175 self.actionSaveToolbar.setEnabled(False)
1179 1176 self.actionStarToolbar.setEnabled(False)
1180 1177
1181 1178 self.console.clear()
1182 1179 self.console.append("Checking input parameters ...")
1183 1180
1184 1181 projectObj = self.getSelectedProjectObj()
1185 1182
1186 1183 if not projectObj:
1187 1184 self.console.append("Please select a project before update it")
1188 1185 return
1189 1186
1190 1187 puObj = self.getSelectedItemObj()
1191 1188
1192 1189 puObj.removeOperations()
1193 1190
1194 1191 if self.specOpCebRadarfrequency.isChecked():
1195 1192 value = str(self.specOpRadarfrequency.text())
1196 1193 format = 'float'
1197 1194 name_operation = 'setRadarFrequency'
1198 1195 name_parameter = 'frequency'
1199 1196
1200 1197 if not isFloat(value):
1201 1198 self.console.clear()
1202 1199 self.console.append("Invalid value '%s' for '%s'" %(value, name_parameter))
1203 1200 return 0
1204 1201
1205 1202 radarfreq = float(value)*1e6
1206 1203 opObj = puObj.addOperation(name=name_operation)
1207 1204 opObj.addParameter(name=name_parameter, value=radarfreq, format=format)
1208 1205
1209 1206 inputId = puObj.getInputId()
1210 1207 inputPuObj = projectObj.getProcUnitObj(inputId)
1211 1208
1212 1209 if inputPuObj.datatype == 'Voltage' or inputPuObj.datatype == 'USRP':
1213 1210
1214 1211 value = str(self.specOpnFFTpoints.text())
1215 1212
1216 1213 if not isInt(value):
1217 1214 self.console.append("Invalid value '%s' for '%s'" %(value, 'nFFTPoints'))
1218 1215 return 0
1219 1216
1220 1217 puObj.addParameter(name='nFFTPoints', value=value, format='int')
1221 1218
1222 1219 value = str(self.specOpProfiles.text())
1223 1220 if not isInt(value):
1224 1221 self.console.append("Please write a value on Profiles field")
1225 1222 else:
1226 1223 puObj.addParameter(name='nProfiles', value=value, format='int')
1227 1224
1228 1225 value = str(self.specOpippFactor.text())
1229 1226 if not isInt(value):
1230 1227 self.console.append("Please write a value on IppFactor field")
1231 1228 else:
1232 1229 puObj.addParameter(name='ippFactor' , value=value , format='int')
1233 1230
1234 1231 if self.specOpCebCrossSpectra.isChecked():
1235 1232 name_parameter = 'pairsList'
1236 1233 format = 'pairslist'
1237 1234 value = str(self.specOppairsList.text())
1238 1235
1239 1236 if value == "":
1240 1237 print "Please fill the pairs list field"
1241 1238 return 0
1242 1239
1243 1240 if not opObj.addParameter(name=name_parameter, value=value, format=format):
1244 1241 self.console.append("Invalid value '%s' for '%s'" %(value,name_parameter))
1245 1242 return 0
1246 1243
1247 1244 if self.specOpCebHeights.isChecked():
1248 1245 value = str(self.specOpHeights.text())
1249 1246
1250 1247 if value == "":
1251 1248 self.console.append("Empty value for '%s'" %(value, "Height range"))
1252 1249 return 0
1253 1250
1254 1251 valueList = value.split(',')
1255 1252 format = 'float'
1256 1253 value0 = valueList[0]
1257 1254 value1 = valueList[1]
1258 1255
1259 1256 if not isFloat(value0) or not isFloat(value1):
1260 1257 self.console.append("Invalid value '%s' for '%s'" %(value, "Height range"))
1261 1258 return 0
1262 1259
1263 1260 if self.specOpComHeights.currentIndex() == 0:
1264 1261 name_operation = 'selectHeights'
1265 1262 name_parameter1 = 'minHei'
1266 1263 name_parameter2 = 'maxHei'
1267 1264 else:
1268 1265 name_operation = 'selectHeightsByIndex'
1269 1266 name_parameter1 = 'minIndex'
1270 1267 name_parameter2 = 'maxIndex'
1271 1268
1272 1269 opObj = puObj.addOperation(name=name_operation)
1273 1270 opObj.addParameter(name=name_parameter1, value=value0, format=format)
1274 1271 opObj.addParameter(name=name_parameter2, value=value1, format=format)
1275 1272
1276 1273 if self.specOpCebChannel.isChecked():
1277 1274
1278 1275 if self.specOpComChannel.currentIndex() == 0:
1279 1276 name_operation = "selectChannels"
1280 1277 name_parameter = 'channelList'
1281 1278 else:
1282 1279 name_operation = "selectChannelsByIndex"
1283 1280 name_parameter = 'channelIndexList'
1284 1281
1285 1282 format = 'intlist'
1286 1283 value = str(self.specOpChannel.text())
1287 1284
1288 1285 if value == "":
1289 1286 print "Please fill channel list"
1290 1287 return 0
1291 1288
1292 1289 if not isList(value):
1293 1290 self.console.append("Invalid value '%s' for '%s'" %(value, name_parameter))
1294 1291 return 0
1295 1292
1296 1293 opObj = puObj.addOperation(name=name_operation)
1297 1294 opObj.addParameter(name=name_parameter, value=value, format=format)
1298 1295
1299 1296 if self.specOpCebIncoherent.isChecked():
1300 1297
1301 1298 name_operation = 'IncohInt'
1302 1299 optype = 'other'
1303 1300
1304 1301 if self.specOpCobIncInt.currentIndex() == 0:
1305 1302 name_parameter = 'timeInterval'
1306 1303 format = 'float'
1307 1304 else:
1308 1305 name_parameter = 'n'
1309 1306 format = 'float'
1310 1307
1311 1308 value = str(self.specOpIncoherent.text())
1312 1309
1313 1310 if value == "":
1314 1311 print "Please fill Incoherent integration value"
1315 1312 return 0
1316 1313
1317 1314 if not isFloat(value):
1318 1315 self.console.append("Invalid value '%s' for '%s'" %(value, name_parameter))
1319 1316 return 0
1320 1317
1321 1318 opObj = puObj.addOperation(name=name_operation, optype=optype)
1322 1319 opObj.addParameter(name=name_parameter, value=value, format=format)
1323 1320
1324 1321 if self.specOpCebRemoveDC.isChecked():
1325 1322 name_operation = 'removeDC'
1326 1323 name_parameter = 'mode'
1327 1324 format = 'int'
1328 1325 if self.specOpComRemoveDC.currentIndex() == 0:
1329 1326 value = 1
1330 1327 else:
1331 1328 value = 2
1332 1329 opObj = puObj.addOperation(name=name_operation)
1333 1330 opObj.addParameter(name=name_parameter, value=value, format=format)
1334 1331
1335 1332 if self.specOpCebRemoveInt.isChecked():
1336 1333 name_operation = 'removeInterference'
1337 1334 opObj = puObj.addOperation(name=name_operation)
1338 1335
1339 1336
1340 1337 if self.specOpCebgetNoise.isChecked():
1341 1338 value = str(self.specOpgetNoise.text())
1342 1339 valueList = value.split(',')
1343 1340 format = 'float'
1344 1341 name_operation = "getNoise"
1345 1342 opObj = puObj.addOperation(name=name_operation)
1346 1343
1347 1344 if not value == '':
1348 1345 valueList = value.split(',')
1349 1346 length = len(valueList)
1350 1347 if length == 1:
1351 1348 try:
1352 1349 value1 = float(valueList[0])
1353 1350 except:
1354 1351 self.console.clear()
1355 1352 self.console.append("Please Write correct parameter Get Noise")
1356 1353 return 0
1357 1354 name1 = 'minHei'
1358 1355 opObj.addParameter(name=name1, value=value1, format=format)
1359 1356 elif length == 2:
1360 1357 try:
1361 1358 value1 = float(valueList[0])
1362 1359 value2 = float(valueList[1])
1363 1360 except:
1364 1361 self.console.clear()
1365 1362 self.console.append("Please Write corrects parameter Get Noise")
1366 1363 return 0
1367 1364 name1 = 'minHei'
1368 1365 name2 = 'maxHei'
1369 1366 opObj.addParameter(name=name1, value=value1, format=format)
1370 1367 opObj.addParameter(name=name2, value=value2, format=format)
1371 1368
1372 1369 elif length == 3:
1373 1370 try:
1374 1371 value1 = float(valueList[0])
1375 1372 value2 = float(valueList[1])
1376 1373 value3 = float(valueList[2])
1377 1374 except:
1378 1375 self.console.clear()
1379 1376 self.console.append("Please Write corrects parameter Get Noise")
1380 1377 return 0
1381 1378 name1 = 'minHei'
1382 1379 name2 = 'maxHei'
1383 1380 name3 = 'minVel'
1384 1381 opObj.addParameter(name=name1, value=value1, format=format)
1385 1382 opObj.addParameter(name=name2, value=value2, format=format)
1386 1383 opObj.addParameter(name=name3, value=value3, format=format)
1387 1384
1388 1385 elif length == 4:
1389 1386 try:
1390 1387 value1 = float(valueList[0])
1391 1388 value2 = float(valueList[1])
1392 1389 value3 = float(valueList[2])
1393 1390 value4 = float(valueList[3])
1394 1391 except:
1395 1392 self.console.clear()
1396 1393 self.console.append("Please Write corrects parameter Get Noise")
1397 1394 return 0
1398 1395 name1 = 'minHei'
1399 1396 name2 = 'maxHei'
1400 1397 name3 = 'minVel'
1401 1398 name4 = 'maxVel'
1402 1399 opObj.addParameter(name=name1, value=value1, format=format)
1403 1400 opObj.addParameter(name=name2, value=value2, format=format)
1404 1401 opObj.addParameter(name=name3, value=value3, format=format)
1405 1402 opObj.addParameter(name=name4, value=value4, format=format)
1406 1403
1407 1404 elif length > 4:
1408 1405 self.console.clear()
1409 1406 self.console.append("Get Noise Operation only accepts 4 parameters")
1410 1407 return 0
1411 1408
1412 1409 channelList = str(self.specGgraphChannelList.text()).replace(" ","")
1413 1410 vel_range = str(self.specGgraphFreq.text()).replace(" ","")
1414 1411 hei_range = str(self.specGgraphHeight.text()).replace(" ","")
1415 1412 db_range = str(self.specGgraphDbsrange.text()).replace(" ","")
1416 1413
1417 1414 trange = str(self.specGgraphTminTmax.text()).replace(" ","")
1418 1415 magrange = str(self.specGgraphmagnitud.text()).replace(" ","")
1419 1416 phaserange = str(self.specGgraphPhase.text()).replace(" ","")
1420 1417 # timerange = str(self.specGgraphTimeRange.text()).replace(" ","")
1421 1418
1422 1419 figpath = str(self.specGraphPath.text())
1423 1420 figfile = str(self.specGraphPrefix.text()).replace(" ","")
1424 1421 try:
1425 1422 wrperiod = int(str(self.specGgraphftpratio.text()).replace(" ",""))
1426 1423 except:
1427 1424 wrperiod = None
1428 1425
1429 1426 #-----Spectra Plot-----
1430 1427 if self.specGraphCebSpectraplot.isChecked():
1431 1428
1432 1429 opObj = puObj.addOperation(name='SpectraPlot', optype='other')
1433 1430 opObj.addParameter(name='id', value=opObj.id, format='int')
1434 1431
1435 1432 if not channelList == '':
1436 1433
1437 1434 if not isList(channelList):
1438 1435 self.console.append("Invalid channelList")
1439 1436 return 0
1440 1437
1441 1438 opObj.addParameter(name='channelList', value=channelList, format='intlist')
1442 1439
1443 1440 if not vel_range == '':
1444 1441 xvalueList = vel_range.split(',')
1445 1442 try:
1446 1443 value1 = float(xvalueList[0])
1447 1444 value2 = float(xvalueList[1])
1448 1445 except:
1449 1446 self.console.clear()
1450 1447 self.console.append("Invalid velocity/frequency range")
1451 1448 return 0
1452 1449
1453 1450 opObj.addParameter(name='xmin', value=value1, format='float')
1454 1451 opObj.addParameter(name='xmax', value=value2, format='float')
1455 1452
1456 1453 if not hei_range == '':
1457 1454 yvalueList = hei_range.split(",")
1458 1455 try:
1459 1456 value1 = float(yvalueList[0])
1460 1457 value2 = float(yvalueList[1])
1461 1458 except:
1462 1459 self.console.clear()
1463 1460 self.console.append("Invalid height range")
1464 1461 return 0
1465 1462
1466 1463 opObj.addParameter(name='ymin', value=value1, format='float')
1467 1464 opObj.addParameter(name='ymax', value=value2, format='float')
1468 1465
1469 1466 if not db_range == '':
1470 1467 zvalueList = db_range.split(",")
1471 1468 try:
1472 1469 value1 = float(zvalueList[0])
1473 1470 value2 = float(zvalueList[1])
1474 1471 except:
1475 1472 self.console.clear()
1476 1473 self.console.append("Invalid db range")
1477 1474 return 0
1478 1475
1479 1476 opObj.addParameter(name='zmin', value=value1, format='float')
1480 1477 opObj.addParameter(name='zmax', value=value2, format='float')
1481 1478
1482 1479 if self.specGraphSaveSpectra.isChecked():
1483 1480 checkPath = True
1484 1481 opObj.addParameter(name='save', value=1 , format='bool')
1485 1482 opObj.addParameter(name='figpath', value=figpath, format='str')
1486 1483 if figfile:
1487 1484 opObj.addParameter(name='figfile', value=figfile, format='str')
1488 1485 if wrperiod:
1489 1486 opObj.addParameter(name='wr_period', value=wrperiod,format='int')
1490 1487
1491 1488 if self.specGraphftpSpectra.isChecked():
1492 1489 opObj.addParameter(name='ftp', value='1', format='int')
1493 1490 self.addFTPConf2Operation(puObj, opObj)
1494 1491 addFTP = True
1495 1492
1496 1493 if self.specGraphCebCrossSpectraplot.isChecked():
1497 1494
1498 1495 opObj = puObj.addOperation(name='CrossSpectraPlot', optype='other')
1499 1496 # opObj.addParameter(name='power_cmap', value='jet', format='str')
1500 1497 # opObj.addParameter(name='coherence_cmap', value='jet', format='str')
1501 1498 # opObj.addParameter(name='phase_cmap', value='RdBu_r', format='str')
1502 1499 opObj.addParameter(name='id', value=opObj.id, format='int')
1503 1500
1504 1501 if not vel_range == '':
1505 1502 xvalueList = vel_range.split(',')
1506 1503 try:
1507 1504 value1 = float(xvalueList[0])
1508 1505 value2 = float(xvalueList[1])
1509 1506 except:
1510 1507 self.console.clear()
1511 1508 self.console.append("Invalid velocity/frequency range")
1512 1509 return 0
1513 1510
1514 1511 opObj.addParameter(name='xmin', value=value1, format='float')
1515 1512 opObj.addParameter(name='xmax', value=value2, format='float')
1516 1513
1517 1514 if not hei_range == '':
1518 1515 yvalueList = hei_range.split(",")
1519 1516 try:
1520 1517 value1 = float(yvalueList[0])
1521 1518 value2 = float(yvalueList[1])
1522 1519 except:
1523 1520 self.console.clear()
1524 1521 self.console.append("Invalid height range")
1525 1522 return 0
1526 1523
1527 1524 opObj.addParameter(name='ymin', value=value1, format='float')
1528 1525 opObj.addParameter(name='ymax', value=value2, format='float')
1529 1526
1530 1527 if not db_range == '':
1531 1528 zvalueList = db_range.split(",")
1532 1529 try:
1533 1530 value1 = float(zvalueList[0])
1534 1531 value2 = float(zvalueList[1])
1535 1532 except:
1536 1533 self.console.clear()
1537 1534 self.console.append("Invalid db range")
1538 1535 return 0
1539 1536
1540 1537 opObj.addParameter(name='zmin', value=value1, format='float')
1541 1538 opObj.addParameter(name='zmax', value=value2, format='float')
1542 1539
1543 1540 if not magrange == '':
1544 1541 zvalueList = magrange.split(",")
1545 1542 try:
1546 1543 value1 = float(zvalueList[0])
1547 1544 value2 = float(zvalueList[1])
1548 1545 except:
1549 1546 self.console.clear()
1550 1547 self.console.append("Invalid magnitude range")
1551 1548 return 0
1552 1549
1553 1550 opObj.addParameter(name='coh_min', value=value1, format='float')
1554 1551 opObj.addParameter(name='coh_max', value=value2, format='float')
1555 1552
1556 1553 if not phaserange == '':
1557 1554 zvalueList = phaserange.split(",")
1558 1555 try:
1559 1556 value1 = float(zvalueList[0])
1560 1557 value2 = float(zvalueList[1])
1561 1558 except:
1562 1559 self.console.clear()
1563 1560 self.console.append("Invalid phase range")
1564 1561 return 0
1565 1562
1566 1563 opObj.addParameter(name='phase_min', value=value1, format='float')
1567 1564 opObj.addParameter(name='phase_max', value=value2, format='float')
1568 1565
1569 1566 if self.specGraphSaveCross.isChecked():
1570 1567 checkPath = True
1571 1568 opObj.addParameter(name='save', value='1', format='bool')
1572 1569 opObj.addParameter(name='figpath', value=figpath, format='str')
1573 1570 if figfile:
1574 1571 opObj.addParameter(name='figfile', value=figfile, format='str')
1575 1572 if wrperiod:
1576 1573 opObj.addParameter(name='wr_period', value=wrperiod,format='int')
1577 1574
1578 1575 if self.specGraphftpCross.isChecked():
1579 1576 opObj.addParameter(name='ftp', value='1', format='int')
1580 1577 self.addFTPConf2Operation(puObj, opObj)
1581 1578 addFTP = True
1582 1579
1583 1580 if self.specGraphCebRTIplot.isChecked():
1584 1581
1585 1582 opObj = puObj.addOperation(name='RTIPlot', optype='other')
1586 1583 opObj.addParameter(name='id', value=opObj.id, format='int')
1587 1584
1588 1585 if not channelList == '':
1589 1586 if not isList(channelList):
1590 1587 self.console.append("Invalid channelList")
1591 1588 return 0
1592 1589 opObj.addParameter(name='channelList', value=channelList, format='intlist')
1593 1590
1594 1591 if not trange == '':
1595 1592 xvalueList = trange.split(',')
1596 1593 try:
1597 1594 value1 = float(xvalueList[0])
1598 1595 value2 = float(xvalueList[1])
1599 1596 except:
1600 1597 self.console.clear()
1601 1598 self.console.append("Invalid time range")
1602 1599 return 0
1603 1600
1604 1601 opObj.addParameter(name='xmin', value=value1, format='float')
1605 1602 opObj.addParameter(name='xmax', value=value2, format='float')
1606 1603
1607 1604 # if not timerange == '':
1608 1605 # try:
1609 1606 # timerange = float(timerange)
1610 1607 # except:
1611 1608 # self.console.clear()
1612 1609 # self.console.append("Invalid time range")
1613 1610 # return 0
1614 1611 #
1615 1612 # opObj.addParameter(name='timerange', value=timerange, format='float')
1616 1613
1617 1614 if not hei_range == '':
1618 1615 yvalueList = hei_range.split(",")
1619 1616 try:
1620 1617 value1 = float(yvalueList[0])
1621 1618 value2 = float(yvalueList[1])
1622 1619 except:
1623 1620 self.console.clear()
1624 1621 self.console.append("Invalid height range")
1625 1622 return 0
1626 1623
1627 1624 opObj.addParameter(name='ymin', value=value1, format='float')
1628 1625 opObj.addParameter(name='ymax', value=value2, format='float')
1629 1626
1630 1627 if not db_range == '':
1631 1628 zvalueList = db_range.split(",")
1632 1629 try:
1633 1630 value1 = float(zvalueList[0])
1634 1631 value2 = float(zvalueList[1])
1635 1632 except:
1636 1633 self.console.clear()
1637 1634 self.console.append("Invalid db range")
1638 1635 return 0
1639 1636
1640 1637 opObj.addParameter(name='zmin', value=value1, format='float')
1641 1638 opObj.addParameter(name='zmax', value=value2, format='float')
1642 1639
1643 1640 if self.specGraphSaveRTIplot.isChecked():
1644 1641 checkPath = True
1645 1642 opObj.addParameter(name='save', value='1', format='bool')
1646 1643 opObj.addParameter(name='figpath', value=figpath, format='str')
1647 1644 if figfile:
1648 1645 opObj.addParameter(name='figfile', value=value, format='str')
1649 1646 if wrperiod:
1650 1647 opObj.addParameter(name='wr_period', value=wrperiod,format='int')
1651 1648
1652 1649 if self.specGraphftpRTIplot.isChecked():
1653 1650 opObj.addParameter(name='ftp', value='1', format='int')
1654 1651 self.addFTPConf2Operation(puObj, opObj)
1655 1652 addFTP = True
1656 1653
1657 1654 if self.specGraphCebCoherencmap.isChecked():
1658 1655
1659 1656 opObj = puObj.addOperation(name='CoherenceMap', optype='other')
1660 1657 # opObj.addParameter(name=name_parameter, value=value, format=format)
1661 1658 # opObj.addParameter(name='coherence_cmap', value='jet', format='str')
1662 1659 # opObj.addParameter(name='phase_cmap', value='RdBu_r', format='str')
1663 1660 opObj.addParameter(name='id', value=opObj.id, format='int')
1664 1661
1665 1662 # if not timerange == '':
1666 1663 # try:
1667 1664 # timerange = int(timerange)
1668 1665 # except:
1669 1666 # self.console.clear()
1670 1667 # self.console.append("Invalid time range")
1671 1668 # return 0
1672 1669 #
1673 1670 # opObj.addParameter(name='timerange', value=timerange, format='int')
1674 1671
1675 1672 if not trange == '':
1676 1673 xvalueList = trange.split(',')
1677 1674 try:
1678 1675 value1 = float(xvalueList[0])
1679 1676 value2 = float(xvalueList[1])
1680 1677 except:
1681 1678 self.console.clear()
1682 1679 self.console.append("Invalid time range")
1683 1680 return 0
1684 1681
1685 1682 opObj.addParameter(name='xmin', value=value1, format='float')
1686 1683 opObj.addParameter(name='xmax', value=value2, format='float')
1687 1684
1688 1685 if not hei_range == '':
1689 1686 yvalueList = hei_range.split(",")
1690 1687 try:
1691 1688 value1 = float(yvalueList[0])
1692 1689 value2 = float(yvalueList[1])
1693 1690 except:
1694 1691 self.console.clear()
1695 1692 self.console.append("Invalid height range")
1696 1693 return 0
1697 1694
1698 1695 opObj.addParameter(name='ymin', value=value1, format='float')
1699 1696 opObj.addParameter(name='ymax', value=value2, format='float')
1700 1697
1701 1698 if not magrange == '':
1702 1699 zvalueList = magrange.split(",")
1703 1700 try:
1704 1701 value1 = float(zvalueList[0])
1705 1702 value2 = float(zvalueList[1])
1706 1703 except:
1707 1704 self.console.clear()
1708 1705 self.console.append("Invalid magnitude range")
1709 1706 return 0
1710 1707
1711 1708 opObj.addParameter(name='zmin', value=value1, format='float')
1712 1709 opObj.addParameter(name='zmax', value=value2, format='float')
1713 1710
1714 1711 if not phaserange == '':
1715 1712 zvalueList = phaserange.split(",")
1716 1713 try:
1717 1714 value1 = float(zvalueList[0])
1718 1715 value2 = float(zvalueList[1])
1719 1716 except:
1720 1717 self.console.clear()
1721 1718 self.console.append("Invalid phase range")
1722 1719 return 0
1723 1720
1724 1721 opObj.addParameter(name='phase_min', value=value1, format='float')
1725 1722 opObj.addParameter(name='phase_max', value=value2, format='float')
1726 1723
1727 1724 if self.specGraphSaveCoherencemap.isChecked():
1728 1725 checkPath = True
1729 1726 opObj.addParameter(name='save', value='1', format='bool')
1730 1727 opObj.addParameter(name='figpath', value=figpath, format='str')
1731 1728 if figfile:
1732 1729 opObj.addParameter(name='figfile', value=value, format='str')
1733 1730 if wrperiod:
1734 1731 opObj.addParameter(name='wr_period', value=wrperiod,format='int')
1735 1732
1736 1733 if self.specGraphftpCoherencemap.isChecked():
1737 1734 opObj.addParameter(name='ftp', value='1', format='int')
1738 1735 self.addFTPConf2Operation(puObj, opObj)
1739 1736 addFTP = True
1740 1737
1741 1738 if self.specGraphPowerprofile.isChecked():
1742 1739
1743 1740 opObj = puObj.addOperation(name='PowerProfilePlot', optype='other')
1744 1741 opObj.addParameter(name='id', value=opObj.id, format='int')
1745 1742
1746 1743 if not channelList == '':
1747 1744 if not isList(channelList):
1748 1745 self.console.append("Invalid channelList")
1749 1746 return 0
1750 1747
1751 1748 opObj.addParameter(name='channelList', value=channelList, format='intlist')
1752 1749
1753 1750 if not db_range == '':
1754 1751 xvalueList = db_range.split(',')
1755 1752 try:
1756 1753 value1 = float(xvalueList[0])
1757 1754 value2 = float(xvalueList[1])
1758 1755 except:
1759 1756 self.console.clear()
1760 1757 self.console.append("Invalid db range")
1761 1758 return 0
1762 1759
1763 1760 opObj.addParameter(name='xmin', value=value1, format='float')
1764 1761 opObj.addParameter(name='xmax', value=value2, format='float')
1765 1762
1766 1763 if not hei_range == '':
1767 1764 yvalueList = hei_range.split(",")
1768 1765 try:
1769 1766 value1 = float(yvalueList[0])
1770 1767 value2 = float(yvalueList[1])
1771 1768 except:
1772 1769 self.console.clear()
1773 1770 self.console.append("Invalid height range")
1774 1771 return 0
1775 1772
1776 1773 opObj.addParameter(name='ymin', value=value1, format='float')
1777 1774 opObj.addParameter(name='ymax', value=value2, format='float')
1778 1775
1779 1776 if self.specGraphSavePowerprofile.isChecked():
1780 1777 checkPath = True
1781 1778 opObj.addParameter(name='save', value='1', format='bool')
1782 1779 opObj.addParameter(name='figpath', value=figpath, format='str')
1783 1780 if figfile:
1784 1781 opObj.addParameter(name='figfile', value=value, format='str')
1785 1782 if wrperiod:
1786 1783 opObj.addParameter(name='wr_period', value=wrperiod,format='int')
1787 1784
1788 1785 if self.specGraphftpPowerprofile.isChecked():
1789 1786 opObj.addParameter(name='ftp', value='1', format='int')
1790 1787 self.addFTPConf2Operation(puObj, opObj)
1791 1788 addFTP = True
1792 1789 # rti noise
1793 1790
1794 1791 if self.specGraphCebRTInoise.isChecked():
1795 1792
1796 1793 opObj = puObj.addOperation(name='Noise', optype='other')
1797 1794 opObj.addParameter(name='id', value=opObj.id, format='int')
1798 1795
1799 1796 if not channelList == '':
1800 1797 if not isList(channelList):
1801 1798 self.console.append("Invalid channelList")
1802 1799 return 0
1803 1800 opObj.addParameter(name='channelList', value=channelList, format='intlist')
1804 1801
1805 1802 # if not timerange == '':
1806 1803 # try:
1807 1804 # timerange = float(timerange)
1808 1805 # except:
1809 1806 # self.console.clear()
1810 1807 # self.console.append("Invalid time range")
1811 1808 # return 0
1812 1809 #
1813 1810 # opObj.addParameter(name='timerange', value=timerange, format='float')
1814 1811
1815 1812 if not trange == '':
1816 1813 xvalueList = trange.split(',')
1817 1814 try:
1818 1815 value1 = float(xvalueList[0])
1819 1816 value2 = float(xvalueList[1])
1820 1817 except:
1821 1818 self.console.clear()
1822 1819 self.console.append("Invalid time range")
1823 1820 return 0
1824 1821
1825 1822 opObj.addParameter(name='xmin', value=value1, format='float')
1826 1823 opObj.addParameter(name='xmax', value=value2, format='float')
1827 1824
1828 1825 if not db_range == '':
1829 1826 yvalueList = db_range.split(",")
1830 1827 try:
1831 1828 value1 = float(yvalueList[0])
1832 1829 value2 = float(yvalueList[1])
1833 1830 except:
1834 1831 self.console.clear()
1835 1832 self.console.append("Invalid db range")
1836 1833 return 0
1837 1834
1838 1835 opObj.addParameter(name='ymin', value=value1, format='float')
1839 1836 opObj.addParameter(name='ymax', value=value2, format='float')
1840 1837
1841 1838 if self.specGraphSaveRTInoise.isChecked():
1842 1839 checkPath = True
1843 1840 opObj.addParameter(name='save', value='1', format='bool')
1844 1841 opObj.addParameter(name='figpath', value=figpath, format='str')
1845 1842 if figfile:
1846 1843 opObj.addParameter(name='figfile', value=value, format='str')
1847 1844 if wrperiod:
1848 1845 opObj.addParameter(name='wr_period', value=wrperiod,format='int')
1849 1846
1850 1847 # test_ftp
1851 1848 if self.specGraphftpRTInoise.isChecked():
1852 1849 opObj.addParameter(name='ftp', value='1', format='int')
1853 1850 self.addFTPConf2Operation(puObj, opObj)
1854 1851 addFTP = True
1855 1852
1856 1853 if checkPath:
1857 1854 if not figpath:
1858 1855 self.console.clear()
1859 1856 self.console.append("Graphic path should be defined")
1860 1857 return 0
1861 1858
1862 1859 if addFTP and not figpath:
1863 1860 self.console.clear()
1864 1861 self.console.append("You have to save the plots before sending them to FTP Server")
1865 1862 return 0
1866 1863
1867 1864 # if something happend
1868 1865 parms_ok, output_path, blocksperfile, profilesperblock = self.checkInputsPUSave(datatype='Spectra')
1869 1866 if parms_ok:
1870 1867 opObj = puObj.addOperation(name='SpectraWriter', optype='other')
1871 1868 opObj.addParameter(name='path', value=output_path)
1872 1869 opObj.addParameter(name='blocksPerFile', value=blocksperfile, format='int')
1873 1870
1874 1871 self.console.clear()
1875 1872 try:
1876 1873 self.refreshPUProperties(puObj)
1877 1874 except:
1878 1875 self.console.append("An error reading input parameters was found ... Check them!")
1879 1876 return 0
1880 1877
1881 1878 self.console.append("Save your project and press Play button to start signal processing")
1882 1879
1883 1880 self.actionSaveToolbar.setEnabled(True)
1884 1881 self.actionStarToolbar.setEnabled(True)
1885 1882
1886 1883 return 1
1887 1884
1888 1885 """
1889 1886 Spectra Graph
1890 1887 """
1891 1888 @pyqtSignature("int")
1892 1889 def on_specGraphCebSpectraplot_stateChanged(self, p0):
1893 1890
1894 1891 self.__checkSpecGraphFilters()
1895 1892
1896 1893
1897 1894 @pyqtSignature("int")
1898 1895 def on_specGraphCebCrossSpectraplot_stateChanged(self, p0):
1899 1896
1900 1897 self.__checkSpecGraphFilters()
1901 1898
1902 1899 @pyqtSignature("int")
1903 1900 def on_specGraphCebRTIplot_stateChanged(self, p0):
1904 1901
1905 1902 self.__checkSpecGraphFilters()
1906 1903
1907 1904
1908 1905 @pyqtSignature("int")
1909 1906 def on_specGraphCebRTInoise_stateChanged(self, p0):
1910 1907
1911 1908 self.__checkSpecGraphFilters()
1912 1909
1913 1910
1914 1911 @pyqtSignature("int")
1915 1912 def on_specGraphCebCoherencmap_stateChanged(self, p0):
1916 1913
1917 1914 self.__checkSpecGraphFilters()
1918 1915
1919 1916 @pyqtSignature("int")
1920 1917 def on_specGraphPowerprofile_stateChanged(self, p0):
1921 1918
1922 1919 self.__checkSpecGraphFilters()
1923 1920
1924 1921 @pyqtSignature("int")
1925 1922 def on_specGraphPhase_stateChanged(self, p0):
1926 1923
1927 1924 self.__checkSpecGraphFilters()
1928 1925
1929 1926 @pyqtSignature("int")
1930 1927 def on_specGraphSaveSpectra_stateChanged(self, p0):
1931 1928 """
1932 1929 """
1933 1930 self.__checkSpecGraphSaving()
1934 1931
1935 1932 @pyqtSignature("int")
1936 1933 def on_specGraphSaveCross_stateChanged(self, p0):
1937 1934
1938 1935 self.__checkSpecGraphSaving()
1939 1936
1940 1937 @pyqtSignature("int")
1941 1938 def on_specGraphSaveRTIplot_stateChanged(self, p0):
1942 1939
1943 1940 self.__checkSpecGraphSaving()
1944 1941
1945 1942 @pyqtSignature("int")
1946 1943 def on_specGraphSaveRTInoise_stateChanged(self, p0):
1947 1944
1948 1945 self.__checkSpecGraphSaving()
1949 1946
1950 1947 @pyqtSignature("int")
1951 1948 def on_specGraphSaveCoherencemap_stateChanged(self, p0):
1952 1949
1953 1950 self.__checkSpecGraphSaving()
1954 1951
1955 1952 @pyqtSignature("int")
1956 1953 def on_specGraphSavePowerprofile_stateChanged(self, p0):
1957 1954
1958 1955 self.__checkSpecGraphSaving()
1959 1956
1960 1957 @pyqtSignature("int")
1961 1958 def on_specGraphftpSpectra_stateChanged(self, p0):
1962 1959 """
1963 1960 """
1964 1961 self.__checkSpecGraphFTP()
1965 1962
1966 1963
1967 1964 @pyqtSignature("int")
1968 1965 def on_specGraphftpCross_stateChanged(self, p0):
1969 1966
1970 1967 self.__checkSpecGraphFTP()
1971 1968
1972 1969 @pyqtSignature("int")
1973 1970 def on_specGraphftpRTIplot_stateChanged(self, p0):
1974 1971
1975 1972 self.__checkSpecGraphFTP()
1976 1973
1977 1974 @pyqtSignature("int")
1978 1975 def on_specGraphftpRTInoise_stateChanged(self, p0):
1979 1976
1980 1977 self.__checkSpecGraphFTP()
1981 1978
1982 1979 @pyqtSignature("int")
1983 1980 def on_specGraphftpCoherencemap_stateChanged(self, p0):
1984 1981
1985 1982 self.__checkSpecGraphFTP()
1986 1983
1987 1984 @pyqtSignature("int")
1988 1985 def on_specGraphftpPowerprofile_stateChanged(self, p0):
1989 1986
1990 1987 self.__checkSpecGraphFTP()
1991 1988
1992 1989 @pyqtSignature("")
1993 1990 def on_specGraphToolPath_clicked(self):
1994 1991 """
1995 1992 """
1996 1993 save_path = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
1997 1994 self.specGraphPath.setText(save_path)
1998 1995 if not os.path.exists(save_path):
1999 1996 self.console.clear()
2000 1997 self.console.append("Write a valid path")
2001 1998 return
2002 1999
2003 2000 @pyqtSignature("")
2004 2001 def on_specGraphClear_clicked(self):
2005 2002 return
2006 2003
2007 2004 @pyqtSignature("")
2008 2005 def on_specHeisGraphToolPath_clicked(self):
2009 2006 """
2010 2007 """
2011 2008 save_path = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly))
2012 2009 self.specHeisGraphPath.setText(save_path)
2013 2010 if not os.path.exists(save_path):
2014 2011 self.console.clear()
2015 2012 self.console.append("Write a valid path")
2016 2013 return
2017 2014
2018 2015 @pyqtSignature("int")
2019 2016 def on_specHeisOpCebIncoherent_stateChanged(self, p0):
2020 2017 """
2021 2018 Habilita la opcion de aadir el parmetro integraciones incoherentes a la Unidad de Procesamiento .
2022 2019 """
2023 2020 if p0 == 2:
2024 2021 self.specHeisOpIncoherent.setEnabled(True)
2025 2022 self.specHeisOpCobIncInt.setEnabled(True)
2026 2023 if p0 == 0:
2027 2024 self.specHeisOpIncoherent.setEnabled(False)
2028 2025 self.specHeisOpCobIncInt.setEnabled(False)
2029 2026
2030 2027 @pyqtSignature("")
2031 2028 def on_specHeisOpOk_clicked(self):
2032 2029 """
2033 2030 AÑADE OPERACION SPECTRAHEIS
2034 2031 """
2035 2032 addFTP = False
2036 2033 checkPath = False
2037 2034
2038 2035 self.actionSaveToolbar.setEnabled(False)
2039 2036 self.actionStarToolbar.setEnabled(False)
2040 2037
2041 2038 self.console.clear()
2042 2039 self.console.append("Checking input parameters ...")
2043 2040
2044 2041 puObj = self.getSelectedItemObj()
2045 2042 puObj.removeOperations()
2046 2043
2047 2044 if self.specHeisOpCebIncoherent.isChecked():
2048 2045 value = str(self.specHeisOpIncoherent.text())
2049 2046 name_operation = 'IncohInt4SpectraHeis'
2050 2047 optype = 'other'
2051 2048
2052 2049 name_parameter = 'timeInterval'
2053 2050 format = 'float'
2054 2051
2055 2052 if self.specOpCobIncInt.currentIndex() == 0:
2056 2053 name_parameter = 'timeInterval'
2057 2054 format = 'float'
2058 2055
2059 2056 if not isFloat(value):
2060 2057 self.console.append("Invalid value '%s' for '%s'" %(value, name_parameter))
2061 2058 return 0
2062 2059
2063 2060 opObj = puObj.addOperation(name=name_operation, optype=optype)
2064 2061
2065 2062 if not opObj.addParameter(name=name_parameter, value=value, format=format):
2066 2063 self.console.append("Invalid value '%s' for '%s'" %(value, name_parameter))
2067 2064 return 0
2068 2065
2069 2066 channelList = str(self.specHeisGgraphChannelList.text())
2070 2067 freq_range = str(self.specHeisGgraphXminXmax.text())
2071 2068 power_range = str(self.specHeisGgraphYminYmax.text())
2072 2069 time_range = str(self.specHeisGgraphTminTmax.text())
2073 2070 timerange = str(self.specHeisGgraphTimeRange.text())
2074 2071
2075 2072 # ---- Spectra Plot-----
2076 2073 if self.specHeisGraphCebSpectraplot.isChecked():
2077 2074
2078 2075 name_operation = 'SpectraHeisScope'
2079 2076 optype = 'other'
2080 2077 opObj = puObj.addOperation(name=name_operation, optype=optype)
2081 2078
2082 2079 name_parameter = 'id'
2083 2080 format = 'int'
2084 2081 value = opObj.id
2085 2082
2086 2083 if not opObj.addParameter(name=name_parameter, value=value, format=format):
2087 2084 self.console.append("Invalid value '%s' for '%s'" %(value, name_parameter))
2088 2085 return 0
2089 2086
2090 2087 if not (channelList == ''):
2091 2088 name_parameter = 'channelList'
2092 2089 format = 'intlist'
2093 2090
2094 2091 if not isList(channelList):
2095 2092 self.console.append("Invalid value '%s' for '%s'" %(channelList, name_parameter))
2096 2093 return 0
2097 2094
2098 2095 opObj.addParameter(name=name_parameter, value=channelList, format=format)
2099 2096
2100 2097 if not freq_range == '':
2101 2098 xvalueList = freq_range.split(',')
2102 2099
2103 2100 if len(xvalueList) != 2:
2104 2101 self.console.append("Invalid value '%s' for '%s'" %(freq_range, "xrange"))
2105 2102 return 0
2106 2103
2107 2104 value1 = xvalueList[0]
2108 2105 value2 = xvalueList[1]
2109 2106
2110 2107 if not isFloat(value1) or not isFloat(value2):
2111 2108 self.console.append("Invalid value '%s' for '%s'" %(freq_range, "xrange"))
2112 2109 return 0
2113 2110
2114 2111 name1 = 'xmin'
2115 2112 name2 = 'xmax'
2116 2113 format = 'float'
2117 2114
2118 2115 opObj.addParameter(name=name1, value=value1, format=format)
2119 2116 opObj.addParameter(name=name2, value=value2, format=format)
2120 2117
2121 2118 #------specHeisGgraphYmin-Ymax---
2122 2119 if not power_range == '':
2123 2120 yvalueList = power_range.split(",")
2124 2121
2125 2122 if len(yvalueList) != 2:
2126 2123 self.console.append("Invalid value '%s' for '%s'" %(power_range, "xrange"))
2127 2124 return 0
2128 2125
2129 2126 value1 = yvalueList[0]
2130 2127 value2 = yvalueList[1]
2131 2128
2132 2129 if not isFloat(value1) or not isFloat(value2):
2133 2130 self.console.append("Invalid value '%s' for '%s'" %(power_range, "yrange"))
2134 2131 return 0
2135 2132
2136 2133 name1 = 'ymin'
2137 2134 name2 = 'ymax'
2138 2135 format = 'float'
2139 2136 opObj.addParameter(name=name1, value=value1, format=format)
2140 2137 opObj.addParameter(name=name2, value=value2, format=format)
2141 2138
2142 2139 if self.specHeisGraphSaveSpectra.isChecked():
2143 2140 checkPath = True
2144 2141 name_parameter1 = 'save'
2145 2142 name_parameter2 = 'figpath'
2146 2143 name_parameter3 = 'figfile'
2147 2144 value1 = '1'
2148 2145 value2 = str(self.specHeisGraphPath.text())
2149 2146 value3 = str(self.specHeisGraphPrefix.text())
2150 2147 format1 = 'bool'
2151 2148 format2 = 'str'
2152 2149 opObj.addParameter(name=name_parameter1, value=value1 , format=format1)
2153 2150 opObj.addParameter(name=name_parameter2, value=value2, format=format2)
2154 2151 if not value3 == "":
2155 2152 try:
2156 2153 value3 = str(self.specHeisGraphPrefix.text())
2157 2154 except:
2158 2155 self.console.clear()
2159 2156 self.console.append("Please Write prefix")
2160 2157 return 0
2161 2158 opObj.addParameter(name='figfile', value=str(self.specHeisGraphPrefix.text()), format='str')
2162 2159
2163 2160 # opObj.addParameter(name=name_parameter3, value=value3, format=format2)
2164 2161 # opObj.addParameter(name='wr_period', value='5',format='int')
2165 2162
2166 2163 if self.specHeisGraphftpSpectra.isChecked():
2167 2164 opObj.addParameter(name='ftp', value='1', format='int')
2168 2165 self.addFTPConf2Operation(puObj, opObj)
2169 2166 addFTP = True
2170 2167
2171 2168 if self.specHeisGraphCebRTIplot.isChecked():
2172 2169 name_operation = 'RTIfromSpectraHeis'
2173 2170 optype = 'other'
2174 2171
2175 2172 name_parameter = 'id'
2176 2173 format = 'int'
2177 2174
2178 2175 opObj = puObj.addOperation(name=name_operation, optype=optype)
2179 2176 value = opObj.id
2180 2177 opObj.addParameter(name=name_parameter, value=value, format=format)
2181 2178
2182 2179 if not channelList == '':
2183 2180 opObj.addParameter(name='channelList', value=channelList, format='intlist')
2184 2181
2185 2182 if not time_range == '':
2186 2183 xvalueList = time_range.split(',')
2187 2184 try:
2188 2185 value = float(xvalueList[0])
2189 2186 value = float(xvalueList[1])
2190 2187 except:
2191 2188 return 0
2192 2189 format = 'float'
2193 2190 opObj.addParameter(name='xmin', value=xvalueList[0], format=format)
2194 2191 opObj.addParameter(name='xmax', value=xvalueList[1], format=format)
2195 2192
2196 2193 if not timerange == '':
2197 2194 format = 'int'
2198 2195 try:
2199 2196 timerange = int(timerange)
2200 2197 except:
2201 2198 return 0
2202 2199 opObj.addParameter(name='timerange', value=timerange, format=format)
2203 2200
2204 2201
2205 2202 if not power_range == '':
2206 2203 yvalueList = power_range.split(",")
2207 2204 try:
2208 2205 value = float(yvalueList[0])
2209 2206 value = float(yvalueList[1])
2210 2207 except:
2211 2208 return 0
2212 2209
2213 2210 format = 'float'
2214 2211 opObj.addParameter(name='ymin', value=yvalueList[0], format=format)
2215 2212 opObj.addParameter(name='ymax', value=yvalueList[1], format=format)
2216 2213
2217 2214 if self.specHeisGraphSaveRTIplot.isChecked():
2218 2215 checkPath = True
2219 2216 opObj.addParameter(name='save', value='1', format='bool')
2220 2217 opObj.addParameter(name='figpath', value=str(self.specHeisGraphPath.text()), format='str')
2221 2218 value = str(self.specHeisGraphPrefix.text())
2222 2219 if not value == "":
2223 2220 try:
2224 2221 value = str(self.specHeisGraphPrefix.text())
2225 2222 except:
2226 2223 self.console.clear()
2227 2224 self.console.append("Please Write prefix")
2228 2225 return 0
2229 2226 opObj.addParameter(name='figfile', value=value, format='str')
2230 2227
2231 2228 # test_ftp
2232 2229 if self.specHeisGraphftpRTIplot.isChecked():
2233 2230 opObj.addParameter(name='ftp', value='1', format='int')
2234 2231 self.addFTPConf2Operation(puObj, opObj)
2235 2232 addFTP = True
2236 2233
2237 2234 localfolder = None
2238 2235 if checkPath:
2239 2236 localfolder = str(self.specHeisGraphPath.text())
2240 2237 if localfolder == '':
2241 2238 self.console.clear()
2242 2239 self.console.append("Graphic path should be defined")
2243 2240 return 0
2244 2241
2245 2242 if addFTP and not localfolder:
2246 2243 self.console.clear()
2247 2244 self.console.append("You should save plots before send them to FTP Server")
2248 2245 return 0
2249 2246
2250 2247 # if something happened
2251 2248 parms_ok, output_path, blocksperfile, metada = self.checkInputsPUSave(datatype='SpectraHeis')
2252 2249 if parms_ok:
2253 2250 name_operation = 'FitsWriter'
2254 2251 optype = 'other'
2255 2252 name_parameter1 = 'path'
2256 2253 name_parameter2 = 'dataBlocksPerFile'
2257 2254 name_parameter3 = 'metadatafile'
2258 2255 value1 = output_path
2259 2256 value2 = blocksperfile
2260 2257 value3 = metada
2261 2258 format2 = "int"
2262 2259 format3 = "str"
2263 2260 opObj = puObj.addOperation(name=name_operation, optype=optype)
2264 2261 opObj.addParameter(name=name_parameter1, value=value1)
2265 2262 opObj.addParameter(name=name_parameter2, value=value2, format=format2)
2266 2263 opObj.addParameter(name=name_parameter3, value=value3, format=format3)
2267 2264
2268 2265 self.console.clear()
2269 2266 try:
2270 2267 self.refreshPUProperties(puObj)
2271 2268 except:
2272 2269 self.console.append("An error reading input parameters was found ... Check them!")
2273 2270 return 0
2274 2271
2275 2272 self.console.append("Save your project and press Play button to start signal processing")
2276 2273
2277 2274 self.actionSaveToolbar.setEnabled(True)
2278 2275 self.actionStarToolbar.setEnabled(True)
2279 2276
2280 2277 return 1
2281 2278 @pyqtSignature("int")
2282 2279 def on_specHeisGraphCebSpectraplot_stateChanged(self, p0):
2283 2280
2284 2281 if p0 == 2:
2285 2282 self.specHeisGgraphChannelList.setEnabled(True)
2286 2283 self.specHeisGgraphXminXmax.setEnabled(True)
2287 2284 self.specHeisGgraphYminYmax.setEnabled(True)
2288 2285 if p0 == 0:
2289 2286 self.specHeisGgraphXminXmax.setEnabled(False)
2290 2287 self.specHeisGgraphYminYmax.setEnabled(False)
2291 2288
2292 2289 @pyqtSignature("int")
2293 2290 def on_specHeisGraphCebRTIplot_stateChanged(self, p0):
2294 2291
2295 2292 if p0 == 2:
2296 2293 self.specHeisGgraphChannelList.setEnabled(True)
2297 2294 self.specHeisGgraphTminTmax.setEnabled(True)
2298 2295 self.specHeisGgraphYminYmax.setEnabled(True)
2299 2296 self.specHeisGgraphTimeRange.setEnabled(True)
2300 2297
2301 2298 if p0 == 0:
2302 2299 self.specHeisGgraphTminTmax.setEnabled(False)
2303 2300 self.specHeisGgraphYminYmax.setEnabled(False)
2304 2301 self.specHeisGgraphTimeRange.setEnabled(False)
2305 2302
2306 2303 @pyqtSignature("int")
2307 2304 def on_specHeisGraphSaveSpectra_stateChanged(self, p0):
2308 2305 """
2309 2306 """
2310 2307 if p0 == 2:
2311 2308 self.specHeisGraphPath.setEnabled(True)
2312 2309 self.specHeisGraphPrefix.setEnabled(True)
2313 2310 self.specHeisGraphToolPath.setEnabled(True)
2314 2311 if p0 == 0:
2315 2312 self.specHeisGraphPath.setEnabled(False)
2316 2313 self.specHeisGraphPrefix.setEnabled(False)
2317 2314 self.specHeisGraphToolPath.setEnabled(False)
2318 2315
2319 2316 @pyqtSignature("int")
2320 2317 def on_specHeisGraphSaveRTIplot_stateChanged(self, p0):
2321 2318 if p0 == 2:
2322 2319 self.specHeisGraphPath.setEnabled(True)
2323 2320 self.specHeisGraphPrefix.setEnabled(True)
2324 2321 self.specHeisGraphToolPath.setEnabled(True)
2325 2322
2326 2323 @pyqtSignature("int")
2327 2324 def on_specHeisGraphftpSpectra_stateChanged(self, p0):
2328 2325 """
2329 2326 """
2330 2327 if p0 == 2:
2331 2328 self.specHeisGgraphftpratio.setEnabled(True)
2332 2329
2333 2330 if p0 == 0:
2334 2331 self.specHeisGgraphftpratio.setEnabled(False)
2335 2332
2336 2333 @pyqtSignature("int")
2337 2334 def on_specHeisGraphftpRTIplot_stateChanged(self, p0):
2338 2335 if p0 == 2:
2339 2336 self.specHeisGgraphftpratio.setEnabled(True)
2340 2337
2341 2338 @pyqtSignature("")
2342 2339 def on_specHeisGraphClear_clicked(self):
2343 2340 pass
2344 2341
2345 2342 def __checkSpecGraphSaving(self):
2346 2343
2347 2344 enable = False
2348 2345
2349 2346 if self.specGraphSaveSpectra.checkState():
2350 2347 enable = True
2351 2348
2352 2349 if self.specGraphSaveCross.checkState():
2353 2350 enable = True
2354 2351
2355 2352 if self.specGraphSaveRTIplot.checkState():
2356 2353 enable = True
2357 2354
2358 2355 if self.specGraphSaveCoherencemap.checkState():
2359 2356 enable = True
2360 2357
2361 2358 if self.specGraphSavePowerprofile.checkState():
2362 2359 enable = True
2363 2360
2364 2361 if self.specGraphSaveRTInoise.checkState():
2365 2362 enable = True
2366 2363
2367 2364 self.specGraphPath.setEnabled(enable)
2368 2365 self.specGraphPrefix.setEnabled(enable)
2369 2366 self.specGraphToolPath.setEnabled(enable)
2370 2367
2371 2368 self.specGgraphftpratio.setEnabled(enable)
2372 2369
2373 2370 def __checkSpecGraphFTP(self):
2374 2371
2375 2372 enable = False
2376 2373
2377 2374 if self.specGraphftpSpectra.checkState():
2378 2375 enable = True
2379 2376
2380 2377 if self.specGraphftpCross.checkState():
2381 2378 enable = True
2382 2379
2383 2380 if self.specGraphftpRTIplot.checkState():
2384 2381 enable = True
2385 2382
2386 2383 if self.specGraphftpCoherencemap.checkState():
2387 2384 enable = True
2388 2385
2389 2386 if self.specGraphftpPowerprofile.checkState():
2390 2387 enable = True
2391 2388
2392 2389 if self.specGraphftpRTInoise.checkState():
2393 2390 enable = True
2394 2391
2395 2392 # self.specGgraphftpratio.setEnabled(enable)
2396 2393
2397 2394 def __checkSpecGraphFilters(self):
2398 2395
2399 2396 freq = False
2400 2397 height = False
2401 2398 db = False
2402 2399 time = False
2403 2400 magnitud = False
2404 2401 phase = False
2405 2402 channelList = False
2406 2403
2407 2404 if self.specGraphCebSpectraplot.checkState():
2408 2405 freq = True
2409 2406 height = True
2410 2407 db = True
2411 2408 channelList = True
2412 2409
2413 2410 if self.specGraphCebCrossSpectraplot.checkState():
2414 2411 freq = True
2415 2412 height = True
2416 2413 db = True
2417 2414 magnitud = True
2418 2415 phase = True
2419 2416
2420 2417 if self.specGraphCebRTIplot.checkState():
2421 2418 height = True
2422 2419 db = True
2423 2420 time = True
2424 2421 channelList = True
2425 2422
2426 2423 if self.specGraphCebCoherencmap.checkState():
2427 2424 height = True
2428 2425 time = True
2429 2426 magnitud = True
2430 2427 phase = True
2431 2428
2432 2429 if self.specGraphPowerprofile.checkState():
2433 2430 height = True
2434 2431 db = True
2435 2432 channelList = True
2436 2433
2437 2434 if self.specGraphCebRTInoise.checkState():
2438 2435 db = True
2439 2436 time = True
2440 2437 channelList = True
2441 2438
2442 2439
2443 2440 self.specGgraphFreq.setEnabled(freq)
2444 2441 self.specGgraphHeight.setEnabled(height)
2445 2442 self.specGgraphDbsrange.setEnabled(db)
2446 2443 self.specGgraphTminTmax.setEnabled(time)
2447 2444
2448 2445 self.specGgraphmagnitud.setEnabled(magnitud)
2449 2446 self.specGgraphPhase.setEnabled(phase)
2450 2447 self.specGgraphChannelList.setEnabled(channelList)
2451 2448
2452 2449 def __getParmsFromProjectWindow(self):
2453 2450 """
2454 2451 Check Inputs Project:
2455 2452 - project_name
2456 2453 - datatype
2457 2454 - ext
2458 2455 - data_path
2459 2456 - readmode
2460 2457 - delay
2461 2458 - set
2462 2459 - walk
2463 2460 """
2464 2461 parms_ok = True
2465 2462
2466 2463 project_name = str(self.proName.text())
2467 2464
2468 2465 if project_name == '' or project_name == None:
2469 2466 outputstr = "Enter a project Name"
2470 2467 self.console.append(outputstr)
2471 2468 parms_ok = False
2472 2469 project_name = None
2473 2470
2474 2471 description = str(self.proDescription.toPlainText())
2475 2472
2476 2473 datatype = str(self.proComDataType.currentText())
2477 2474
2478 2475 ext = str(self.proDataType.text())
2479 2476
2480 2477 dpath = str(self.proDataPath.text())
2481 2478
2482 2479 if dpath == '':
2483 2480 outputstr = 'Datapath is empty'
2484 2481 self.console.append(outputstr)
2485 2482 parms_ok = False
2486 2483 dpath = None
2487 2484
2488 2485 if dpath != None:
2489 2486 if not os.path.isdir(dpath):
2490 2487 outputstr = 'Datapath (%s) does not exist' % dpath
2491 2488 self.console.append(outputstr)
2492 2489 parms_ok = False
2493 2490 dpath = None
2494 2491
2495 2492 online = int(self.proComReadMode.currentIndex())
2496 2493
2497 2494 delay = None
2498 2495 if online==1:
2499 2496 try:
2500 2497 delay = int(str(self.proDelay.text()))
2501 2498 except:
2502 2499 outputstr = 'Delay value (%s) must be a integer number' %str(self.proDelay.text())
2503 2500 self.console.append(outputstr)
2504 2501 parms_ok = False
2505 2502
2506 2503
2507 2504 set = None
2508 2505 value = str(self.proSet.text())
2509 2506 try:
2510 2507 set = int(value)
2511 2508 except:
2512 2509 pass
2513 2510
2514 2511 ippKm = None
2515 2512
2516 2513 value = str(self.proIPPKm.text())
2517 2514
2518 2515 try:
2519 2516 ippKm = float(value)
2520 2517 except:
2521 2518 if datatype=="USRP":
2522 2519 outputstr = 'IPP value "%s" must be a float number' % str(self.proIPPKm.text())
2523 2520 self.console.append(outputstr)
2524 2521 parms_ok = False
2525 2522
2526 2523 walk = int(self.proComWalk.currentIndex())
2527 2524 expLabel = str(self.proExpLabel.text())
2528 2525
2529 2526 startDate = str(self.proComStartDate.currentText())
2530 2527 endDate = str(self.proComEndDate.currentText())
2531 2528
2532 2529 # startDateList = startDate.split("/")
2533 2530 # endDateList = endDate.split("/")
2534 2531 #
2535 2532 # startDate = datetime.date(int(startDateList[0]), int(startDateList[1]), int(startDateList[2]))
2536 2533 # endDate = datetime.date(int(endDateList[0]), int(endDateList[1]), int(endDateList[2]))
2537 2534
2538 2535 startTime = self.proStartTime.time()
2539 2536 endTime = self.proEndTime.time()
2540 2537
2541 2538 startTime = str(startTime.toString("H:m:s"))
2542 2539 endTime = str(endTime.toString("H:m:s"))
2543 2540
2544 2541 projectParms = ProjectParms()
2545 2542
2546 2543 projectParms.name = project_name
2547 2544 projectParms.description = description
2548 2545 projectParms.datatype = datatype
2549 2546 projectParms.ext = ext
2550 2547 projectParms.dpath = dpath
2551 2548 projectParms.online = online
2552 2549 projectParms.startDate = startDate
2553 2550 projectParms.endDate = endDate
2554 2551 projectParms.startTime = startTime
2555 2552 projectParms.endTime = endTime
2556 2553 projectParms.delay = delay
2557 2554 projectParms.walk = walk
2558 2555 projectParms.expLabel = expLabel
2559 2556 projectParms.set = set
2560 2557 projectParms.ippKm = ippKm
2561 2558 projectParms.parmsOk = parms_ok
2562 2559
2563 2560 return projectParms
2564 2561
2565 2562
2566 2563 def __getParmsFromProjectObj(self, projectObjView):
2567 2564
2568 2565 parms_ok = True
2569 2566
2570 2567 project_name, description = projectObjView.name, projectObjView.description
2571 2568
2572 2569 readUnitObj = projectObjView.getReadUnitObj()
2573 2570 datatype = readUnitObj.datatype
2574 2571
2575 2572 operationObj = readUnitObj.getOperationObj(name='run')
2576 2573
2577 2574 dpath = operationObj.getParameterValue(parameterName='path')
2578 2575 startDate = operationObj.getParameterValue(parameterName='startDate')
2579 2576 endDate = operationObj.getParameterValue(parameterName='endDate')
2580 2577
2581 2578 startDate = startDate.strftime("%Y/%m/%d")
2582 2579 endDate = endDate.strftime("%Y/%m/%d")
2583 2580
2584 2581 startTime = operationObj.getParameterValue(parameterName='startTime')
2585 2582 endTime = operationObj.getParameterValue(parameterName='endTime')
2586 2583
2587 2584 startTime = startTime.strftime("%H:%M:%S")
2588 2585 endTime = endTime.strftime("%H:%M:%S")
2589 2586
2590 2587 online = 0
2591 2588 try:
2592 2589 online = operationObj.getParameterValue(parameterName='online')
2593 2590 except:
2594 2591 pass
2595 2592
2596 2593 delay = ''
2597 2594 try:
2598 2595 delay = operationObj.getParameterValue(parameterName='delay')
2599 2596 except:
2600 2597 pass
2601 2598
2602 2599 walk = 0
2603 2600 try:
2604 2601 walk = operationObj.getParameterValue(parameterName='walk')
2605 2602 except:
2606 2603 pass
2607 2604
2608 2605 set = ''
2609 2606 try:
2610 2607 set = operationObj.getParameterValue(parameterName='set')
2611 2608 except:
2612 2609 pass
2613 2610
2614 2611 expLabel = ''
2615 2612 try:
2616 2613 expLabel = operationObj.getParameterValue(parameterName='expLabel')
2617 2614 except:
2618 2615 pass
2619 2616
2620 2617 ippKm = ''
2621 2618 if datatype.lower() == 'usrp':
2622 2619 try:
2623 2620 ippKm = operationObj.getParameterValue(parameterName='ippKm')
2624 2621 except:
2625 2622 pass
2626 2623
2627 2624 projectParms = ProjectParms()
2628 2625
2629 2626 projectParms.name = project_name
2630 2627 projectParms.description = description
2631 2628 projectParms.datatype = datatype
2632 2629 projectParms.ext = None
2633 2630 projectParms.dpath = dpath
2634 2631 projectParms.online = online
2635 2632 projectParms.startDate = startDate
2636 2633 projectParms.endDate = endDate
2637 2634 projectParms.startTime = startTime
2638 2635 projectParms.endTime = endTime
2639 2636 projectParms.delay=delay
2640 2637 projectParms.walk=walk
2641 2638 projectParms.set=set
2642 2639 projectParms.ippKm=ippKm
2643 2640 projectParms.expLabel = expLabel
2644 2641 projectParms.parmsOk=parms_ok
2645 2642
2646 2643 return projectParms
2647 2644
2648 2645 def refreshProjectWindow(self, projectObjView):
2649 2646
2650 2647 projectParms = self.__getParmsFromProjectObj(projectObjView)
2651 2648
2652 2649 index = projectParms.getDatatypeIndex()
2653 2650
2654 2651 self.proName.setText(projectParms.name)
2655 2652 self.proDescription.clear()
2656 2653 self.proDescription.append(projectParms.description)
2657 2654
2658 2655 self.on_proComDataType_activated(index=index)
2659 2656 self.proDataPath.setText(projectParms.dpath)
2660 2657 self.proComDataType.setCurrentIndex(index)
2661 2658 self.proComReadMode.setCurrentIndex(projectParms.online)
2662 2659 self.proDelay.setText(str(projectParms.delay))
2663 2660 self.proSet.setText(str(projectParms.set))
2664 2661 self.proIPPKm.setText(str(projectParms.ippKm))
2665 2662 self.proComWalk.setCurrentIndex(projectParms.walk)
2666 2663 self.proExpLabel.setText(str(projectParms.expLabel).strip())
2667 2664
2668 2665 dateList = self.loadDays(data_path = projectParms.dpath,
2669 2666 ext = projectParms.getExt(),
2670 2667 walk = projectParms.walk,
2671 2668 expLabel = projectParms.expLabel)
2672 2669
2673 2670 try:
2674 2671 startDateIndex = dateList.index(projectParms.startDate)
2675 2672 except:
2676 2673 startDateIndex = 0
2677 2674
2678 2675 try:
2679 2676 endDateIndex = dateList.index(projectParms.endDate)
2680 2677 except:
2681 2678 endDateIndex = int(self.proComEndDate.count()-1)
2682 2679
2683 2680 self.proComStartDate.setCurrentIndex(startDateIndex)
2684 2681 self.proComEndDate.setCurrentIndex(endDateIndex)
2685 2682
2686 2683 startlist = projectParms.startTime.split(":")
2687 2684 endlist = projectParms.endTime.split(":")
2688 2685
2689 2686 self.time.setHMS(int(startlist[0]), int(startlist[1]), int(startlist[2]))
2690 2687 self.proStartTime.setTime(self.time)
2691 2688
2692 2689 self.time.setHMS(int(endlist[0]), int(endlist[1]), int(endlist[2]))
2693 2690 self.proEndTime.setTime(self.time)
2694 2691
2695 2692
2696 2693 def __refreshVoltageWindow(self, puObj):
2697 2694
2698 2695 opObj = puObj.getOperationObj(name='setRadarFrequency')
2699 2696 if opObj == None:
2700 2697 self.volOpRadarfrequency.clear()
2701 2698 self.volOpCebRadarfrequency.setCheckState(0)
2702 2699 else:
2703 2700 value = opObj.getParameterValue(parameterName='frequency')
2704 2701 value = str(float(value)/1e6)
2705 2702 self.volOpRadarfrequency.setText(value)
2706 2703 self.volOpRadarfrequency.setEnabled(True)
2707 2704 self.volOpCebRadarfrequency.setCheckState(QtCore.Qt.Checked)
2708 2705
2709 2706 opObj = puObj.getOperationObj(name="selectChannels")
2710 2707
2711 2708 if opObj == None:
2712 2709 opObj = puObj.getOperationObj(name="selectChannelsByIndex")
2713 2710
2714 2711 if opObj == None:
2715 2712 self.volOpChannel.clear()
2716 2713 self.volOpCebChannels.setCheckState(0)
2717 2714 else:
2718 2715 channelEnabled = False
2719 2716 try:
2720 2717 value = opObj.getParameterValue(parameterName='channelList')
2721 2718 value = str(value)[1:-1]
2722 2719 channelEnabled = True
2723 2720 channelMode = 0
2724 2721 except:
2725 2722 pass
2726 2723 try:
2727 2724 value = opObj.getParameterValue(parameterName='channelIndexList')
2728 2725 value = str(value)[1:-1]
2729 2726 channelEnabled = True
2730 2727 channelMode = 1
2731 2728 except:
2732 2729 pass
2733 2730
2734 2731 if channelEnabled:
2735 2732 self.volOpChannel.setText(value)
2736 2733 self.volOpChannel.setEnabled(True)
2737 2734 self.volOpCebChannels.setCheckState(QtCore.Qt.Checked)
2738 2735 self.volOpComChannels.setCurrentIndex(channelMode)
2739 2736
2740 2737 opObj = puObj.getOperationObj(name="selectHeights")
2741 2738 if opObj == None:
2742 2739 self.volOpHeights.clear()
2743 2740 self.volOpCebHeights.setCheckState(0)
2744 2741 else:
2745 2742 value1 = int(opObj.getParameterValue(parameterName='minHei'))
2746 2743 value1 = str(value1)
2747 2744 value2 = int(opObj.getParameterValue(parameterName='maxHei'))
2748 2745 value2 = str(value2)
2749 2746 value = value1 + "," + value2
2750 2747 self.volOpHeights.setText(value)
2751 2748 self.volOpHeights.setEnabled(True)
2752 2749 self.volOpCebHeights.setCheckState(QtCore.Qt.Checked)
2753 2750
2754 2751 opObj = puObj.getOperationObj(name="filterByHeights")
2755 2752 if opObj == None:
2756 2753 self.volOpFilter.clear()
2757 2754 self.volOpCebFilter.setCheckState(0)
2758 2755 else:
2759 2756 value = opObj.getParameterValue(parameterName='window')
2760 2757 value = str(value)
2761 2758 self.volOpFilter.setText(value)
2762 2759 self.volOpFilter.setEnabled(True)
2763 2760 self.volOpCebFilter.setCheckState(QtCore.Qt.Checked)
2764 2761
2765 2762 opObj = puObj.getOperationObj(name="ProfileSelector")
2766 2763 if opObj == None:
2767 2764 self.volOpProfile.clear()
2768 2765 self.volOpCebProfile.setCheckState(0)
2769 2766 else:
2770 2767 for parmObj in opObj.getParameterObjList():
2771 2768
2772 2769 if parmObj.name == "profileList":
2773 2770 value = parmObj.getValue()
2774 2771 value = str(value)[1:-1]
2775 2772 self.volOpProfile.setText(value)
2776 2773 self.volOpProfile.setEnabled(True)
2777 2774 self.volOpCebProfile.setCheckState(QtCore.Qt.Checked)
2778 2775 self.volOpComProfile.setCurrentIndex(0)
2779 2776
2780 2777 if parmObj.name == "profileRangeList":
2781 2778 value = parmObj.getValue()
2782 2779 value = str(value)[1:-1]
2783 2780 self.volOpProfile.setText(value)
2784 2781 self.volOpProfile.setEnabled(True)
2785 2782 self.volOpCebProfile.setCheckState(QtCore.Qt.Checked)
2786 2783 self.volOpComProfile.setCurrentIndex(1)
2787 2784
2788 2785 if parmObj.name == "rangeList":
2789 2786 value = parmObj.getValue()
2790 2787 value = str(value)[1:-1]
2791 2788 self.volOpProfile.setText(value)
2792 2789 self.volOpProfile.setEnabled(True)
2793 2790 self.volOpCebProfile.setCheckState(QtCore.Qt.Checked)
2794 2791 self.volOpComProfile.setCurrentIndex(2)
2795 2792
2796 2793 opObj = puObj.getOperationObj(name="Decoder")
2797 2794 self.volOpCode.setText("")
2798 2795 if opObj == None:
2799 2796 self.volOpCebDecodification.setCheckState(0)
2800 2797 else:
2801 2798 self.volOpCebDecodification.setCheckState(QtCore.Qt.Checked)
2802 2799
2803 2800 parmObj = opObj.getParameterObj('code')
2804 2801
2805 2802 if parmObj == None:
2806 2803 self.volOpComCode.setCurrentIndex(0)
2807 2804 else:
2808 2805
2809 2806 parmObj1 = opObj.getParameterObj('nCode')
2810 2807 parmObj2 = opObj.getParameterObj('nBaud')
2811 2808
2812 2809 if parmObj1 == None or parmObj2 == None:
2813 2810 self.volOpComCode.setCurrentIndex(0)
2814 2811 else:
2815 2812 code = ast.literal_eval(str(parmObj.getValue()))
2816 2813 nCode = parmObj1.getValue()
2817 2814 nBaud = parmObj2.getValue()
2818 2815
2819 2816 code = numpy.asarray(code).reshape((nCode, nBaud)).tolist()
2820 2817
2821 2818 #User defined by default
2822 2819 self.volOpComCode.setCurrentIndex(13)
2823 2820 self.volOpCode.setText(str(code))
2824 2821
2825 2822 if nCode == 1:
2826 2823 if nBaud == 3:
2827 2824 self.volOpComCode.setCurrentIndex(1)
2828 2825 if nBaud == 4:
2829 2826 self.volOpComCode.setCurrentIndex(2)
2830 2827 if nBaud == 5:
2831 2828 self.volOpComCode.setCurrentIndex(3)
2832 2829 if nBaud == 7:
2833 2830 self.volOpComCode.setCurrentIndex(4)
2834 2831 if nBaud == 11:
2835 2832 self.volOpComCode.setCurrentIndex(5)
2836 2833 if nBaud == 13:
2837 2834 self.volOpComCode.setCurrentIndex(6)
2838 2835
2839 2836 if nCode == 2:
2840 2837 if nBaud == 3:
2841 2838 self.volOpComCode.setCurrentIndex(7)
2842 2839 if nBaud == 4:
2843 2840 self.volOpComCode.setCurrentIndex(8)
2844 2841 if nBaud == 5:
2845 2842 self.volOpComCode.setCurrentIndex(9)
2846 2843 if nBaud == 7:
2847 2844 self.volOpComCode.setCurrentIndex(10)
2848 2845 if nBaud == 11:
2849 2846 self.volOpComCode.setCurrentIndex(11)
2850 2847 if nBaud == 13:
2851 2848 self.volOpComCode.setCurrentIndex(12)
2852 2849
2853 2850
2854 2851 opObj = puObj.getOperationObj(name="deFlip")
2855 2852 if opObj == None:
2856 2853 self.volOpFlip.clear()
2857 2854 self.volOpFlip.setEnabled(False)
2858 2855 self.volOpCebFlip.setCheckState(0)
2859 2856 else:
2860 2857 try:
2861 2858 value = opObj.getParameterValue(parameterName='channelList')
2862 2859 value = str(value)[1:-1]
2863 2860 except:
2864 2861 value = ""
2865 2862
2866 2863 self.volOpFlip.setText(value)
2867 2864 self.volOpFlip.setEnabled(True)
2868 2865 self.volOpCebFlip.setCheckState(QtCore.Qt.Checked)
2869 2866
2870 2867 opObj = puObj.getOperationObj(name="CohInt")
2871 2868 if opObj == None:
2872 2869 self.volOpCohInt.clear()
2873 2870 self.volOpCebCohInt.setCheckState(0)
2874 2871 else:
2875 2872 value = opObj.getParameterValue(parameterName='n')
2876 2873 self.volOpCohInt.setText(str(value))
2877 2874 self.volOpCohInt.setEnabled(True)
2878 2875 self.volOpCebCohInt.setCheckState(QtCore.Qt.Checked)
2879 2876
2880 2877 opObj = puObj.getOperationObj(name='Scope')
2881 2878 if opObj == None:
2882 2879 self.volGraphCebshow.setCheckState(0)
2883 2880 else:
2884 2881 self.volGraphCebshow.setCheckState(QtCore.Qt.Checked)
2885 2882
2886 2883 parmObj = opObj.getParameterObj(parameterName='channelList')
2887 2884
2888 2885 if parmObj == None:
2889 2886 self.volGraphChannelList.clear()
2890 2887 else:
2891 2888 value = parmObj.getValue()
2892 2889 value = str(value)
2893 2890 self.volGraphChannelList.setText(value)
2894 2891 self.volOpProfile.setEnabled(True)
2895 2892
2896 2893 parmObj1 = opObj.getParameterObj(parameterName='xmin')
2897 2894 parmObj2 = opObj.getParameterObj(parameterName='xmax')
2898 2895
2899 2896 if parmObj1 == None or parmObj2 ==None:
2900 2897 self.volGraphfreqrange.clear()
2901 2898 else:
2902 2899 value1 = parmObj1.getValue()
2903 2900 value1 = str(value1)
2904 2901 value2 = parmObj2.getValue()
2905 2902 value2 = str(value2)
2906 2903 value = value1 + "," + value2
2907 2904 self.volGraphfreqrange.setText(value)
2908 2905
2909 2906 parmObj1 = opObj.getParameterObj(parameterName='ymin')
2910 2907 parmObj2 = opObj.getParameterObj(parameterName='ymax')
2911 2908
2912 2909 if parmObj1 == None or parmObj2 ==None:
2913 2910 self.volGraphHeightrange.clear()
2914 2911 else:
2915 2912 value1 = parmObj1.getValue()
2916 2913 value1 = str(value1)
2917 2914 value2 = parmObj2.getValue()
2918 2915 value2 = str(value2)
2919 2916 value = value1 + "," + value2
2920 2917 value2 = str(value2)
2921 2918 self.volGraphHeightrange.setText(value)
2922 2919
2923 2920 parmObj = opObj.getParameterObj(parameterName='save')
2924 2921
2925 2922 if parmObj == None:
2926 2923 self.volGraphCebSave.setCheckState(QtCore.Qt.Unchecked)
2927 2924 else:
2928 2925 value = parmObj.getValue()
2929 2926 if int(value):
2930 2927 self.volGraphCebSave.setCheckState(QtCore.Qt.Checked)
2931 2928 else:
2932 2929 self.volGraphCebSave.setCheckState(QtCore.Qt.Unchecked)
2933 2930
2934 2931 parmObj = opObj.getParameterObj(parameterName='figpath')
2935 2932 if parmObj == None:
2936 2933 self.volGraphPath.clear()
2937 2934 else:
2938 2935 value = parmObj.getValue()
2939 2936 path = str(value)
2940 2937 self.volGraphPath.setText(path)
2941 2938
2942 2939 parmObj = opObj.getParameterObj(parameterName='figfile')
2943 2940 if parmObj == None:
2944 2941 self.volGraphPrefix.clear()
2945 2942 else:
2946 2943 value = parmObj.getValue()
2947 2944 figfile = str(value)
2948 2945 self.volGraphPrefix.setText(figfile)
2949 2946
2950 2947 # outputVoltageWrite
2951 2948 opObj = puObj.getOperationObj(name='VoltageWriter')
2952 2949
2953 2950 if opObj == None:
2954 2951 self.volOutputPath.clear()
2955 2952 self.volOutputblocksperfile.clear()
2956 2953 self.volOutputprofilesperblock.clear()
2957 2954 else:
2958 2955 parmObj = opObj.getParameterObj(parameterName='path')
2959 2956 if parmObj == None:
2960 2957 self.volOutputPath.clear()
2961 2958 else:
2962 2959 value = parmObj.getValue()
2963 2960 path = str(value)
2964 2961 self.volOutputPath.setText(path)
2965 2962
2966 2963 parmObj = opObj.getParameterObj(parameterName='blocksPerFile')
2967 2964 if parmObj == None:
2968 2965 self.volOutputblocksperfile.clear()
2969 2966 else:
2970 2967 value = parmObj.getValue()
2971 2968 blocksperfile = str(value)
2972 2969 self.volOutputblocksperfile.setText(blocksperfile)
2973 2970
2974 2971 parmObj = opObj.getParameterObj(parameterName='profilesPerBlock')
2975 2972 if parmObj == None:
2976 2973 self.volOutputprofilesperblock.clear()
2977 2974 else:
2978 2975 value = parmObj.getValue()
2979 2976 profilesPerBlock = str(value)
2980 2977 self.volOutputprofilesperblock.setText(profilesPerBlock)
2981 2978
2982 2979 return
2983 2980
2984 2981 def __refreshSpectraWindow(self, puObj):
2985 2982
2986 2983 inputId = puObj.getInputId()
2987 2984 inputPUObj = self.__puObjDict[inputId]
2988 2985
2989 2986 if inputPUObj.datatype == 'Voltage':
2990 2987 self.specOpnFFTpoints.setEnabled(True)
2991 2988 self.specOpProfiles.setEnabled(True)
2992 2989 self.specOpippFactor.setEnabled(True)
2993 2990 else:
2994 2991 self.specOpnFFTpoints.setEnabled(False)
2995 2992 self.specOpProfiles.setEnabled(False)
2996 2993 self.specOpippFactor.setEnabled(False)
2997 2994
2998 2995 opObj = puObj.getOperationObj(name='setRadarFrequency')
2999 2996 if opObj == None:
3000 2997 self.specOpRadarfrequency.clear()
3001 2998 self.specOpCebRadarfrequency.setCheckState(0)
3002 2999 else:
3003 3000 value = opObj.getParameterValue(parameterName='frequency')
3004 3001 value = str(float(value)/1e6)
3005 3002 self.specOpRadarfrequency.setText(value)
3006 3003 self.specOpRadarfrequency.setEnabled(True)
3007 3004 self.specOpCebRadarfrequency.setCheckState(QtCore.Qt.Checked)
3008 3005
3009 3006 opObj = puObj.getOperationObj(name="run")
3010 3007 if opObj == None:
3011 3008 self.specOpnFFTpoints.clear()
3012 3009 self.specOpProfiles.clear()
3013 3010 self.specOpippFactor.clear()
3014 3011 else:
3015 3012 parmObj = opObj.getParameterObj(parameterName='nFFTPoints')
3016 3013 if parmObj == None:
3017 3014 self.specOpnFFTpoints.clear()
3018 3015 else:
3019 3016 self.specOpnFFTpoints.setEnabled(True)
3020 3017 value = opObj.getParameterValue(parameterName='nFFTPoints')
3021 3018 self.specOpnFFTpoints.setText(str(value))
3022 3019
3023 3020 parmObj = opObj.getParameterObj(parameterName='nProfiles')
3024 3021 if parmObj == None:
3025 3022 self.specOpProfiles.clear()
3026 3023 else:
3027 3024 self.specOpProfiles.setEnabled(True)
3028 3025 value = opObj.getParameterValue(parameterName='nProfiles')
3029 3026 self.specOpProfiles.setText(str(value))
3030 3027
3031 3028 parmObj = opObj.getParameterObj(parameterName='ippFactor')
3032 3029 if parmObj == None:
3033 3030 self.specOpippFactor.clear()
3034 3031 else:
3035 3032 self.specOpippFactor.setEnabled(True)
3036 3033 value = opObj.getParameterValue(parameterName='ippFactor')
3037 3034 self.specOpippFactor.setText(str(value))
3038 3035
3039 3036 opObj = puObj.getOperationObj(name="run")
3040 3037 if opObj == None:
3041 3038 self.specOppairsList.clear()
3042 3039 self.specOpCebCrossSpectra.setCheckState(0)
3043 3040 else:
3044 3041 parmObj = opObj.getParameterObj(parameterName='pairsList')
3045 3042 if parmObj == None:
3046 3043 self.specOppairsList.clear()
3047 3044 self.specOpCebCrossSpectra.setCheckState(0)
3048 3045 else:
3049 3046 value = opObj.getParameterValue(parameterName='pairsList')
3050 3047 value = str(value)[1:-1]
3051 3048 self.specOppairsList.setText(str(value))
3052 3049 self.specOppairsList.setEnabled(True)
3053 3050 self.specOpCebCrossSpectra.setCheckState(QtCore.Qt.Checked)
3054 3051
3055 3052 opObj = puObj.getOperationObj(name="selectChannels")
3056 3053
3057 3054 if opObj == None:
3058 3055 opObj = puObj.getOperationObj(name="selectChannelsByIndex")
3059 3056
3060 3057 if opObj == None:
3061 3058 self.specOpChannel.clear()
3062 3059 self.specOpCebChannel.setCheckState(0)
3063 3060 else:
3064 3061 channelEnabled = False
3065 3062 try:
3066 3063 value = opObj.getParameterValue(parameterName='channelList')
3067 3064 value = str(value)[1:-1]
3068 3065 channelEnabled = True
3069 3066 channelMode = 0
3070 3067 except:
3071 3068 pass
3072 3069 try:
3073 3070 value = opObj.getParameterValue(parameterName='channelIndexList')
3074 3071 value = str(value)[1:-1]
3075 3072 channelEnabled = True
3076 3073 channelMode = 1
3077 3074 except:
3078 3075 pass
3079 3076
3080 3077 if channelEnabled:
3081 3078 self.specOpChannel.setText(value)
3082 3079 self.specOpChannel.setEnabled(True)
3083 3080 self.specOpCebChannel.setCheckState(QtCore.Qt.Checked)
3084 3081 self.specOpComChannel.setCurrentIndex(channelMode)
3085 3082
3086 3083 opObj = puObj.getOperationObj(name="selectHeights")
3087 3084 if opObj == None:
3088 3085 self.specOpHeights.clear()
3089 3086 self.specOpCebHeights.setCheckState(0)
3090 3087 else:
3091 3088 value1 = int(opObj.getParameterValue(parameterName='minHei'))
3092 3089 value1 = str(value1)
3093 3090 value2 = int(opObj.getParameterValue(parameterName='maxHei'))
3094 3091 value2 = str(value2)
3095 3092 value = value1 + "," + value2
3096 3093 self.specOpHeights.setText(value)
3097 3094 self.specOpHeights.setEnabled(True)
3098 3095 self.specOpCebHeights.setCheckState(QtCore.Qt.Checked)
3099 3096
3100 3097 opObj = puObj.getOperationObj(name="IncohInt")
3101 3098 if opObj == None:
3102 3099 self.specOpIncoherent.clear()
3103 3100 self.specOpCebIncoherent.setCheckState(0)
3104 3101 else:
3105 3102 for parmObj in opObj.getParameterObjList():
3106 3103 if parmObj.name == 'timeInterval':
3107 3104 value = opObj.getParameterValue(parameterName='timeInterval')
3108 3105 value = float(value)
3109 3106 self.specOpIncoherent.setText(str(value))
3110 3107 self.specOpIncoherent.setEnabled(True)
3111 3108 self.specOpCebIncoherent.setCheckState(QtCore.Qt.Checked)
3112 3109 self.specOpCobIncInt.setCurrentIndex(0)
3113 3110
3114 3111 if parmObj.name == 'n':
3115 3112 value = opObj.getParameterValue(parameterName='n')
3116 3113 value = float(value)
3117 3114 self.specOpIncoherent.setText(str(value))
3118 3115 self.specOpIncoherent.setEnabled(True)
3119 3116 self.specOpCebIncoherent.setCheckState(QtCore.Qt.Checked)
3120 3117 self.specOpCobIncInt.setCurrentIndex(1)
3121 3118
3122 3119 opObj = puObj.getOperationObj(name="removeDC")
3123 3120 if opObj == None:
3124 3121 self.specOpCebRemoveDC.setCheckState(0)
3125 3122 else:
3126 3123 self.specOpCebRemoveDC.setCheckState(QtCore.Qt.Checked)
3127 3124 value = opObj.getParameterValue(parameterName='mode')
3128 3125 if value == 1:
3129 3126 self.specOpComRemoveDC.setCurrentIndex(0)
3130 3127 elif value == 2:
3131 3128 self.specOpComRemoveDC.setCurrentIndex(1)
3132 3129
3133 3130 opObj = puObj.getOperationObj(name="removeInterference")
3134 3131 if opObj == None:
3135 3132 self.specOpCebRemoveInt.setCheckState(0)
3136 3133 else:
3137 3134 self.specOpCebRemoveInt.setCheckState(QtCore.Qt.Checked)
3138 3135
3139 3136 opObj = puObj.getOperationObj(name='getNoise')
3140 3137 if opObj == None:
3141 3138 self.specOpCebgetNoise.setCheckState(0)
3142 3139 self.specOpgetNoise.clear()
3143 3140 else:
3144 3141 self.specOpCebgetNoise.setCheckState(QtCore.Qt.Checked)
3145 3142 parmObj = opObj.getParameterObj(parameterName='minHei')
3146 3143 if parmObj == None:
3147 3144 self.specOpgetNoise.clear()
3148 3145 value1 = None
3149 3146 else:
3150 3147 value1 = opObj.getParameterValue(parameterName='minHei')
3151 3148 value1 = str(value1)
3152 3149 parmObj = opObj.getParameterObj(parameterName='maxHei')
3153 3150 if parmObj == None:
3154 3151 value2 = None
3155 3152 value = value1
3156 3153 self.specOpgetNoise.setText(value)
3157 3154 self.specOpgetNoise.setEnabled(True)
3158 3155 else:
3159 3156 value2 = opObj.getParameterValue(parameterName='maxHei')
3160 3157 value2 = str(value2)
3161 3158 parmObj = opObj.getParameterObj(parameterName='minVel')
3162 3159 if parmObj == None:
3163 3160 value3 = None
3164 3161 value = value1 + "," + value2
3165 3162 self.specOpgetNoise.setText(value)
3166 3163 self.specOpgetNoise.setEnabled(True)
3167 3164 else:
3168 3165 value3 = opObj.getParameterValue(parameterName='minVel')
3169 3166 value3 = str(value3)
3170 3167 parmObj = opObj.getParameterObj(parameterName='maxVel')
3171 3168 if parmObj == None:
3172 3169 value4 = None
3173 3170 value = value1 + "," + value2 + "," + value3
3174 3171 self.specOpgetNoise.setText(value)
3175 3172 self.specOpgetNoise.setEnabled(True)
3176 3173 else:
3177 3174 value4 = opObj.getParameterValue(parameterName='maxVel')
3178 3175 value4 = str(value4)
3179 3176 value = value1 + "," + value2 + "," + value3 + ',' + value4
3180 3177 self.specOpgetNoise.setText(value)
3181 3178 self.specOpgetNoise.setEnabled(True)
3182 3179
3183 3180 self.specGraphPath.clear()
3184 3181 self.specGraphPrefix.clear()
3185 3182 self.specGgraphFreq.clear()
3186 3183 self.specGgraphHeight.clear()
3187 3184 self.specGgraphDbsrange.clear()
3188 3185 self.specGgraphmagnitud.clear()
3189 3186 self.specGgraphPhase.clear()
3190 3187 self.specGgraphChannelList.clear()
3191 3188 self.specGgraphTminTmax.clear()
3192 3189 self.specGgraphTimeRange.clear()
3193 3190 self.specGgraphftpratio.clear()
3194 3191
3195 3192 opObj = puObj.getOperationObj(name='SpectraPlot')
3196 3193
3197 3194 if opObj == None:
3198 3195 self.specGraphCebSpectraplot.setCheckState(0)
3199 3196 self.specGraphSaveSpectra.setCheckState(0)
3200 3197 self.specGraphftpSpectra.setCheckState(0)
3201 3198 else:
3202 3199 operationSpectraPlot = "Enable"
3203 3200 self.specGraphCebSpectraplot.setCheckState(QtCore.Qt.Checked)
3204 3201 parmObj = opObj.getParameterObj(parameterName='channelList')
3205 3202 if parmObj == None:
3206 3203 self.specGgraphChannelList.clear()
3207 3204 else:
3208 3205 value = opObj.getParameterValue(parameterName='channelList')
3209 3206 channelListSpectraPlot = str(value)[1:-1]
3210 3207 self.specGgraphChannelList.setText(channelListSpectraPlot)
3211 3208 self.specGgraphChannelList.setEnabled(True)
3212 3209
3213 3210 parmObj = opObj.getParameterObj(parameterName='xmin')
3214 3211 if parmObj == None:
3215 3212 self.specGgraphFreq.clear()
3216 3213 else:
3217 3214 value1 = opObj.getParameterValue(parameterName='xmin')
3218 3215 value1 = str(value1)
3219 3216 value2 = opObj.getParameterValue(parameterName='xmax')
3220 3217 value2 = str(value2)
3221 3218 value = value1 + "," + value2
3222 3219 self.specGgraphFreq.setText(value)
3223 3220 self.specGgraphFreq.setEnabled(True)
3224 3221
3225 3222 parmObj = opObj.getParameterObj(parameterName='ymin')
3226 3223 if parmObj == None:
3227 3224 self.specGgraphHeight.clear()
3228 3225 else:
3229 3226 value1 = opObj.getParameterValue(parameterName='ymin')
3230 3227 value1 = str(value1)
3231 3228 value2 = opObj.getParameterValue(parameterName='ymax')
3232 3229 value2 = str(value2)
3233 3230 value = value1 + "," + value2
3234 3231 self.specGgraphHeight.setText(value)
3235 3232 self.specGgraphHeight.setEnabled(True)
3236 3233
3237 3234 parmObj = opObj.getParameterObj(parameterName='zmin')
3238 3235 if parmObj == None:
3239 3236 self.specGgraphDbsrange.clear()
3240 3237 else:
3241 3238 value1 = opObj.getParameterValue(parameterName='zmin')
3242 3239 value1 = str(value1)
3243 3240 value2 = opObj.getParameterValue(parameterName='zmax')
3244 3241 value2 = str(value2)
3245 3242 value = value1 + "," + value2
3246 3243 self.specGgraphDbsrange.setText(value)
3247 3244 self.specGgraphDbsrange.setEnabled(True)
3248 3245
3249 3246 parmObj = opObj.getParameterObj(parameterName="save")
3250 3247 if parmObj == None:
3251 3248 self.specGraphSaveSpectra.setCheckState(0)
3252 3249 else:
3253 3250 self.specGraphSaveSpectra.setCheckState(QtCore.Qt.Checked)
3254 3251
3255 3252 parmObj = opObj.getParameterObj(parameterName="ftp")
3256 3253 if parmObj == None:
3257 3254 self.specGraphftpSpectra.setCheckState(0)
3258 3255 else:
3259 3256 self.specGraphftpSpectra.setCheckState(QtCore.Qt.Checked)
3260 3257
3261 3258 parmObj = opObj.getParameterObj(parameterName="figpath")
3262 3259 if parmObj:
3263 3260 value = parmObj.getValue()
3264 3261 self.specGraphPath.setText(value)
3265 3262
3266 3263 parmObj = opObj.getParameterObj(parameterName="wr_period")
3267 3264 if parmObj:
3268 3265 value = parmObj.getValue()
3269 3266 self.specGgraphftpratio.setText(str(value))
3270 3267
3271 3268 opObj = puObj.getOperationObj(name='CrossSpectraPlot')
3272 3269
3273 3270 if opObj == None:
3274 3271 self.specGraphCebCrossSpectraplot.setCheckState(0)
3275 3272 self.specGraphSaveCross.setCheckState(0)
3276 3273 self.specGraphftpCross.setCheckState(0)
3277 3274 else:
3278 3275 operationCrossSpectraPlot = "Enable"
3279 3276 self.specGraphCebCrossSpectraplot.setCheckState(QtCore.Qt.Checked)
3280 3277 parmObj = opObj.getParameterObj(parameterName='xmin')
3281 3278 if parmObj == None:
3282 3279 self.specGgraphFreq.clear()
3283 3280 else:
3284 3281 value1 = opObj.getParameterValue(parameterName='xmin')
3285 3282 value1 = str(value1)
3286 3283 value2 = opObj.getParameterValue(parameterName='xmax')
3287 3284 value2 = str(value2)
3288 3285 value = value1 + "," + value2
3289 3286 self.specGgraphFreq.setText(value)
3290 3287 self.specGgraphFreq.setEnabled(True)
3291 3288
3292 3289 parmObj = opObj.getParameterObj(parameterName='ymin')
3293 3290 if parmObj == None:
3294 3291 self.specGgraphHeight.clear()
3295 3292 else:
3296 3293 value1 = opObj.getParameterValue(parameterName='ymin')
3297 3294 value1 = str(value1)
3298 3295 value2 = opObj.getParameterValue(parameterName='ymax')
3299 3296 value2 = str(value2)
3300 3297 value = value1 + "," + value2
3301 3298 self.specGgraphHeight.setText(value)
3302 3299 self.specGgraphHeight.setEnabled(True)
3303 3300
3304 3301 parmObj = opObj.getParameterObj(parameterName='zmin')
3305 3302 if parmObj == None:
3306 3303 self.specGgraphDbsrange.clear()
3307 3304 else:
3308 3305 value1 = opObj.getParameterValue(parameterName='zmin')
3309 3306 value1 = str(value1)
3310 3307 value2 = opObj.getParameterValue(parameterName='zmax')
3311 3308 value2 = str(value2)
3312 3309 value = value1 + "," + value2
3313 3310 self.specGgraphDbsrange.setText(value)
3314 3311 self.specGgraphDbsrange.setEnabled(True)
3315 3312
3316 3313 parmObj = opObj.getParameterObj(parameterName='coh_min')
3317 3314 if parmObj == None:
3318 3315 self.specGgraphmagnitud.clear()
3319 3316 else:
3320 3317 value1 = opObj.getParameterValue(parameterName='coh_min')
3321 3318 value1 = str(value1)
3322 3319 value2 = opObj.getParameterValue(parameterName='coh_max')
3323 3320 value2 = str(value2)
3324 3321 value = value1 + "," + value2
3325 3322 self.specGgraphmagnitud.setText(value)
3326 3323 self.specGgraphmagnitud.setEnabled(True)
3327 3324
3328 3325 parmObj = opObj.getParameterObj(parameterName='phase_min')
3329 3326 if parmObj == None:
3330 3327 self.specGgraphPhase.clear()
3331 3328 else:
3332 3329 value1 = opObj.getParameterValue(parameterName='phase_min')
3333 3330 value1 = str(value1)
3334 3331 value2 = opObj.getParameterValue(parameterName='phase_max')
3335 3332 value2 = str(value2)
3336 3333 value = value1 + "," + value2
3337 3334 self.specGgraphPhase.setText(value)
3338 3335 self.specGgraphPhase.setEnabled(True)
3339 3336
3340 3337 parmObj = opObj.getParameterObj(parameterName="save")
3341 3338 if parmObj == None:
3342 3339 self.specGraphSaveCross.setCheckState(0)
3343 3340 else:
3344 3341 self.specGraphSaveCross.setCheckState(QtCore.Qt.Checked)
3345 3342
3346 3343 parmObj = opObj.getParameterObj(parameterName="ftp")
3347 3344 if parmObj == None:
3348 3345 self.specGraphftpCross.setCheckState(0)
3349 3346 else:
3350 3347 self.specGraphftpCross.setCheckState(QtCore.Qt.Checked)
3351 3348
3352 3349 parmObj = opObj.getParameterObj(parameterName="figpath")
3353 3350 if parmObj:
3354 3351 value = parmObj.getValue()
3355 3352 self.specGraphPath.setText(value)
3356 3353
3357 3354 parmObj = opObj.getParameterObj(parameterName="wr_period")
3358 3355 if parmObj:
3359 3356 value = parmObj.getValue()
3360 3357 self.specGgraphftpratio.setText(str(value))
3361 3358
3362 3359 opObj = puObj.getOperationObj(name='RTIPlot')
3363 3360
3364 3361 if opObj == None:
3365 3362 self.specGraphCebRTIplot.setCheckState(0)
3366 3363 self.specGraphSaveRTIplot.setCheckState(0)
3367 3364 self.specGraphftpRTIplot.setCheckState(0)
3368 3365 else:
3369 3366 self.specGraphCebRTIplot.setCheckState(QtCore.Qt.Checked)
3370 3367 parmObj = opObj.getParameterObj(parameterName='channelList')
3371 3368 if parmObj == None:
3372 3369 self.specGgraphChannelList.clear()
3373 3370 else:
3374 3371 value = opObj.getParameterValue(parameterName='channelList')
3375 3372 channelListRTIPlot = str(value)[1:-1]
3376 3373 self.specGgraphChannelList.setText(channelListRTIPlot)
3377 3374 self.specGgraphChannelList.setEnabled(True)
3378 3375
3379 3376 parmObj = opObj.getParameterObj(parameterName='xmin')
3380 3377 if parmObj == None:
3381 3378 self.specGgraphTminTmax.clear()
3382 3379 else:
3383 3380 value1 = opObj.getParameterValue(parameterName='xmin')
3384 3381 value1 = str(value1)
3385 3382 value2 = opObj.getParameterValue(parameterName='xmax')
3386 3383 value2 = str(value2)
3387 3384 value = value1 + "," + value2
3388 3385 self.specGgraphTminTmax.setText(value)
3389 3386 self.specGgraphTminTmax.setEnabled(True)
3390 3387
3391 3388 parmObj = opObj.getParameterObj(parameterName='timerange')
3392 3389 if parmObj == None:
3393 3390 self.specGgraphTimeRange.clear()
3394 3391 else:
3395 3392 value1 = opObj.getParameterValue(parameterName='timerange')
3396 3393 value1 = str(value1)
3397 3394 self.specGgraphTimeRange.setText(value1)
3398 3395 self.specGgraphTimeRange.setEnabled(True)
3399 3396
3400 3397 parmObj = opObj.getParameterObj(parameterName='ymin')
3401 3398 if parmObj == None:
3402 3399 self.specGgraphHeight.clear()
3403 3400 else:
3404 3401 value1 = opObj.getParameterValue(parameterName='ymin')
3405 3402 value1 = str(value1)
3406 3403 value2 = opObj.getParameterValue(parameterName='ymax')
3407 3404 value2 = str(value2)
3408 3405 value = value1 + "," + value2
3409 3406 self.specGgraphHeight.setText(value)
3410 3407 self.specGgraphHeight.setEnabled(True)
3411 3408
3412 3409 parmObj = opObj.getParameterObj(parameterName='zmin')
3413 3410 if parmObj == None:
3414 3411 self.specGgraphDbsrange.clear()
3415 3412 else:
3416 3413 value1 = opObj.getParameterValue(parameterName='zmin')
3417 3414 value1 = str(value1)
3418 3415 value2 = opObj.getParameterValue(parameterName='zmax')
3419 3416 value2 = str(value2)
3420 3417 value = value1 + "," + value2
3421 3418 self.specGgraphDbsrange.setText(value)
3422 3419 self.specGgraphDbsrange.setEnabled(True)
3423 3420
3424 3421 parmObj = opObj.getParameterObj(parameterName="save")
3425 3422 if parmObj == None:
3426 3423 self.specGraphSaveRTIplot.setCheckState(0)
3427 3424 else:
3428 3425 self.specGraphSaveRTIplot.setCheckState(QtCore.Qt.Checked)
3429 3426
3430 3427 parmObj = opObj.getParameterObj(parameterName="ftp")
3431 3428 if parmObj == None:
3432 3429 self.specGraphftpRTIplot.setCheckState(0)
3433 3430 else:
3434 3431 self.specGraphftpRTIplot.setCheckState(QtCore.Qt.Checked)
3435 3432
3436 3433 parmObj = opObj.getParameterObj(parameterName="figpath")
3437 3434 if parmObj:
3438 3435 value = parmObj.getValue()
3439 3436 self.specGraphPath.setText(value)
3440 3437
3441 3438 parmObj = opObj.getParameterObj(parameterName="wr_period")
3442 3439 if parmObj:
3443 3440 value = parmObj.getValue()
3444 3441 self.specGgraphftpratio.setText(str(value))
3445 3442
3446 3443 opObj = puObj.getOperationObj(name='CoherenceMap')
3447 3444
3448 3445 if opObj == None:
3449 3446 self.specGraphCebCoherencmap.setCheckState(0)
3450 3447 self.specGraphSaveCoherencemap.setCheckState(0)
3451 3448 self.specGraphftpCoherencemap.setCheckState(0)
3452 3449 else:
3453 3450 operationCoherenceMap = "Enable"
3454 3451 self.specGraphCebCoherencmap.setCheckState(QtCore.Qt.Checked)
3455 3452 parmObj = opObj.getParameterObj(parameterName='xmin')
3456 3453 if parmObj == None:
3457 3454 self.specGgraphTminTmax.clear()
3458 3455 else:
3459 3456 value1 = opObj.getParameterValue(parameterName='xmin')
3460 3457 value1 = str(value1)
3461 3458 value2 = opObj.getParameterValue(parameterName='xmax')
3462 3459 value2 = str(value2)
3463 3460 value = value1 + "," + value2
3464 3461 self.specGgraphTminTmax.setText(value)
3465 3462 self.specGgraphTminTmax.setEnabled(True)
3466 3463
3467 3464 parmObj = opObj.getParameterObj(parameterName='timerange')
3468 3465 if parmObj == None:
3469 3466 self.specGgraphTimeRange.clear()
3470 3467 else:
3471 3468 value1 = opObj.getParameterValue(parameterName='timerange')
3472 3469 value1 = str(value1)
3473 3470 self.specGgraphTimeRange.setText(value1)
3474 3471 self.specGgraphTimeRange.setEnabled(True)
3475 3472
3476 3473 parmObj = opObj.getParameterObj(parameterName='ymin')
3477 3474 if parmObj == None:
3478 3475 self.specGgraphHeight.clear()
3479 3476 else:
3480 3477 value1 = opObj.getParameterValue(parameterName='ymin')
3481 3478 value1 = str(value1)
3482 3479 value2 = opObj.getParameterValue(parameterName='ymax')
3483 3480 value2 = str(value2)
3484 3481 value = value1 + "," + value2
3485 3482 self.specGgraphHeight.setText(value)
3486 3483 self.specGgraphHeight.setEnabled(True)
3487 3484
3488 3485 parmObj = opObj.getParameterObj(parameterName='zmin')
3489 3486 if parmObj == None:
3490 3487 self.specGgraphmagnitud.clear()
3491 3488 else:
3492 3489 value1 = opObj.getParameterValue(parameterName='zmin')
3493 3490 value1 = str(value1)
3494 3491 value2 = opObj.getParameterValue(parameterName='zmax')
3495 3492 value2 = str(value2)
3496 3493 value = value1 + "," + value2
3497 3494 self.specGgraphmagnitud.setText(value)
3498 3495 self.specGgraphmagnitud.setEnabled(True)
3499 3496
3500 3497 parmObj = opObj.getParameterObj(parameterName='coh_min')
3501 3498 if parmObj == None:
3502 3499 self.specGgraphmagnitud.clear()
3503 3500 else:
3504 3501 value1 = opObj.getParameterValue(parameterName='coh_min')
3505 3502 value1 = str(value1)
3506 3503 value2 = opObj.getParameterValue(parameterName='coh_max')
3507 3504 value2 = str(value2)
3508 3505 value = value1 + "," + value2
3509 3506 self.specGgraphmagnitud.setText(value)
3510 3507 self.specGgraphmagnitud.setEnabled(True)
3511 3508
3512 3509 parmObj = opObj.getParameterObj(parameterName='phase_min')
3513 3510 if parmObj == None:
3514 3511 self.specGgraphPhase.clear()
3515 3512 else:
3516 3513 value1 = opObj.getParameterValue(parameterName='phase_min')
3517 3514 value1 = str(value1)
3518 3515 value2 = opObj.getParameterValue(parameterName='phase_max')
3519 3516 value2 = str(value2)
3520 3517 value = value1 + "," + value2
3521 3518 self.specGgraphPhase.setText(value)
3522 3519 self.specGgraphPhase.setEnabled(True)
3523 3520
3524 3521 parmObj = opObj.getParameterObj(parameterName="save")
3525 3522 if parmObj == None:
3526 3523 self.specGraphSaveCoherencemap.setCheckState(0)
3527 3524 else:
3528 3525 self.specGraphSaveCoherencemap.setCheckState(QtCore.Qt.Checked)
3529 3526
3530 3527 parmObj = opObj.getParameterObj(parameterName="ftp")
3531 3528 if parmObj == None:
3532 3529 self.specGraphftpCoherencemap.setCheckState(0)
3533 3530 else:
3534 3531 self.specGraphftpCoherencemap.setCheckState(QtCore.Qt.Checked)
3535 3532
3536 3533 parmObj = opObj.getParameterObj(parameterName="figpath")
3537 3534 if parmObj:
3538 3535 value = parmObj.getValue()
3539 3536 self.specGraphPath.setText(value)
3540 3537
3541 3538 parmObj = opObj.getParameterObj(parameterName="wr_period")
3542 3539 if parmObj:
3543 3540 value = parmObj.getValue()
3544 3541 self.specGgraphftpratio.setText(str(value))
3545 3542
3546 3543 opObj = puObj.getOperationObj(name='PowerProfilePlot')
3547 3544
3548 3545 if opObj == None:
3549 3546 self.specGraphPowerprofile.setCheckState(0)
3550 3547 self.specGraphSavePowerprofile.setCheckState(0)
3551 3548 self.specGraphftpPowerprofile.setCheckState(0)
3552 3549 operationPowerProfilePlot = "Disabled"
3553 3550 channelList = None
3554 3551 freq_vel = None
3555 3552 heightsrange = None
3556 3553 else:
3557 3554 operationPowerProfilePlot = "Enable"
3558 3555 self.specGraphPowerprofile.setCheckState(QtCore.Qt.Checked)
3559 3556 parmObj = opObj.getParameterObj(parameterName='xmin')
3560 3557 if parmObj == None:
3561 3558 self.specGgraphDbsrange.clear()
3562 3559 else:
3563 3560 value1 = opObj.getParameterValue(parameterName='xmin')
3564 3561 value1 = str(value1)
3565 3562 value2 = opObj.getParameterValue(parameterName='xmax')
3566 3563 value2 = str(value2)
3567 3564 value = value1 + "," + value2
3568 3565 self.specGgraphDbsrange.setText(value)
3569 3566 self.specGgraphDbsrange.setEnabled(True)
3570 3567
3571 3568 parmObj = opObj.getParameterObj(parameterName='ymin')
3572 3569 if parmObj == None:
3573 3570 self.specGgraphHeight.clear()
3574 3571 else:
3575 3572 value1 = opObj.getParameterValue(parameterName='ymin')
3576 3573 value1 = str(value1)
3577 3574 value2 = opObj.getParameterValue(parameterName='ymax')
3578 3575 value2 = str(value2)
3579 3576 value = value1 + "," + value2
3580 3577 self.specGgraphHeight.setText(value)
3581 3578 self.specGgraphHeight.setEnabled(True)
3582 3579
3583 3580 parmObj = opObj.getParameterObj(parameterName="save")
3584 3581 if parmObj == None:
3585 3582 self.specGraphSavePowerprofile.setCheckState(0)
3586 3583 else:
3587 3584 self.specGraphSavePowerprofile.setCheckState(QtCore.Qt.Checked)
3588 3585
3589 3586 parmObj = opObj.getParameterObj(parameterName="ftp")
3590 3587 if parmObj == None:
3591 3588 self.specGraphftpPowerprofile.setCheckState(0)
3592 3589 else:
3593 3590 self.specGraphftpPowerprofile.setCheckState(QtCore.Qt.Checked)
3594 3591
3595 3592 parmObj = opObj.getParameterObj(parameterName="figpath")
3596 3593 if parmObj:
3597 3594 value = parmObj.getValue()
3598 3595 self.specGraphPath.setText(value)
3599 3596
3600 3597 parmObj = opObj.getParameterObj(parameterName="wr_period")
3601 3598 if parmObj:
3602 3599 value = parmObj.getValue()
3603 3600 self.specGgraphftpratio.setText(str(value))
3604 3601
3605 3602 opObj = puObj.getOperationObj(name='Noise')
3606 3603
3607 3604 if opObj == None:
3608 3605 self.specGraphCebRTInoise.setCheckState(0)
3609 3606 self.specGraphSaveRTInoise.setCheckState(0)
3610 3607 self.specGraphftpRTInoise.setCheckState(0)
3611 3608 else:
3612 3609 self.specGraphCebRTInoise.setCheckState(QtCore.Qt.Checked)
3613 3610 parmObj = opObj.getParameterObj(parameterName='channelList')
3614 3611 if parmObj == None:
3615 3612 self.specGgraphChannelList.clear()
3616 3613 else:
3617 3614 value = opObj.getParameterValue(parameterName='channelList')
3618 3615 channelListRTINoise = str(value)[1:-1]
3619 3616 self.specGgraphChannelList.setText(channelListRTINoise)
3620 3617 self.specGgraphChannelList.setEnabled(True)
3621 3618
3622 3619 parmObj = opObj.getParameterObj(parameterName='xmin')
3623 3620 if parmObj == None:
3624 3621 self.specGgraphTminTmax.clear()
3625 3622 else:
3626 3623 value1 = opObj.getParameterValue(parameterName='xmin')
3627 3624 value1 = str(value1)
3628 3625 value2 = opObj.getParameterValue(parameterName='xmax')
3629 3626 value2 = str(value2)
3630 3627 value = value1 + "," + value2
3631 3628 self.specGgraphTminTmax.setText(value)
3632 3629 self.specGgraphTminTmax.setEnabled(True)
3633 3630
3634 3631 parmObj = opObj.getParameterObj(parameterName='timerange')
3635 3632 if parmObj == None:
3636 3633 self.specGgraphTimeRange.clear()
3637 3634 else:
3638 3635 value1 = opObj.getParameterValue(parameterName='timerange')
3639 3636 value1 = str(value1)
3640 3637 self.specGgraphTimeRange.setText(value1)
3641 3638 self.specGgraphTimeRange.setEnabled(True)
3642 3639
3643 3640
3644 3641 parmObj = opObj.getParameterObj(parameterName='ymin')
3645 3642 if parmObj == None:
3646 3643 self.specGgraphDbsrange.clear()
3647 3644 else:
3648 3645 value1 = opObj.getParameterValue(parameterName='ymin')
3649 3646 value1 = str(value1)
3650 3647 value2 = opObj.getParameterValue(parameterName='ymax')
3651 3648 value2 = str(value2)
3652 3649 value = value1 + "," + value2
3653 3650 self.specGgraphDbsrange.setText(value)
3654 3651 self.specGgraphDbsrange.setEnabled(True)
3655 3652
3656 3653 parmObj = opObj.getParameterObj(parameterName="save")
3657 3654 if parmObj == None:
3658 3655 self.specGraphSaveRTInoise.setCheckState(0)
3659 3656 else:
3660 3657 self.specGraphSaveRTInoise.setCheckState(QtCore.Qt.Checked)
3661 3658
3662 3659 parmObj = opObj.getParameterObj(parameterName="ftp")
3663 3660 if parmObj == None:
3664 3661 self.specGraphftpRTInoise.setCheckState(0)
3665 3662 else:
3666 3663 self.specGraphftpRTInoise.setCheckState(QtCore.Qt.Checked)
3667 3664
3668 3665 parmObj = opObj.getParameterObj(parameterName="figpath")
3669 3666 if parmObj:
3670 3667 value = parmObj.getValue()
3671 3668 self.specGraphPath.setText(value)
3672 3669
3673 3670 parmObj = opObj.getParameterObj(parameterName="wr_period")
3674 3671 if parmObj:
3675 3672 value = parmObj.getValue()
3676 3673 self.specGgraphftpratio.setText(str(value))
3677 3674
3678 3675 opObj = puObj.getOperationObj(name='SpectraWriter')
3679 3676 if opObj == None:
3680 3677 self.specOutputPath.clear()
3681 3678 self.specOutputblocksperfile.clear()
3682 3679 else:
3683 3680 value = opObj.getParameterObj(parameterName='path')
3684 3681 if value == None:
3685 3682 self.specOutputPath.clear()
3686 3683 else:
3687 3684 value = opObj.getParameterValue(parameterName='path')
3688 3685 path = str(value)
3689 3686 self.specOutputPath.setText(path)
3690 3687 value = opObj.getParameterObj(parameterName='blocksPerFile')
3691 3688 if value == None:
3692 3689 self.specOutputblocksperfile.clear()
3693 3690 else:
3694 3691 value = opObj.getParameterValue(parameterName='blocksPerFile')
3695 3692 blocksperfile = str(value)
3696 3693 self.specOutputblocksperfile.setText(blocksperfile)
3697 3694
3698 3695 return
3699 3696
3700 3697 def __refreshSpectraHeisWindow(self, puObj):
3701 3698
3702 3699 opObj = puObj.getOperationObj(name="IncohInt4SpectraHeis")
3703 3700 if opObj == None:
3704 3701 self.specHeisOpIncoherent.clear()
3705 3702 self.specHeisOpCebIncoherent.setCheckState(0)
3706 3703 else:
3707 3704 for parmObj in opObj.getParameterObjList():
3708 3705 if parmObj.name == 'timeInterval':
3709 3706 value = opObj.getParameterValue(parameterName='timeInterval')
3710 3707 value = float(value)
3711 3708 self.specHeisOpIncoherent.setText(str(value))
3712 3709 self.specHeisOpIncoherent.setEnabled(True)
3713 3710 self.specHeisOpCebIncoherent.setCheckState(QtCore.Qt.Checked)
3714 3711 self.specHeisOpCobIncInt.setCurrentIndex(0)
3715 3712
3716 3713 # SpectraHeis Graph
3717 3714
3718 3715 self.specHeisGgraphXminXmax.clear()
3719 3716 self.specHeisGgraphYminYmax.clear()
3720 3717
3721 3718 self.specHeisGgraphChannelList.clear()
3722 3719 self.specHeisGgraphTminTmax.clear()
3723 3720 self.specHeisGgraphTimeRange.clear()
3724 3721 self.specHeisGgraphftpratio.clear()
3725 3722
3726 3723 opObj = puObj.getOperationObj(name='SpectraHeisScope')
3727 3724 if opObj == None:
3728 3725 self.specHeisGraphCebSpectraplot.setCheckState(0)
3729 3726 self.specHeisGraphSaveSpectra.setCheckState(0)
3730 3727 self.specHeisGraphftpSpectra.setCheckState(0)
3731 3728 else:
3732 3729 operationSpectraHeisScope = "Enable"
3733 3730 self.specHeisGraphCebSpectraplot.setCheckState(QtCore.Qt.Checked)
3734 3731
3735 3732 parmObj = opObj.getParameterObj(parameterName='channelList')
3736 3733 if parmObj == None:
3737 3734 self.specHeisGgraphChannelList.clear()
3738 3735 else:
3739 3736 value = opObj.getParameterValue(parameterName='channelList')
3740 3737 channelListSpectraHeisScope = str(value)[1:-1]
3741 3738 self.specHeisGgraphChannelList.setText(channelListSpectraHeisScope)
3742 3739 self.specHeisGgraphChannelList.setEnabled(True)
3743 3740
3744 3741 parmObj = opObj.getParameterObj(parameterName='xmin')
3745 3742 if parmObj == None:
3746 3743 self.specHeisGgraphXminXmax.clear()
3747 3744 else:
3748 3745 value1 = opObj.getParameterValue(parameterName='xmin')
3749 3746 value1 = str(value1)
3750 3747 value2 = opObj.getParameterValue(parameterName='xmax')
3751 3748 value2 = str(value2)
3752 3749 value = value1 + "," + value2
3753 3750 self.specHeisGgraphXminXmax.setText(value)
3754 3751 self.specHeisGgraphXminXmax.setEnabled(True)
3755 3752
3756 3753 parmObj = opObj.getParameterObj(parameterName='ymin')
3757 3754 if parmObj == None:
3758 3755 self.specHeisGgraphYminYmax.clear()
3759 3756 else:
3760 3757 value1 = opObj.getParameterValue(parameterName='ymin')
3761 3758 value1 = str(value1)
3762 3759 value2 = opObj.getParameterValue(parameterName='ymax')
3763 3760 value2 = str(value2)
3764 3761 value = value1 + "," + value2
3765 3762 self.specHeisGgraphYminYmax.setText(value)
3766 3763 self.specHeisGgraphYminYmax.setEnabled(True)
3767 3764
3768 3765 parmObj = opObj.getParameterObj(parameterName="save")
3769 3766 if parmObj == None:
3770 3767 self.specHeisGraphSaveSpectra.setCheckState(0)
3771 3768 else:
3772 3769 self.specHeisGraphSaveSpectra.setCheckState(QtCore.Qt.Checked)
3773 3770
3774 3771 parmObj = opObj.getParameterObj(parameterName="ftp")
3775 3772 if parmObj == None:
3776 3773 self.specHeisGraphftpSpectra.setCheckState(0)
3777 3774 else:
3778 3775 self.specHeisGraphftpSpectra.setCheckState(QtCore.Qt.Checked)
3779 3776
3780 3777 parmObj = opObj.getParameterObj(parameterName="figpath")
3781 3778 if parmObj:
3782 3779 value = parmObj.getValue()
3783 3780 self.specHeisGraphPath.setText(value)
3784 3781
3785 3782 parmObj = opObj.getParameterObj(parameterName="wr_period")
3786 3783 if parmObj:
3787 3784 value = parmObj.getValue()
3788 3785 self.specHeisGgraphftpratio.setText(str(value))
3789 3786
3790 3787 opObj = puObj.getOperationObj(name='RTIfromSpectraHeis')
3791 3788
3792 3789 if opObj == None:
3793 3790 self.specHeisGraphCebRTIplot.setCheckState(0)
3794 3791 self.specHeisGraphSaveRTIplot.setCheckState(0)
3795 3792 self.specHeisGraphftpRTIplot.setCheckState(0)
3796 3793 else:
3797 3794 self.specHeisGraphCebRTIplot.setCheckState(QtCore.Qt.Checked)
3798 3795 parmObj = opObj.getParameterObj(parameterName='channelList')
3799 3796 if parmObj == None:
3800 3797 self.specHeisGgraphChannelList.clear()
3801 3798 else:
3802 3799 value = opObj.getParameterValue(parameterName='channelList')
3803 3800 channelListRTIPlot = str(value)[1:-1]
3804 3801 self.specGgraphChannelList.setText(channelListRTIPlot)
3805 3802 self.specGgraphChannelList.setEnabled(True)
3806 3803
3807 3804 parmObj = opObj.getParameterObj(parameterName='xmin')
3808 3805 if parmObj == None:
3809 3806 self.specHeisGgraphTminTmax.clear()
3810 3807 else:
3811 3808 value1 = opObj.getParameterValue(parameterName='xmin')
3812 3809 value1 = str(value1)
3813 3810 value2 = opObj.getParameterValue(parameterName='xmax')
3814 3811 value2 = str(value2)
3815 3812 value = value1 + "," + value2
3816 3813 self.specHeisGgraphTminTmax.setText(value)
3817 3814 self.specHeisGgraphTminTmax.setEnabled(True)
3818 3815
3819 3816 parmObj = opObj.getParameterObj(parameterName='timerange')
3820 3817 if parmObj == None:
3821 3818 self.specGgraphTimeRange.clear()
3822 3819 else:
3823 3820 value1 = opObj.getParameterValue(parameterName='timerange')
3824 3821 value1 = str(value1)
3825 3822 self.specHeisGgraphTimeRange.setText(value1)
3826 3823 self.specHeisGgraphTimeRange.setEnabled(True)
3827 3824
3828 3825 parmObj = opObj.getParameterObj(parameterName='ymin')
3829 3826 if parmObj == None:
3830 3827 self.specHeisGgraphYminYmax.clear()
3831 3828 else:
3832 3829 value1 = opObj.getParameterValue(parameterName='ymin')
3833 3830 value1 = str(value1)
3834 3831 value2 = opObj.getParameterValue(parameterName='ymax')
3835 3832 value2 = str(value2)
3836 3833 value = value1 + "," + value2
3837 3834 self.specHeisGgraphYminYmax.setText(value)
3838 3835 self.specHeisGgraphYminYmax.setEnabled(True)
3839 3836
3840 3837 parmObj = opObj.getParameterObj(parameterName="save")
3841 3838 if parmObj == None:
3842 3839 self.specHeisGraphSaveRTIplot.setCheckState(0)
3843 3840 else:
3844 3841 self.specHeisGraphSaveRTIplot.setCheckState(QtCore.Qt.Checked)
3845 3842
3846 3843 parmObj = opObj.getParameterObj(parameterName="ftp")
3847 3844 if parmObj == None:
3848 3845 self.specHeisGraphftpRTIplot.setCheckState(0)
3849 3846 else:
3850 3847 self.specHeisGraphftpRTIplot.setCheckState(QtCore.Qt.Checked)
3851 3848
3852 3849 parmObj = opObj.getParameterObj(parameterName="figpath")
3853 3850 if parmObj:
3854 3851 value = parmObj.getValue()
3855 3852 self.specHeisGraphPath.setText(value)
3856 3853
3857 3854 parmObj = opObj.getParameterObj(parameterName="wr_period")
3858 3855 if parmObj:
3859 3856 value = parmObj.getValue()
3860 3857 self.specHeisGgraphftpratio.setText(str(value))
3861 3858
3862 3859 # outputSpectraHeisWrite
3863 3860 opObj = puObj.getOperationObj(name='FitsWriter')
3864 3861 if opObj == None:
3865 3862 self.specHeisOutputPath.clear()
3866 3863 self.specHeisOutputblocksperfile.clear()
3867 3864 self.specHeisOutputMetada.clear()
3868 3865 else:
3869 3866 value = opObj.getParameterObj(parameterName='path')
3870 3867 if value == None:
3871 3868 self.specHeisOutputPath.clear()
3872 3869 else:
3873 3870 value = opObj.getParameterValue(parameterName='path')
3874 3871 path = str(value)
3875 3872 self.specHeisOutputPath.setText(path)
3876 3873 value = opObj.getParameterObj(parameterName='dataBlocksPerFile')
3877 3874 if value == None:
3878 3875 self.specHeisOutputblocksperfile.clear()
3879 3876 else:
3880 3877 value = opObj.getParameterValue(parameterName='dataBlocksPerFile')
3881 3878 blocksperfile = str(value)
3882 3879 self.specHeisOutputblocksperfile.setText(blocksperfile)
3883 3880 value = opObj.getParameterObj(parameterName='metadatafile')
3884 3881 if value == None:
3885 3882 self.specHeisOutputMetada.clear()
3886 3883 else:
3887 3884 value = opObj.getParameterValue(parameterName='metadatafile')
3888 3885 metada = str(value)
3889 3886 self.specHeisOutputMetada.setText(metada)
3890 3887
3891 3888 return
3892 3889
3893 3890 def __refreshCorrelationWindow(self, puObj):
3894 3891 pass
3895 3892
3896 3893 def refreshPUWindow(self, puObj):
3897 3894
3898 3895 if puObj.datatype == 'Voltage':
3899 3896 self.__refreshVoltageWindow(puObj)
3900 3897
3901 3898 if puObj.datatype == 'Spectra':
3902 3899 self.__refreshSpectraWindow(puObj)
3903 3900
3904 3901 if puObj.datatype == 'SpectraHeis':
3905 3902 self.__refreshSpectraHeisWindow(puObj)
3906 3903
3907 3904 def refreshProjectProperties(self, projectObjView):
3908 3905
3909 3906 propertyBuffObj = PropertyBuffer()
3910 3907 name = projectObjView.name
3911 3908
3912 3909 propertyBuffObj.append("Properties", "Name", projectObjView.name),
3913 3910 propertyBuffObj.append("Properties", "Description", projectObjView.description)
3914 3911 propertyBuffObj.append("Properties", "Workspace", self.pathWorkSpace)
3915 3912
3916 3913 readUnitObj = projectObjView.getReadUnitObj()
3917 3914 runOperationObj = readUnitObj.getOperationObj(name='run')
3918 3915
3919 3916 for thisParmObj in runOperationObj.getParameterObjList():
3920 3917 propertyBuffObj.append("Reading parms", thisParmObj.name, str(thisParmObj.getValue()))
3921 3918
3922 3919 propertiesModel = propertyBuffObj.getPropertyModel()
3923 3920
3924 3921 self.treeProjectProperties.setModel(propertiesModel)
3925 3922 self.treeProjectProperties.expandAll()
3926 3923 self.treeProjectProperties.resizeColumnToContents(0)
3927 3924 self.treeProjectProperties.resizeColumnToContents(1)
3928 3925
3929 3926 def refreshPUProperties(self, puObjView):
3930 3927
3931 3928 ############ FTP CONFIG ################################
3932 3929 #Deleting FTP Conf. This processing unit have not got any
3933 3930 #FTP configuration by default
3934 3931 if puObjView.id in self.__puLocalFolder2FTP.keys():
3935 3932 self.__puLocalFolder2FTP.pop(puObjView.id)
3936 3933 ########################################################
3937 3934
3938 3935 propertyBuffObj = PropertyBuffer()
3939 3936
3940 3937 for thisOp in puObjView.getOperationObjList():
3941 3938
3942 3939 operationName = thisOp.name
3943 3940
3944 3941 if operationName == 'run':
3945 3942 operationName = 'Properties'
3946 3943
3947 3944 else:
3948 3945 if not thisOp.getParameterObjList():
3949 3946 propertyBuffObj.append(operationName, '--', '--')
3950 3947 continue
3951 3948
3952 3949 for thisParmObj in thisOp.getParameterObjList():
3953 3950 propertyBuffObj.append(operationName, thisParmObj.name, str(thisParmObj.getValue()))
3954 3951
3955 3952 ############ FTP CONFIG ################################
3956 3953 if thisParmObj.name == "ftp_wei" and thisParmObj.getValue():
3957 3954 value = thisParmObj.getValue()
3958 3955 self.temporalFTP.ftp_wei = value
3959 3956
3960 3957 if thisParmObj.name == "exp_code" and thisParmObj.getValue():
3961 3958 value = thisParmObj.getValue()
3962 3959 self.temporalFTP.exp_code = value
3963 3960
3964 3961 if thisParmObj.name == "sub_exp_code" and thisParmObj.getValue():
3965 3962 value = thisParmObj.getValue()
3966 3963 self.temporalFTP.sub_exp_code = value
3967 3964
3968 3965 if thisParmObj.name == "plot_pos" and thisParmObj.getValue():
3969 3966 value = thisParmObj.getValue()
3970 3967 self.temporalFTP.plot_pos = value
3971 3968
3972 3969 if thisParmObj.name == 'ftp' and thisParmObj.getValue():
3973 3970 figpathObj = thisOp.getParameterObj('figpath')
3974 3971 if figpathObj:
3975 3972 self.__puLocalFolder2FTP[puObjView.id] = figpathObj.getValue()
3976 3973
3977 3974 ########################################################
3978 3975
3979 3976 propertiesModel = propertyBuffObj.getPropertyModel()
3980 3977
3981 3978 self.treeProjectProperties.setModel(propertiesModel)
3982 3979 self.treeProjectProperties.expandAll()
3983 3980 self.treeProjectProperties.resizeColumnToContents(0)
3984 3981 self.treeProjectProperties.resizeColumnToContents(1)
3985 3982
3986 3983 def refreshGraphicsId(self):
3987 3984
3988 3985 projectObj = self.getSelectedProjectObj()
3989 3986
3990 3987 if not projectObj:
3991 3988 return
3992 3989
3993 3990 for idPU, puObj in projectObj.procUnitConfObjDict.items():
3994 3991
3995 3992 for opObj in puObj.getOperationObjList():
3996 3993
3997 3994 if opObj.name not in ('Scope', 'SpectraPlot', 'CrossSpectraPlot', 'RTIPlot', 'CoherenceMap', 'PowerProfilePlot', 'Noise', 'SpectraHeisScope', 'RTIfromSpectraHeis'):
3998 3995 continue
3999 3996
4000 3997 opObj.changeParameter(name='id', value=opObj.id, format='int')
4001 3998
4002 3999 def on_click(self, index):
4003 4000
4004 4001 self.selectedItemTree = self.projectExplorerModel.itemFromIndex(index)
4005 4002
4006 4003 projectObjView = self.getSelectedProjectObj()
4007 4004
4008 4005 if not projectObjView:
4009 4006 return
4010 4007
4011 4008 self.create = False
4012 4009 selectedObjView = self.getSelectedItemObj()
4013 4010
4014 4011 #A project has been selected
4015 4012 if projectObjView == selectedObjView:
4016 4013
4017 4014 self.refreshProjectWindow(projectObjView)
4018 4015 self.refreshProjectProperties(projectObjView)
4019 4016
4020 4017 self.tabProject.setEnabled(True)
4021 4018 self.tabVoltage.setEnabled(False)
4022 4019 self.tabSpectra.setEnabled(False)
4023 4020 self.tabCorrelation.setEnabled(False)
4024 4021 self.tabSpectraHeis.setEnabled(False)
4025 4022 self.tabWidgetProject.setCurrentWidget(self.tabProject)
4026 4023
4027 4024 return
4028 4025
4029 4026 #A processing unit has been selected
4030 4027 voltEnable = False
4031 4028 specEnable = False
4032 4029 corrEnable = False
4033 4030 specHeisEnable = False
4034 4031 tabSelected = self.tabProject
4035 4032
4036 4033 puObj = selectedObjView
4037 4034
4038 4035 self.refreshPUWindow(puObj)
4039 4036 self.refreshPUProperties(puObj)
4040 4037 self.showtabPUCreated(puObj.datatype)
4041 4038
4042 4039 def on_right_click(self, pos):
4043 4040
4044 4041 self.menu = QtGui.QMenu()
4045 4042 quitAction0 = self.menu.addAction("Create a New Project")
4046 4043 quitAction1 = self.menu.addAction("Create a New Processing Unit")
4047 4044 quitAction2 = self.menu.addAction("Delete Item")
4048 4045 quitAction3 = self.menu.addAction("Quit")
4049 4046
4050 4047 if len(self.__itemTreeDict) == 0:
4051 4048 quitAction2.setEnabled(False)
4052 4049 else:
4053 4050 quitAction2.setEnabled(True)
4054 4051
4055 4052 action = self.menu.exec_(self.mapToGlobal(pos))
4056 4053
4057 4054 if action == quitAction0:
4058 4055 self. setInputsProject_View()
4059 4056 self.create = True
4060 4057
4061 4058 if action == quitAction1:
4062 4059 if len(self.__projectObjDict) == 0:
4063 4060 outputstr = "You need to create a Project before adding a Processing Unit"
4064 4061 self.console.clear()
4065 4062 self.console.append(outputstr)
4066 4063 return 0
4067 4064 else:
4068 4065 self.addPUWindow()
4069 4066 self.console.clear()
4070 4067 self.console.append("Please, Choose the type of Processing Unit")
4071 4068 # self.console.append("If your Datatype is rawdata, you will start with processing unit Type Voltage")
4072 4069 # self.console.append("If your Datatype is pdata, you will choose between processing unit Type Spectra or Correlation")
4073 4070 # self.console.append("If your Datatype is fits, you will start with processing unit Type SpectraHeis")
4074 4071
4075 4072 if action == quitAction2:
4076 4073 index = self.selectedItemTree
4077 4074 try:
4078 4075 index.parent()
4079 4076 except:
4080 4077 self.console.append('Please first select a Project or Processing Unit')
4081 4078 return 0
4082 4079 # print index.parent(),index
4083 4080 if index.parent() == None:
4084 4081 self.projectExplorerModel.removeRow(index.row())
4085 4082 else:
4086 4083 index.parent().removeRow(index.row())
4087 4084 self.removeItemTreeFromProject()
4088 4085 self.console.clear()
4089 4086 # for i in self.projectExplorerTree.selectionModel().selection().indexes():
4090 4087 # print i.row()
4091 4088
4092 4089 if action == quitAction3:
4093 4090 self.close()
4094 4091 return 0
4095 4092
4096 4093 def createProjectView(self, id):
4097 4094
4098 4095 # project_name, description, datatype, data_path, starDate, endDate, startTime, endTime, online, delay, walk, set = self.getParmsFromProjectWindow()
4099 4096 id = str(id)
4100 4097 projectParms = self.__getParmsFromProjectWindow()
4101 4098
4102 4099 if not projectParms.isValid():
4103 4100 return None
4104 4101
4105 4102 projectObjView = Project()
4106 4103 projectObjView.setup(id=id, name=projectParms.name, description=projectParms.description)
4107 4104
4108 4105 self.__projectObjDict[id] = projectObjView
4109 4106 self.addProject2ProjectExplorer(id=id, name=projectObjView.name)
4110 4107
4111 4108 return projectObjView
4112 4109
4113 4110 def updateProjectView(self):
4114 4111
4115 4112 # project_name, description, datatype, data_path, starDate, endDate, startTime, endTime, online, delay, walk, set = self.getParmsFromProjectWindow()
4116 4113
4117 4114 projectParms = self.__getParmsFromProjectWindow()
4118 4115
4119 4116 if not projectParms.isValid():
4120 4117 return None
4121 4118
4122 4119 projectObjView = self.getSelectedProjectObj()
4123 4120
4124 4121 if not projectObjView:
4125 4122 self.console.append("Please select a project before update it")
4126 4123 return None
4127 4124
4128 4125 projectObjView.update(name=projectParms.name, description=projectParms.description)
4129 4126
4130 4127 return projectObjView
4131 4128
4132 4129 def createReadUnitView(self, projectObjView):
4133 4130
4134 4131 # project_name, description, datatype, data_path, startDate, endDate, startTime, endTime, online, delay, walk, set = self.getParmsFromProjectWindow()
4135 4132
4136 4133 projectParms = self.__getParmsFromProjectWindow()
4137 4134
4138 4135 if not projectParms.isValid():
4139 4136 return None
4140 4137
4141 4138 if projectParms.datatype in ("Voltage", "Spectra", "Fits"):
4142 4139 readUnitConfObj = projectObjView.addReadUnit(datatype=projectParms.datatype,
4143 4140 path=projectParms.dpath,
4144 4141 startDate=projectParms.startDate,
4145 4142 endDate=projectParms.endDate,
4146 4143 startTime=projectParms.startTime,
4147 4144 endTime=projectParms.endTime,
4148 4145 online=projectParms.online,
4149 4146 walk=projectParms.walk
4150 4147 )
4151 4148
4152 4149 if projectParms.set:
4153 4150 readUnitConfObj.addParameter(name="set", value=projectParms.set, format="int")
4154 4151
4155 4152 if projectParms.delay:
4156 4153 readUnitConfObj.addParameter(name="delay", value=projectParms.delay, format="int")
4157 4154
4158 4155 if projectParms.expLabel:
4159 4156 readUnitConfObj.addParameter(name="expLabel", value=projectParms.expLabel)
4160 4157
4158 readUnitConfObj.addOperation(name="printInfo")
4159
4161 4160 if projectParms.datatype == "USRP":
4162 4161 readUnitConfObj = projectObjView.addReadUnit(datatype=projectParms.datatype,
4163 4162 path=projectParms.dpath,
4164 4163 startDate=projectParms.startDate,
4165 4164 endDate=projectParms.endDate,
4166 4165 startTime=projectParms.startTime,
4167 4166 endTime=projectParms.endTime,
4168 4167 online=projectParms.online,
4169 4168 ippKm=projectParms.ippKm
4170 4169 )
4171 4170
4172 4171 if projectParms.delay:
4173 4172 readUnitConfObj.addParameter(name="delay", value=projectParms.delay, format="int")
4174 4173
4175 4174 return readUnitConfObj
4176 4175
4177 4176 def updateReadUnitView(self, projectObjView, idReadUnit):
4178 4177
4179 4178 # project_name, description, datatype, data_path, startDate, endDate, startTime, endTime, online, delay, walk , set = self.getParmsFromProjectWindow()
4180 4179
4181 4180 readUnitConfObj = projectObjView.getProcUnitObj(idReadUnit)
4182 4181
4183 4182 projectParms = self.__getParmsFromProjectWindow()
4184 4183
4185 4184 if not projectParms.isValid():
4186 4185 return None
4187 4186
4188 4187 if projectParms.datatype in ["Voltage", "Spectra", "Fits"]:
4189 4188 readUnitConfObj.update(datatype=projectParms.datatype,
4190 4189 path=projectParms.dpath,
4191 4190 startDate=projectParms.startDate,
4192 4191 endDate=projectParms.endDate,
4193 4192 startTime=projectParms.startTime,
4194 4193 endTime=projectParms.endTime,
4195 4194 online=projectParms.online,
4196 4195 walk=projectParms.walk
4197 4196 )
4198 4197 if projectParms.set:
4199 4198 readUnitConfObj.addParameter(name="set", value=projectParms.set, format="int")
4200 4199
4201 4200 if projectParms.delay:
4202 4201 readUnitConfObj.addParameter(name="delay", value=projectParms.delay, format="int")
4203 4202
4204 4203 if projectParms.expLabel:
4205 4204 readUnitConfObj.addParameter(name="expLabel", value=projectParms.expLabel)
4206 4205
4206 readUnitConfObj.addOperation(name="printInfo")
4207
4207 4208 if projectParms.datatype == "USRP":
4208 4209 readUnitConfObj.update(datatype=projectParms.datatype,
4209 4210 path=projectParms.dpath,
4210 4211 startDate=projectParms.startDate,
4211 4212 endDate=projectParms.endDate,
4212 4213 startTime=projectParms.startTime,
4213 4214 endTime=projectParms.endTime,
4214 4215 online=projectParms.online,
4215 4216 ippKm=projectParms.ippKm
4216 4217 )
4217 4218
4218 4219 if projectParms.delay:
4219 4220 readUnitConfObj.addParameter(name="delay", value=projectParms.delay, format="int")
4220 4221
4221 4222 return readUnitConfObj
4222 4223
4223 4224 def createProcUnitView(self, projectObjView, datatype, inputId):
4224 4225
4225 4226 procUnitConfObj = projectObjView.addProcUnit(datatype=datatype, inputId=inputId)
4226 4227
4227 4228 self.__puObjDict[procUnitConfObj.getId()] = procUnitConfObj
4228 4229
4229 4230 return procUnitConfObj
4230 4231
4231 4232 def updateProcUnitView(self, id):
4232 4233
4233 4234 procUnitConfObj = projectObjView.getProcUnitObj(id)
4234 4235 procUnitConfObj.removeOperations()
4235 4236
4236 4237 return procUnitConfObj
4237 4238
4238 4239 def addPUWindow(self):
4239 4240
4240 4241 self.configUPWindowObj = UnitProcessWindow(self)
4241 4242 fatherObj = self.getSelectedItemObj()
4242 4243 try:
4243 4244 fatherObj.getElementName()
4244 4245 except:
4245 4246 self.console.append("First left click on Project or Processing Unit")
4246 4247 return 0
4247 4248
4248 4249 if fatherObj.getElementName() == 'Project':
4249 4250 readUnitConfObj = fatherObj.getReadUnitObj()
4250 4251 self.configUPWindowObj.dataTypeProject = str(readUnitConfObj.datatype)
4251 4252
4252 4253 self.configUPWindowObj.getfromWindowList.append(fatherObj)
4253 4254 self.configUPWindowObj.loadTotalList()
4254 4255 self.configUPWindowObj.show()
4255 4256 self.configUPWindowObj.closed.connect(self.createPUWindow)
4256 4257
4257 4258 def createPUWindow(self):
4258 4259
4259 4260 if not self.configUPWindowObj.create:
4260 4261 return
4261 4262
4262 4263 fatherObj = self.configUPWindowObj.getFromWindow
4263 4264 datatype = self.configUPWindowObj.typeofUP
4264 4265
4265 4266 if fatherObj.getElementName() == 'Project':
4266 4267 inputId = fatherObj.getReadUnitId()
4267 4268 projectObjView = fatherObj
4268 4269 else:
4269 4270 inputId = fatherObj.getId()
4270 4271 projectObjView = self.getSelectedProjectObj()
4271 4272
4272 4273 if not projectObjView:
4273 4274 return
4274 4275
4275 4276 puObj = self.createProcUnitView(projectObjView, datatype, inputId)
4276 4277
4277 4278 self.addPU2ProjectExplorer(puObj)
4278 4279
4279 4280 self.showtabPUCreated(datatype)
4280 4281
4281 4282 self.clearPUWindow(datatype)
4282 4283
4283 4284 self.showPUinitView()
4284 4285
4285 4286 def addFTPConf2Operation(self, puObj, opObj):
4286 4287
4287 4288 if not self.temporalFTP.create:
4288 4289 self.temporalFTP.setwithoutconfiguration()
4289 4290
4290 4291 # opObj.addParameter(name='server', value=self.temporalFTP.server, format='str')
4291 4292 # opObj.addParameter(name='remotefolder', value=self.temporalFTP.remotefolder, format='str')
4292 4293 # opObj.addParameter(name='username', value=self.temporalFTP.username, format='str')
4293 4294 # opObj.addParameter(name='password', value=self.temporalFTP.password, format='str')
4294 4295
4295 4296 if self.temporalFTP.ftp_wei:
4296 4297 opObj.addParameter(name='ftp_wei', value=int(self.temporalFTP.ftp_wei), format='int')
4297 4298 if self.temporalFTP.exp_code:
4298 4299 opObj.addParameter(name='exp_code', value=int(self.temporalFTP.exp_code), format='int')
4299 4300 if self.temporalFTP.sub_exp_code:
4300 4301 opObj.addParameter(name='sub_exp_code', value=int(self.temporalFTP.sub_exp_code), format='int')
4301 4302 if self.temporalFTP.plot_pos:
4302 4303 opObj.addParameter(name='plot_pos', value=int(self.temporalFTP.plot_pos), format='int')
4303 4304
4304 4305 # def __checkFTPProcUnit(self, projectObj, localfolder):
4305 4306 #
4306 4307 # puId = None
4307 4308 # puObj = None
4308 4309 #
4309 4310 # for thisPuId, thisPuObj in projectObj.procUnitItems():
4310 4311 #
4311 4312 # if not thisPuObj.name == "SendToServer":
4312 4313 # continue
4313 4314 #
4314 4315 # opObj = thisPuObj.getOperationObj(name='run')
4315 4316 #
4316 4317 # parmObj = opObj.getParameterObj('localfolder')
4317 4318 #
4318 4319 # #localfolder parameter should always be set, if it is not set then ProcUnit should be removed
4319 4320 # if not parmObj:
4320 4321 # projectObj.removeProcUnit(thisPuId)
4321 4322 # continue
4322 4323 #
4323 4324 # thisLocalfolder = parmObj.getValue()
4324 4325 #
4325 4326 # if localfolder != thisLocalfolder:
4326 4327 # continue
4327 4328 #
4328 4329 # puId = thisPuId
4329 4330 # puObj = thisPuObj
4330 4331 # break
4331 4332 #
4332 4333 # return puObj
4333 4334
4334 4335 def createFTPProcUnitView(self):
4335 4336
4336 4337 if not self.temporalFTP.create:
4337 4338 self.temporalFTP.setwithoutconfiguration()
4338 4339
4339 4340 projectObj = self.getSelectedProjectObj()
4340 4341
4341 4342 if not projectObj:
4342 4343 return
4343 4344
4344 4345 self.removeAllFTPProcUnitView(projectObj)
4345 4346
4346 4347 if not self.__puLocalFolder2FTP:
4347 4348 return
4348 4349
4349 4350 folderList = ",".join(self.__puLocalFolder2FTP.values())
4350 4351
4351 4352 procUnitConfObj = projectObj.addProcUnit(name="SendToServer")
4352 4353
4353 4354 procUnitConfObj.addParameter(name='server', value=self.temporalFTP.server, format='str')
4354 4355 procUnitConfObj.addParameter(name='username', value=self.temporalFTP.username, format='str')
4355 4356 procUnitConfObj.addParameter(name='password', value=self.temporalFTP.password, format='str')
4356 4357 procUnitConfObj.addParameter(name='localfolder', value=folderList, format='list')
4357 4358 procUnitConfObj.addParameter(name='remotefolder', value=self.temporalFTP.remotefolder, format='str')
4358 4359 procUnitConfObj.addParameter(name='ext', value=self.temporalFTP.extension, format='str')
4359 4360 procUnitConfObj.addParameter(name='period', value=self.temporalFTP.period, format='int')
4360 4361 procUnitConfObj.addParameter(name='protocol', value=self.temporalFTP.protocol, format='str')
4361 4362
4362 4363 procUnitConfObj.addParameter(name='ftp_wei', value=self.temporalFTP.ftp_wei, format='int')
4363 4364 procUnitConfObj.addParameter(name='exp_code', value=self.temporalFTP.exp_code, format='int')
4364 4365 procUnitConfObj.addParameter(name='sub_exp_code', value=self.temporalFTP.sub_exp_code, format='int')
4365 4366 procUnitConfObj.addParameter(name='plot_pos', value=self.temporalFTP.plot_pos, format='int')
4366 4367
4367 4368 self.__puObjDict[procUnitConfObj.getId()] = procUnitConfObj
4368 4369
4369 4370 def removeAllFTPProcUnitView(self, projectObj):
4370 4371
4371 4372 for thisPuId, thisPuObj in projectObj.procUnitItems():
4372 4373
4373 4374 if not thisPuObj.name == "SendToServer":
4374 4375 continue
4375 4376
4376 4377 projectObj.removeProcUnit(thisPuId)
4377 4378
4378 4379 if thisPuId not in self.__puObjDict.keys():
4379 4380 continue
4380 4381
4381 4382 self.__puObjDict.pop(thisPuId)
4382 4383
4383 4384 def showPUinitView(self):
4384 4385
4385 4386 self.propertiesModel = TreeModel()
4386 4387 self.propertiesModel.initPUVoltageView()
4387 4388 self.treeProjectProperties.setModel(self.propertiesModel)
4388 4389 self.treeProjectProperties.expandAll()
4389 4390 self.treeProjectProperties.allColumnsShowFocus()
4390 4391 self.treeProjectProperties.resizeColumnToContents(1)
4391 4392
4392 4393 def saveFTPFromOpObj(self, operationObj):
4393 4394
4394 4395 if operationObj.name != "SendByFTP":
4395 4396 return
4396 4397
4397 4398 server = operationObj.getParameterValue("server")
4398 4399 username = operationObj.getParameterValue("username")
4399 4400 password = operationObj.getParameterValue("password")
4400 4401 localfolder = operationObj.getParameterValue("localfolder")
4401 4402 remotefolder = operationObj.getParameterValue("remotefolder")
4402 4403 ext = operationObj.getParameterValue("ext")
4403 4404 period = operationObj.getParameterValue("period")
4404 4405
4405 4406 self.temporalFTP.save(server=server,
4406 4407 remotefolder=remotefolder,
4407 4408 username=username,
4408 4409 password=password,
4409 4410 localfolder=localfolder,
4410 4411 extension=ext)
4411 4412
4412 4413 return
4413 4414
4414 4415 def saveFTPFromProcUnitObj(self, puObj):
4415 4416
4416 4417 opObj = puObj.getOperationObj(name="run")
4417 4418
4418 4419 parmObj = opObj.getParameterObj(parameterName="server")
4419 4420 if parmObj == None:
4420 4421 server = 'jro-app.igp.gob.pe'
4421 4422 else:
4422 4423 server = parmObj.getValue()
4423 4424
4424 4425 parmObj = opObj.getParameterObj(parameterName="remotefolder")
4425 4426 if parmObj == None:
4426 4427 remotefolder = '/home/wmaster/graficos'
4427 4428 else:
4428 4429 remotefolder = parmObj.getValue()
4429 4430
4430 4431 parmObj = opObj.getParameterObj(parameterName="username")
4431 4432 if parmObj == None:
4432 4433 username = 'wmaster'
4433 4434 else:
4434 4435 username = parmObj.getValue()
4435 4436
4436 4437 parmObj = opObj.getParameterObj(parameterName="password")
4437 4438 if parmObj == None:
4438 4439 password = 'mst2010vhf'
4439 4440 else:
4440 4441 password = parmObj.getValue()
4441 4442
4442 4443 parmObj = opObj.getParameterObj(parameterName="ftp_wei")
4443 4444 if parmObj == None:
4444 4445 ftp_wei = 0
4445 4446 else:
4446 4447 ftp_wei = parmObj.getValue()
4447 4448
4448 4449 parmObj = opObj.getParameterObj(parameterName="exp_code")
4449 4450 if parmObj == None:
4450 4451 exp_code = 0
4451 4452 else:
4452 4453 exp_code = parmObj.getValue()
4453 4454
4454 4455 parmObj = opObj.getParameterObj(parameterName="sub_exp_code")
4455 4456 if parmObj == None:
4456 4457 sub_exp_code = 0
4457 4458 else:
4458 4459 sub_exp_code = parmObj.getValue()
4459 4460
4460 4461 parmObj = opObj.getParameterObj(parameterName="plot_pos")
4461 4462 if parmObj == None:
4462 4463 plot_pos = 0
4463 4464 else:
4464 4465 plot_pos = parmObj.getValue()
4465 4466
4466 4467 parmObj = opObj.getParameterObj(parameterName="localfolder")
4467 4468 if parmObj == None:
4468 4469 localfolder = None
4469 4470 else:
4470 4471 localfolder = parmObj.getValue()
4471 4472
4472 4473 parmObj = opObj.getParameterObj(parameterName="ext")
4473 4474 if parmObj == None:
4474 4475 extension = '.png'
4475 4476 else:
4476 4477 extension = parmObj.getValue()
4477 4478
4478 4479 self.temporalFTP.save(server=server,
4479 4480 remotefolder=remotefolder,
4480 4481 username=username,
4481 4482 password=password,
4482 4483 ftp_wei=ftp_wei,
4483 4484 exp_code=exp_code,
4484 4485 sub_exp_code=sub_exp_code,
4485 4486 plot_pos=plot_pos,
4486 4487 localfolder=localfolder,
4487 4488 extension=extension)
4488 4489
4489 4490 def addProject2ProjectExplorer(self, id, name):
4490 4491
4491 4492 itemTree = QtGui.QStandardItem(QtCore.QString(str(name)))
4492 4493
4493 4494 parentItem = self.projectExplorerModel.invisibleRootItem()
4494 4495 parentItem.appendRow(itemTree)
4495 4496
4496 4497 self.projectExplorerTree.setCurrentIndex(itemTree.index())
4497 4498
4498 4499 self.selectedItemTree = itemTree
4499 4500
4500 4501 self.__itemTreeDict[id] = itemTree
4501 4502
4502 4503 def addPU2ProjectExplorer(self, puObj):
4503 4504
4504 4505 id, name = puObj.id, puObj.datatype
4505 4506
4506 4507 itemTree = QtGui.QStandardItem(QtCore.QString(str(name)))
4507 4508
4508 4509 parentItem = self.selectedItemTree
4509 4510 parentItem.appendRow(itemTree)
4510 4511 self.projectExplorerTree.expandAll()
4511 4512
4512 4513 self.projectExplorerTree.setCurrentIndex(itemTree.index())
4513 4514
4514 4515 self.selectedItemTree = itemTree
4515 4516
4516 4517 self.__itemTreeDict[id] = itemTree
4517 4518
4518 4519 def addPU2PELoadXML(self, puObj):
4519 4520
4520 4521 id, name, inputId = puObj.id, puObj.datatype, puObj.inputId
4521 4522
4522 4523 itemTree = QtGui.QStandardItem(QtCore.QString(str(name)))
4523 4524
4524 4525 if self.__itemTreeDict.has_key(inputId):
4525 4526 parentItem = self.__itemTreeDict[inputId]
4526 4527 else:
4527 4528 #If parent is a Reader object
4528 4529 parentItem = self.__itemTreeDict[id[:-1]]
4529 4530
4530 4531 parentItem.appendRow(itemTree)
4531 4532 self.projectExplorerTree.expandAll()
4532 4533 parentItem = itemTree
4533 4534 self.projectExplorerTree.setCurrentIndex(parentItem.index())
4534 4535
4535 4536 self.__itemTreeDict[id] = itemTree
4536 4537 self.selectedItemTree = itemTree
4537 4538
4538 4539 def getSelectedProjectObj(self):
4539 4540 """
4540 4541 Return the current project object selected. If a processing unit is
4541 4542 actually selected this function returns associated project.
4542 4543
4543 4544 None if any project or processing unit is selected
4544 4545 """
4545 4546 for key in self.__itemTreeDict.keys():
4546 4547 if self.__itemTreeDict[key] != self.selectedItemTree:
4547 4548 continue
4548 4549
4549 4550 if self.__projectObjDict.has_key(key):
4550 4551 projectObj = self.__projectObjDict[key]
4551 4552 return projectObj
4552 4553
4553 4554 puObj = self.__puObjDict[key]
4554 4555
4555 4556 if puObj.parentId == None:
4556 4557 projectId = puObj.getId()[0]
4557 4558 else:
4558 4559 projectId = puObj.parentId
4559 4560
4560 4561 projectObj = self.__projectObjDict[projectId]
4561 4562 return projectObj
4562 4563
4563 4564 return None
4564 4565
4565 4566 def getSelectedItemObj(self):
4566 4567 """
4567 4568 Return the current project or processing unit object selected
4568 4569
4569 4570 None if any project or processing unit is selected
4570 4571 """
4571 4572 for key in self.__itemTreeDict.keys():
4572 4573 if self.__itemTreeDict[key] != self.selectedItemTree:
4573 4574 continue
4574 4575
4575 4576 if self.__projectObjDict.has_key(key) == True:
4576 4577 fatherObj = self.__projectObjDict[key]
4577 4578 else:
4578 4579 fatherObj = self.__puObjDict[key]
4579 4580
4580 4581 return fatherObj
4581 4582
4582 4583 return None
4583 4584
4584 4585 def _WarningWindow(self, text, information):
4585 4586
4586 4587 msgBox = QtGui.QMessageBox()
4587 4588 msgBox.setText(text)
4588 4589 msgBox.setInformativeText(information)
4589 4590 msgBox.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
4590 4591 msgBox.setDefaultButton(QtGui.QMessageBox.Ok)
4591 4592 ret = msgBox.exec_()
4592 4593
4593 4594 answer = False
4594 4595
4595 4596 if ret == QtGui.QMessageBox.Ok:
4596 4597 answer = True
4597 4598
4598 4599 return answer
4599 4600
4600 4601 def __getNewProjectId(self):
4601 4602
4602 4603 loadProject = False
4603 4604
4604 4605 for thisId in range(1,10):
4605 4606 newId = str(thisId)
4606 4607 if newId in self.__projectObjDict.keys():
4607 4608 continue
4608 4609
4609 4610 loadProject = True
4610 4611 projectId = newId
4611 4612 break
4612 4613
4613 4614 if not loadProject:
4614 4615 self.console.clear()
4615 4616 self.console.append("The maximum number of projects has been loaded, a new project can not be loaded")
4616 4617 return None
4617 4618
4618 4619 return projectId
4619 4620
4620 4621 def openProject(self):
4621 4622
4622 4623 self.actionStart.setEnabled(False)
4623 4624 self.actionStarToolbar.setEnabled(False)
4624 4625
4625 4626 self.frame_2.setEnabled(True)
4626 4627
4627 4628 # print self.dir
4628 4629 filename = str(QtGui.QFileDialog.getOpenFileName(self, "Open text file", self.pathWorkSpace, self.tr("Text Files (*.xml)")))
4629 4630
4630 4631 projectObjLoad = Project()
4631 4632
4632 4633 try:
4633 4634 projectObjLoad.readXml(filename)
4634 4635 except:
4635 4636 self.console.clear()
4636 4637 self.console.append("The selected xml file could not be loaded ...")
4637 4638 return 0
4638 4639
4639 4640 self.create = False
4640 4641 self.refreshProjectWindow(projectObjLoad)
4641 4642 self.refreshProjectProperties(projectObjLoad)
4642 4643
4643 4644 projectId = projectObjLoad.id
4644 4645
4645 4646 if projectId in self.__projectObjDict.keys():
4646 4647
4647 4648 # answer = self._WarningWindow("You already have a project loaded with the same Id",
4648 4649 # "Do you want to load the file anyway?")
4649 4650 # if not answer:
4650 4651 # return
4651 4652
4652 4653 projectId = self.__getNewProjectId()
4653 4654
4654 4655 if not projectId:
4655 4656 return
4656 4657
4657 4658 projectObjLoad.updateId(projectId)
4658 4659
4659 4660 self.__projectObjDict[projectId] = projectObjLoad
4660 4661
4661 4662 self.addProject2ProjectExplorer(id=projectId, name=projectObjLoad.name)
4662 4663
4663 4664 self.tabWidgetProject.setEnabled(True)
4664 4665 self.tabWidgetProject.setCurrentWidget(self.tabProject)
4665 4666 # Disable tabProject after finish the creation
4666 4667 self.tabProject.setEnabled(True)
4667 4668 puObjorderList = OrderedDict(sorted(projectObjLoad.procUnitConfObjDict.items(), key=lambda x: x[0]))
4668 4669
4669 4670 for puId, puObj in puObjorderList.items():
4670 4671
4671 4672 self.__puObjDict[puId] = puObj
4672 4673
4673 4674 if puObj.name == "SendToServer":
4674 4675 self.saveFTPFromProcUnitObj(puObj)
4675 4676
4676 4677 ############## COMPATIBLE WITH OLD VERSIONS ################
4677 4678 operationObj = puObj.getOperationObj("SendByFTP")
4678 4679
4679 4680 if operationObj:
4680 4681 self.saveFTPFromOpObj(operationObj)
4681 4682 ############################################################
4682 4683
4683 4684 if puObj.inputId == '0':
4684 4685 continue
4685 4686
4686 4687 self.addPU2PELoadXML(puObj)
4687 4688
4688 4689 self.refreshPUWindow(puObj)
4689 4690 self.refreshPUProperties(puObj)
4690 4691 self.showtabPUCreated(datatype=puObj.datatype)
4691 4692
4692 4693 self.console.clear()
4693 4694 self.console.append("The selected xml file has been loaded successfully")
4694 4695
4695 4696 self.actionStart.setEnabled(True)
4696 4697 self.actionStarToolbar.setEnabled(True)
4697 4698
4698 4699 def create_updating_timer(self):
4699 4700 self.comm_data_timer = QtCore.QTimer(self)
4700 4701 self.comm_data_timer.timeout.connect(self.on_comm_updating_timer)
4701 4702 self.comm_data_timer.start(1000)
4702 4703
4703 4704 def on_comm_updating_timer(self):
4704 4705 # Verifica si algun proceso ha sido inicializado y sigue ejecutandose
4705 4706 # Si el proceso se ha parado actualizar el GUI (stopProject)
4706 4707 if not self.__enable:
4707 4708 return
4708 4709
4709 4710 if self.controllerThread.isFinished():
4710 4711 self.stopProject()
4711 4712
4712 4713 # def jobStartedFromThread(self, success):
4713 4714 #
4714 4715 # self.console.clear()
4715 4716 # self.console.append("Job started")
4716 4717 #
4717 4718 # def jobFinishedFromThread(self, success):
4718 4719 #
4719 4720 # self.stopProject()
4720 4721
4721 4722 def playProject(self, ext=".xml", save=1):
4722 4723
4723 4724 projectObj = self.getSelectedProjectObj()
4724 4725
4725 4726 if not projectObj:
4726 4727 self.console.append("Please select a project before pressing PLAY button")
4727 4728 return
4728 4729
4729 4730 if save:
4730 4731 filename = self.saveProject()
4731 4732 if filename == None:
4732 4733 self.console.append("Process did not initialize.")
4733 4734 return
4734 4735 else:
4735 4736 filename = TEMPORAL_FILE
4736 4737 projectObj.writeXml( os.path.join(self.pathWorkSpace,filename) )
4737 4738
4738 4739 self.actionStart.setEnabled(False)
4739 4740 self.actionPause.setEnabled(True)
4740 4741 self.actionStop.setEnabled(True)
4741 4742
4742 4743 self.actionStarToolbar.setEnabled(False)
4743 4744 self.actionPauseToolbar.setEnabled(True)
4744 4745 self.actionStopToolbar.setEnabled(True)
4745 4746
4746 4747 self.console.append("Please Wait...")
4747 4748
4748 4749 self.controllerThread = ControllerThread(filename)
4749 4750
4750 4751 # QObject.connect( self.controllerThread, SIGNAL( "jobFinished( PyQt_PyObject )" ), self.jobFinishedFromThread )
4751 4752 # QObject.connect( self.controllerThread, SIGNAL( "jobStarted( PyQt_PyObject )" ), self.jobStartedFromThread )
4752 4753 self.console.clear()
4753 4754 self.controllerThread.start()
4754 4755 sleep(0.5)
4755 4756 self.__enable = True
4756 4757
4757 4758 def stopProject(self):
4758 4759
4759 4760 self.__enable = False
4760 4761
4761 4762 # self.commCtrlPThread.cmd_q.put(ProcessCommand(ProcessCommand.STOP, True))
4762 4763 self.controllerThread.stop()
4763 4764
4764 4765 while self.controllerThread.isRunning():
4765 4766 sleep(0.5)
4766 4767
4767 4768 self.actionStart.setEnabled(True)
4768 4769 self.actionPause.setEnabled(False)
4769 4770 self.actionStop.setEnabled(False)
4770 4771
4771 4772 self.actionStarToolbar.setEnabled(True)
4772 4773 self.actionPauseToolbar.setEnabled(False)
4773 4774 self.actionStopToolbar.setEnabled(False)
4774 4775
4775 4776 self.restorePauseIcon()
4776 4777
4777 4778 def pauseProject(self):
4778 4779
4779 4780 # self.commCtrlPThread.cmd_q.put(ProcessCommand(ProcessCommand.PAUSE, data=True))
4780 4781 self.controllerThread.pause()
4781 4782
4782 4783 self.actionStart.setEnabled(False)
4783 4784 self.actionPause.setEnabled(True)
4784 4785 self.actionStop.setEnabled(True)
4785 4786
4786 4787 self.actionStarToolbar.setEnabled(False)
4787 4788 self.actionPauseToolbar.setEnabled(True)
4788 4789 self.actionStopToolbar.setEnabled(True)
4789 4790
4790 4791 def saveProject(self, filename=None):
4791 4792
4792 4793 self.actionStart.setEnabled(False)
4793 4794 self.actionStarToolbar.setEnabled(False)
4794 4795
4795 4796 projectObj = self.getSelectedProjectObj()
4796 4797
4797 4798 if not projectObj:
4798 4799
4799 4800 if self.create:
4800 4801 self.console.append("Please press Ok before save it")
4801 4802 else:
4802 4803 self.console.append("Please select a project before save it")
4803 4804 return
4804 4805
4805 4806 self.refreshGraphicsId()
4806 4807
4807 4808 sts = True
4808 4809 selectedItemObj = self.getSelectedItemObj()
4809 4810
4810 4811 #A Processing Unit has been selected
4811 4812 if projectObj == selectedItemObj:
4812 4813 if not self.on_proOk_clicked():
4813 4814 return None
4814 4815
4815 4816 #A Processing Unit has been selected
4816 4817 if projectObj != selectedItemObj:
4817 4818 puObj = selectedItemObj
4818 4819
4819 4820 if puObj.name == 'VoltageProc':
4820 4821 sts = self.on_volOpOk_clicked()
4821 4822 if puObj.name == 'SpectraProc':
4822 4823 sts = self.on_specOpOk_clicked()
4823 4824 if puObj.name == 'SpectraHeisProc':
4824 4825 sts = self.on_specHeisOpOk_clicked()
4825 4826
4826 4827 if not sts:
4827 4828 return None
4828 4829
4829 4830 self.createFTPProcUnitView()
4830 4831
4831 4832 if not filename:
4832 4833 filename = os.path.join( str(self.pathWorkSpace), "%s%s" %(str(projectObj.name), '.xml') )
4833 4834
4834 4835 projectObj.writeXml(filename)
4835 4836 self.console.clear()
4836 4837 self.console.append("Project saved")
4837 4838 self.console.append("Press Play button to start data processing ...")
4838 4839
4839 4840 self.actionStart.setEnabled(True)
4840 4841 self.actionStarToolbar.setEnabled(True)
4841 4842
4842 4843 return filename
4843 4844
4844 4845 def removeItemTreeFromProject(self):
4845 4846 """
4846 4847 Metodo para eliminar el proyecto en el dictionario de proyectos y en el dictionario de vista de arbol
4847 4848 """
4848 4849 for key in self.__itemTreeDict.keys():
4849 4850
4850 4851 #Check again because an item can delete multiple items (childs)
4851 4852 if key not in self.__itemTreeDict.keys():
4852 4853 continue
4853 4854
4854 4855 if self.__itemTreeDict[key] != self.selectedItemTree:
4855 4856 continue
4856 4857
4857 4858 if self.__projectObjDict.has_key(key) == True:
4858 4859
4859 4860 del self.__projectObjDict[key]
4860 4861 del self.__itemTreeDict[key]
4861 4862
4862 4863 else:
4863 4864 puObj = self.__puObjDict[key]
4864 4865 idProjectParent = puObj.parentId
4865 4866 projectObj = self.__projectObjDict[idProjectParent]
4866 4867
4867 4868 del self.__puObjDict[key]
4868 4869 del self.__itemTreeDict[key]
4869 4870 del projectObj.procUnitConfObjDict[key]
4870 4871
4871 4872 for key in projectObj.procUnitConfObjDict.keys():
4872 4873 if projectObj.procUnitConfObjDict[key].inputId != puObj.getId():
4873 4874 continue
4874 4875 del self.__puObjDict[projectObj.procUnitConfObjDict[key].getId()]
4875 4876 del self.__itemTreeDict[projectObj.procUnitConfObjDict[key].getId()]
4876 4877 del projectObj.procUnitConfObjDict[key]
4877 4878 # print projectObj.procUnitConfObjDict
4878 4879 # print self.__itemTreeDict,self.__projectObjDict,self.__puObjDict
4879 4880
4880 4881 def setInputsProject_View(self):
4881 4882
4882 4883 self.tabWidgetProject.setEnabled(True)
4883 4884 self.tabWidgetProject.setCurrentWidget(self.tabProject)
4884 4885 self.tabProject.setEnabled(True)
4885 4886 self.frame_2.setEnabled(False)
4886 4887 self.proName.clear()
4887 4888 self.proName.setFocus()
4888 4889 self.proName.setSelection(0, 0)
4889 4890 self.proName.setCursorPosition(0)
4890 4891 self.proDataType.setText('.r')
4891 4892 self.proDataPath.clear()
4892 4893 self.proComDataType.clear()
4893 4894 self.proComDataType.addItem("Voltage")
4894 4895 self.proComDataType.addItem("Spectra")
4895 4896 self.proComDataType.addItem("Fits")
4896 4897 self.proComDataType.addItem("USRP")
4897 4898
4898 4899 self.proComStartDate.clear()
4899 4900 self.proComEndDate.clear()
4900 4901
4901 4902 startTime = "00:00:00"
4902 4903 endTime = "23:59:59"
4903 4904 starlist = startTime.split(":")
4904 4905 endlist = endTime.split(":")
4905 4906 self.proDelay.setText("60")
4906 4907 self.proSet.setText("")
4907 4908
4908 4909 self.labelSet.show()
4909 4910 self.proSet.show()
4910 4911
4911 4912 self.labelIPPKm.hide()
4912 4913 self.proIPPKm.hide()
4913 4914
4914 4915 self.time.setHMS(int(starlist[0]), int(starlist[1]), int(starlist[2]))
4915 4916 self.proStartTime.setTime(self.time)
4916 4917 self.time.setHMS(int(endlist[0]), int(endlist[1]), int(endlist[2]))
4917 4918 self.proEndTime.setTime(self.time)
4918 4919 self.proDescription.clear()
4919 4920 self.proOk.setEnabled(False)
4920 4921 # self.console.append("Please, Write a name Project")
4921 4922 # self.console.append("Introduce Project Parameters")DC
4922 4923 # self.console.append("Select data type Voltage( .rawdata) or Spectra(.pdata)")
4923 4924
4924 4925 def clearPUWindow(self, datatype):
4925 4926
4926 4927 projectObjView = self.getSelectedProjectObj()
4927 4928
4928 4929 if not projectObjView:
4929 4930 return
4930 4931
4931 4932 puObj = self.getSelectedItemObj()
4932 4933 inputId = puObj.getInputId()
4933 4934 inputPUObj = projectObjView.getProcUnitObj(inputId)
4934 4935
4935 4936 if datatype == 'Voltage':
4936 4937 self.volOpComChannels.setEnabled(False)
4937 4938 self.volOpComHeights.setEnabled(False)
4938 4939 self.volOpFilter.setEnabled(False)
4939 4940 self.volOpComProfile.setEnabled(False)
4940 4941 self.volOpComCode.setEnabled(False)
4941 4942 self.volOpCohInt.setEnabled(False)
4942 4943 self.volOpChannel.setEnabled(False)
4943 4944 self.volOpHeights.setEnabled(False)
4944 4945 self.volOpProfile.setEnabled(False)
4945 4946 self.volOpRadarfrequency.setEnabled(False)
4946 4947 self.volOpCebChannels.setCheckState(0)
4947 4948 self.volOpCebRadarfrequency.setCheckState(0)
4948 4949 self.volOpCebHeights.setCheckState(0)
4949 4950 self.volOpCebFilter.setCheckState(0)
4950 4951 self.volOpCebProfile.setCheckState(0)
4951 4952 self.volOpCebDecodification.setCheckState(0)
4952 4953 self.volOpCebCohInt.setCheckState(0)
4953 4954
4954 4955 self.volOpChannel.clear()
4955 4956 self.volOpHeights.clear()
4956 4957 self.volOpProfile.clear()
4957 4958 self.volOpFilter.clear()
4958 4959 self.volOpCohInt.clear()
4959 4960 self.volOpRadarfrequency.clear()
4960 4961
4961 4962 if datatype == 'Spectra':
4962 4963
4963 4964 if inputPUObj.datatype == 'Spectra':
4964 4965 self.specOpnFFTpoints.setEnabled(False)
4965 4966 self.specOpProfiles.setEnabled(False)
4966 4967 self.specOpippFactor.setEnabled(False)
4967 4968 else:
4968 4969 self.specOpnFFTpoints.setEnabled(True)
4969 4970 self.specOpProfiles.setEnabled(True)
4970 4971 self.specOpippFactor.setEnabled(True)
4971 4972
4972 4973 self.specOpCebCrossSpectra.setCheckState(0)
4973 4974 self.specOpCebChannel.setCheckState(0)
4974 4975 self.specOpCebHeights.setCheckState(0)
4975 4976 self.specOpCebIncoherent.setCheckState(0)
4976 4977 self.specOpCebRemoveDC.setCheckState(0)
4977 4978 self.specOpCebRemoveInt.setCheckState(0)
4978 4979 self.specOpCebgetNoise.setCheckState(0)
4979 4980 self.specOpCebRadarfrequency.setCheckState(0)
4980 4981
4981 4982 self.specOpRadarfrequency.setEnabled(False)
4982 4983 self.specOppairsList.setEnabled(False)
4983 4984 self.specOpChannel.setEnabled(False)
4984 4985 self.specOpHeights.setEnabled(False)
4985 4986 self.specOpIncoherent.setEnabled(False)
4986 4987 self.specOpgetNoise.setEnabled(False)
4987 4988
4988 4989 self.specOpRadarfrequency.clear()
4989 4990 self.specOpnFFTpoints.clear()
4990 4991 self.specOpProfiles.clear()
4991 4992 self.specOpippFactor.clear
4992 4993 self.specOppairsList.clear()
4993 4994 self.specOpChannel.clear()
4994 4995 self.specOpHeights.clear()
4995 4996 self.specOpIncoherent.clear()
4996 4997 self.specOpgetNoise.clear()
4997 4998
4998 4999 self.specGraphCebSpectraplot.setCheckState(0)
4999 5000 self.specGraphCebCrossSpectraplot.setCheckState(0)
5000 5001 self.specGraphCebRTIplot.setCheckState(0)
5001 5002 self.specGraphCebRTInoise.setCheckState(0)
5002 5003 self.specGraphCebCoherencmap.setCheckState(0)
5003 5004 self.specGraphPowerprofile.setCheckState(0)
5004 5005
5005 5006 self.specGraphSaveSpectra.setCheckState(0)
5006 5007 self.specGraphSaveCross.setCheckState(0)
5007 5008 self.specGraphSaveRTIplot.setCheckState(0)
5008 5009 self.specGraphSaveRTInoise.setCheckState(0)
5009 5010 self.specGraphSaveCoherencemap.setCheckState(0)
5010 5011 self.specGraphSavePowerprofile.setCheckState(0)
5011 5012
5012 5013 self.specGraphftpRTIplot.setCheckState(0)
5013 5014 self.specGraphftpRTInoise.setCheckState(0)
5014 5015 self.specGraphftpCoherencemap.setCheckState(0)
5015 5016
5016 5017 self.specGraphPath.clear()
5017 5018 self.specGraphPrefix.clear()
5018 5019
5019 5020 self.specGgraphftpratio.clear()
5020 5021
5021 5022 self.specGgraphChannelList.clear()
5022 5023 self.specGgraphFreq.clear()
5023 5024 self.specGgraphHeight.clear()
5024 5025 self.specGgraphDbsrange.clear()
5025 5026 self.specGgraphmagnitud.clear()
5026 5027 self.specGgraphTminTmax.clear()
5027 5028 self.specGgraphTimeRange.clear()
5028 5029
5029 5030 if datatype == 'SpectraHeis':
5030 5031 self.specHeisOpCebIncoherent.setCheckState(0)
5031 5032 self.specHeisOpIncoherent.setEnabled(False)
5032 5033 self.specHeisOpIncoherent.clear()
5033 5034
5034 5035 self.specHeisGraphCebSpectraplot.setCheckState(0)
5035 5036 self.specHeisGraphCebRTIplot.setCheckState(0)
5036 5037
5037 5038 self.specHeisGraphSaveSpectra.setCheckState(0)
5038 5039 self.specHeisGraphSaveRTIplot.setCheckState(0)
5039 5040
5040 5041 self.specHeisGraphftpSpectra.setCheckState(0)
5041 5042 self.specHeisGraphftpRTIplot.setCheckState(0)
5042 5043
5043 5044 self.specHeisGraphPath.clear()
5044 5045 self.specHeisGraphPrefix.clear()
5045 5046 self.specHeisGgraphChannelList.clear()
5046 5047 self.specHeisGgraphXminXmax.clear()
5047 5048 self.specHeisGgraphYminYmax.clear()
5048 5049 self.specHeisGgraphTminTmax.clear()
5049 5050 self.specHeisGgraphTimeRange.clear()
5050 5051 self.specHeisGgraphftpratio.clear()
5051 5052
5052 5053 def showtabPUCreated(self, datatype):
5053 5054
5054 5055 if datatype == "Voltage":
5055 5056 self.tabVoltage.setEnabled(True)
5056 5057 self.tabProject.setEnabled(False)
5057 5058 self.tabSpectra.setEnabled(False)
5058 5059 self.tabCorrelation.setEnabled(False)
5059 5060 self.tabSpectraHeis.setEnabled(False)
5060 5061 self.tabWidgetProject.setCurrentWidget(self.tabVoltage)
5061 5062
5062 5063 if datatype == "Spectra":
5063 5064 self.tabVoltage.setEnabled(False)
5064 5065 self.tabProject.setEnabled(False)
5065 5066 self.tabSpectra.setEnabled(True)
5066 5067 self.tabCorrelation.setEnabled(False)
5067 5068 self.tabSpectraHeis.setEnabled(False)
5068 5069 self.tabWidgetProject.setCurrentWidget(self.tabSpectra)
5069 5070
5070 5071 if datatype == "SpectraHeis":
5071 5072 self.tabVoltage.setEnabled(False)
5072 5073 self.tabProject.setEnabled(False)
5073 5074 self.tabSpectra.setEnabled(False)
5074 5075 self.tabCorrelation.setEnabled(False)
5075 5076 self.tabSpectraHeis.setEnabled(True)
5076 5077 self.tabWidgetProject.setCurrentWidget(self.tabSpectraHeis)
5077 5078
5078 5079 def checkInputsProject(self):
5079 5080 """
5080 5081 Check Inputs Project:
5081 5082 - project_name
5082 5083 - datatype
5083 5084 - ext
5084 5085 - data_path
5085 5086 - readmode
5086 5087 - delay
5087 5088 - set
5088 5089 - walk
5089 5090 """
5090 5091 parms_ok = True
5091 5092 project_name = str(self.proName.text())
5092 5093 if project_name == '' or project_name == None:
5093 5094 outputstr = "Enter the Project Name"
5094 5095 self.console.append(outputstr)
5095 5096 parms_ok = False
5096 5097 project_name = None
5097 5098
5098 5099 datatype = str(self.proComDataType.currentText())
5099 5100 if not(datatype in ['Voltage', 'Spectra', 'Fits', 'USRP']):
5100 5101 outputstr = 'datatype = %s, this must be either Voltage, Spectra, SpectraHeis or USRP' % datatype
5101 5102 self.console.append(outputstr)
5102 5103 parms_ok = False
5103 5104 datatype = None
5104 5105
5105 5106 ext = str(self.proDataType.text())
5106 5107 if not(ext in ['.r', '.pdata', '.fits', '.hdf5']):
5107 5108 outputstr = "extension files must be .r , .pdata, .fits or .hdf5"
5108 5109 self.console.append(outputstr)
5109 5110 parms_ok = False
5110 5111 ext = None
5111 5112
5112 5113 data_path = str(self.proDataPath.text())
5113 5114
5114 5115 if data_path == '':
5115 5116 outputstr = 'Datapath is empty'
5116 5117 self.console.append(outputstr)
5117 5118 parms_ok = False
5118 5119 data_path = None
5119 5120
5120 5121 if data_path != None:
5121 5122 if not os.path.isdir(data_path):
5122 5123 outputstr = 'Datapath:%s does not exists' % data_path
5123 5124 self.console.append(outputstr)
5124 5125 parms_ok = False
5125 5126 data_path = None
5126 5127
5127 5128 read_mode = str(self.proComReadMode.currentText())
5128 5129 if not(read_mode in ['Online', 'Offline']):
5129 5130 outputstr = 'Read Mode: %s, this must be either Online or Offline' % read_mode
5130 5131 self.console.append(outputstr)
5131 5132 parms_ok = False
5132 5133 read_mode = None
5133 5134
5134 5135 delay = None
5135 5136 if read_mode == "Online":
5136 5137 parms_ok = False
5137 5138 try:
5138 5139 delay = int(str(self.proDelay.text()))
5139 5140 parms_ok = True
5140 5141 except:
5141 5142 outputstr = 'Delay: %s, this must be a integer number' % str(self.proDelay.text())
5142 5143 self.console.append(outputstr)
5143 5144
5144 5145 try:
5145 5146 set = int(str(self.proSet.text()))
5146 5147 except:
5147 5148 # outputstr = 'Set: %s, this must be a integer number' % str(self.proName.text())
5148 5149 # self.console.append(outputstr)
5149 5150 # parms_ok = False
5150 5151 set = None
5151 5152
5152 5153 walk = int(self.proComWalk.currentIndex())
5153 5154 expLabel = str(self.proExpLabel.text())
5154 5155
5155 5156 return parms_ok, project_name, datatype, ext, data_path, read_mode, delay, walk, set, expLabel
5156 5157
5157 5158 def checkInputsPUSave(self, datatype):
5158 5159 """
5159 5160 Check Inputs Spectra Save:
5160 5161 - path
5161 5162 - blocks Per File
5162 5163 - sufix
5163 5164 - dataformat
5164 5165 """
5165 5166 parms_ok = True
5166 5167
5167 5168 if datatype == "Voltage":
5168 5169 output_path = str(self.volOutputPath.text())
5169 5170 blocksperfile = str(self.volOutputblocksperfile.text())
5170 5171 profilesperblock = str(self.volOutputprofilesperblock.text())
5171 5172
5172 5173 if datatype == "Spectra":
5173 5174 output_path = str(self.specOutputPath.text())
5174 5175 blocksperfile = str(self.specOutputblocksperfile.text())
5175 5176 profilesperblock = 0
5176 5177
5177 5178 if datatype == "SpectraHeis":
5178 5179 output_path = str(self.specHeisOutputPath.text())
5179 5180 blocksperfile = str(self.specHeisOutputblocksperfile.text())
5180 5181 metada = str(self.specHeisOutputMetada.text())
5181 5182
5182 5183 if output_path == '':
5183 5184 outputstr = 'Outputpath is empty'
5184 5185 self.console.append(outputstr)
5185 5186 parms_ok = False
5186 5187 data_path = None
5187 5188
5188 5189 if output_path != None:
5189 5190 if not os.path.exists(output_path):
5190 5191 outputstr = 'OutputPath:%s does not exists' % output_path
5191 5192 self.console.append(outputstr)
5192 5193 parms_ok = False
5193 5194 output_path = None
5194 5195
5195 5196
5196 5197 try:
5197 5198 profilesperblock = int(profilesperblock)
5198 5199 except:
5199 5200 if datatype == "Voltage":
5200 5201 outputstr = 'Profilesperblock: %s, this must be a integer number' % str(self.volOutputprofilesperblock.text())
5201 5202 self.console.append(outputstr)
5202 5203 parms_ok = False
5203 5204 profilesperblock = None
5204 5205
5205 5206 try:
5206 5207 blocksperfile = int(blocksperfile)
5207 5208 except:
5208 5209 if datatype == "Voltage":
5209 5210 outputstr = 'Blocksperfile: %s, this must be a integer number' % str(self.volOutputblocksperfile.text())
5210 5211 elif datatype == "Spectra":
5211 5212 outputstr = 'Blocksperfile: %s, this must be a integer number' % str(self.specOutputblocksperfile.text())
5212 5213 elif datatype == "SpectraHeis":
5213 5214 outputstr = 'Blocksperfile: %s, this must be a integer number' % str(self.specHeisOutputblocksperfile.text())
5214 5215
5215 5216 self.console.append(outputstr)
5216 5217 parms_ok = False
5217 5218 blocksperfile = None
5218 5219
5219 5220 if datatype == "SpectraHeis":
5220 5221 if metada == '':
5221 5222 outputstr = 'Choose metada file'
5222 5223 self.console.append(outputstr)
5223 5224 parms_ok = False
5224 5225 if metada != None:
5225 5226 if not os.path.isfile(metada):
5226 5227 outputstr = 'Metadata:%s does not exists' % metada
5227 5228 self.console.append(outputstr)
5228 5229 parms_ok = False
5229 5230 output_path = None
5230 5231
5231 5232 if datatype == "Voltage":
5232 5233 return parms_ok, output_path, blocksperfile, profilesperblock
5233 5234
5234 5235
5235 5236 if datatype == "Spectra":
5236 5237 return parms_ok, output_path, blocksperfile, profilesperblock
5237 5238
5238 5239
5239 5240 if datatype == "SpectraHeis":
5240 5241 return parms_ok, output_path, blocksperfile, metada
5241 5242
5242 5243 def findDatafiles(self, data_path, ext, walk, expLabel=''):
5243 5244
5244 5245 dateList = []
5245 5246 fileList = []
5246 5247
5247 5248 if ext == ".r":
5248 5249 from schainpy.model.io.jroIO_base import JRODataReader
5249 5250
5250 5251 readerObj = JRODataReader()
5251 5252 dateList = readerObj.findDatafiles(path=data_path,
5252 5253 expLabel=expLabel,
5253 5254 ext=ext,
5254 5255 walk=walk)
5255 5256
5256 5257 if ext == ".pdata":
5257 5258 from schainpy.model.io.jroIO_base import JRODataReader
5258 5259
5259 5260 readerObj = JRODataReader()
5260 5261 dateList = readerObj.findDatafiles(path=data_path,
5261 5262 expLabel=expLabel,
5262 5263 ext=ext,
5263 5264 walk=walk)
5264 5265
5265 5266 if ext == ".fits":
5266 5267 from schainpy.model.io.jroIO_base import JRODataReader
5267 5268
5268 5269 readerObj = JRODataReader()
5269 5270 dateList = readerObj.findDatafiles(path=data_path,
5270 5271 expLabel=expLabel,
5271 5272 ext=ext,
5272 5273 walk=walk)
5273 5274
5274 5275 if ext == ".hdf5":
5275 5276 from schainpy.model.io.jroIO_usrp import USRPReader
5276 5277
5277 5278 readerObj = USRPReader()
5278 5279 dateList = readerObj.findDatafiles(path=data_path)
5279 5280
5280 5281 return dateList
5281 5282
5282 5283 def loadDays(self, data_path, ext, walk, expLabel=''):
5283 5284 """
5284 5285 Method to loads day
5285 5286 """
5286 5287 self.proOk.setEnabled(False)
5287 5288 self.proComStartDate.clear()
5288 5289 self.proComEndDate.clear()
5289 5290
5290 5291 self.dateList = []
5291 5292
5292 5293 if not os.path.isdir(data_path):
5293 5294 return
5294 5295
5295 5296 self.dataPath = data_path
5296 5297
5297 5298 dateList = self.findDatafiles(data_path, ext=ext, walk=walk, expLabel=expLabel)
5298 5299
5299 5300 if not dateList:
5300 5301 # self.console.clear()
5301 5302 if walk:
5302 5303 if expLabel:
5303 5304 outputstr = "No files (*%s) were found on %s/DOYPATH/%s" % (ext, data_path, expLabel)
5304 5305 else:
5305 5306 outputstr = "No files (*%s) were found on %s" % (ext, data_path)
5306 5307 else:
5307 5308 outputstr = "No files (*%s) were found on %s" % (ext, data_path)
5308 5309
5309 5310 self.console.append(outputstr)
5310 5311 return
5311 5312
5312 5313 dateStrList = []
5313 5314 for thisDate in dateList:
5314 5315 dateStr = thisDate.strftime("%Y/%m/%d")
5315 5316
5316 5317 self.proComStartDate.addItem(dateStr)
5317 5318 self.proComEndDate.addItem(dateStr)
5318 5319 dateStrList.append(dateStr)
5319 5320
5320 5321 self.proComStartDate.setCurrentIndex(0)
5321 5322 self.proComEndDate.setCurrentIndex(self.proComEndDate.count() - 1)
5322 5323
5323 5324 self.dateList = dateStrList
5324 5325 self.proOk.setEnabled(True)
5325 5326
5326 5327 self.console.clear()
5327 5328 self.console.append("Successful load")
5328 5329
5329 5330 return self.dateList
5330 5331
5331 5332 def setWorkSpaceGUI(self, pathWorkSpace=None):
5332 5333
5333 5334 if pathWorkSpace == None:
5334 5335 home = os.path.expanduser("~")
5335 5336 pathWorkSpace = os.path.join(home,'schain_workspace')
5336 5337
5337 5338 self.pathWorkSpace = pathWorkSpace
5338 5339
5339 5340 """
5340 5341 Comandos Usados en Console
5341 5342 """
5342 5343 def __del__(self):
5343 5344 sys.stdout = sys.__stdout__
5344 5345 sys.stderr = sys.__stderr__
5345 5346
5346 5347 def normalOutputWritten(self, text):
5347 5348 color_black = QtGui.QColor(0,0,0)
5348 5349 self.console.setTextColor(color_black)
5349 5350 self.console.append(text)
5350 5351
5351 5352 def errorOutputWritten(self, text):
5352 5353 color_red = QtGui.QColor(255,0,0)
5353 5354 color_black = QtGui.QColor(0,0,0)
5354 5355
5355 5356 self.console.setTextColor(color_red)
5356 5357 self.console.append(text)
5357 5358 self.console.setTextColor(color_black)
5358 5359
5359 5360 def setGUIStatus(self):
5360 5361
5361 5362 self.setWindowTitle("ROJ-Signal Chain")
5362 5363 self.setWindowIcon(QtGui.QIcon( os.path.join(FIGURES_PATH,"adn.jpg") ))
5363 5364
5364 5365 self.tabWidgetProject.setEnabled(False)
5365 5366 self.tabVoltage.setEnabled(False)
5366 5367 self.tabSpectra.setEnabled(False)
5367 5368 self.tabCorrelation.setEnabled(False)
5368 5369 self.frame_2.setEnabled(False)
5369 5370
5370 5371 self.actionCreate.setShortcut('Ctrl+N')
5371 5372 self.actionOpen.setShortcut('Ctrl+O')
5372 5373 self.actionSave.setShortcut('Ctrl+S')
5373 5374 self.actionClose.setShortcut('Ctrl+X')
5374 5375
5375 5376 self.actionStart.setShortcut('Ctrl+1')
5376 5377 self.actionPause.setShortcut('Ctrl+2')
5377 5378 self.actionStop.setShortcut('Ctrl+3')
5378 5379
5379 5380 self.actionFTP.setShortcut('Ctrl+F')
5380 5381
5381 5382 self.actionStart.setEnabled(False)
5382 5383 self.actionPause.setEnabled(False)
5383 5384 self.actionStop.setEnabled(False)
5384 5385
5385 5386 self.actionStarToolbar.setEnabled(False)
5386 5387 self.actionPauseToolbar.setEnabled(False)
5387 5388 self.actionStopToolbar.setEnabled(False)
5388 5389
5389 5390 self.proName.clear()
5390 5391 self.proDataPath.setText('')
5391 5392 self.console.setReadOnly(True)
5392 5393 self.console.append("Welcome to Signal Chain\nOpen a project or Create a new one")
5393 5394 self.proStartTime.setDisplayFormat("hh:mm:ss")
5394 5395 self.proDataType.setEnabled(False)
5395 5396 self.time = QtCore.QTime()
5396 5397 self.hour = 0
5397 5398 self.min = 0
5398 5399 self.sec = 0
5399 5400 self.proEndTime.setDisplayFormat("hh:mm:ss")
5400 5401 startTime = "00:00:00"
5401 5402 endTime = "23:59:59"
5402 5403 starlist = startTime.split(":")
5403 5404 endlist = endTime.split(":")
5404 5405 self.time.setHMS(int(starlist[0]), int(starlist[1]), int(starlist[2]))
5405 5406 self.proStartTime.setTime(self.time)
5406 5407 self.time.setHMS(int(endlist[0]), int(endlist[1]), int(endlist[2]))
5407 5408 self.proEndTime.setTime(self.time)
5408 5409 self.proOk.setEnabled(False)
5409 5410 # set model Project Explorer
5410 5411 self.projectExplorerModel = QtGui.QStandardItemModel()
5411 5412 self.projectExplorerModel.setHorizontalHeaderLabels(("Project Explorer",))
5412 5413 layout = QtGui.QVBoxLayout()
5413 5414 layout.addWidget(self.projectExplorerTree)
5414 5415 self.projectExplorerTree.setModel(self.projectExplorerModel)
5415 5416 self.projectExplorerTree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
5416 5417 self.projectExplorerTree.customContextMenuRequested.connect(self.on_right_click)
5417 5418 self.projectExplorerTree.clicked.connect(self.on_click)
5418 5419 self.projectExplorerTree.expandAll()
5419 5420 # set model Project Properties
5420 5421
5421 5422 self.propertiesModel = TreeModel()
5422 5423 self.propertiesModel.initProjectView()
5423 5424 self.treeProjectProperties.setModel(self.propertiesModel)
5424 5425 self.treeProjectProperties.expandAll()
5425 5426 self.treeProjectProperties.allColumnsShowFocus()
5426 5427 self.treeProjectProperties.resizeColumnToContents(1)
5427 5428
5428 5429 # set Project
5429 5430 self.proExpLabel.setEnabled(True)
5430 5431 self.proDelay.setEnabled(False)
5431 5432 self.proSet.setEnabled(True)
5432 5433 self.proDataType.setReadOnly(True)
5433 5434
5434 5435 # set Operation Voltage
5435 5436 self.volOpComChannels.setEnabled(False)
5436 5437 self.volOpComHeights.setEnabled(False)
5437 5438 self.volOpFilter.setEnabled(False)
5438 5439 self.volOpComProfile.setEnabled(False)
5439 5440 self.volOpComCode.setEnabled(False)
5440 5441 self.volOpFlip.setEnabled(False)
5441 5442 self.volOpCohInt.setEnabled(False)
5442 5443 self.volOpRadarfrequency.setEnabled(False)
5443 5444
5444 5445 self.volOpChannel.setEnabled(False)
5445 5446 self.volOpHeights.setEnabled(False)
5446 5447 self.volOpProfile.setEnabled(False)
5447 5448 self.volOpComMode.setEnabled(False)
5448 5449
5449 5450 self.volGraphPath.setEnabled(False)
5450 5451 self.volGraphPrefix.setEnabled(False)
5451 5452 self.volGraphToolPath.setEnabled(False)
5452 5453
5453 5454 # set Graph Voltage
5454 5455 self.volGraphChannelList.setEnabled(False)
5455 5456 self.volGraphfreqrange.setEnabled(False)
5456 5457 self.volGraphHeightrange.setEnabled(False)
5457 5458
5458 5459 # set Operation Spectra
5459 5460 self.specOpnFFTpoints.setEnabled(False)
5460 5461 self.specOpProfiles.setEnabled(False)
5461 5462 self.specOpippFactor.setEnabled(False)
5462 5463 self.specOppairsList.setEnabled(False)
5463 5464 self.specOpComChannel.setEnabled(False)
5464 5465 self.specOpComHeights.setEnabled(False)
5465 5466 self.specOpIncoherent.setEnabled(False)
5466 5467 self.specOpgetNoise.setEnabled(False)
5467 5468 self.specOpRadarfrequency.setEnabled(False)
5468 5469
5469 5470
5470 5471 self.specOpChannel.setEnabled(False)
5471 5472 self.specOpHeights.setEnabled(False)
5472 5473 # set Graph Spectra
5473 5474 self.specGgraphChannelList.setEnabled(False)
5474 5475 self.specGgraphFreq.setEnabled(False)
5475 5476 self.specGgraphHeight.setEnabled(False)
5476 5477 self.specGgraphDbsrange.setEnabled(False)
5477 5478 self.specGgraphmagnitud.setEnabled(False)
5478 5479 self.specGgraphTminTmax.setEnabled(False)
5479 5480 self.specGgraphTimeRange.setEnabled(False)
5480 5481 self.specGraphPath.setEnabled(False)
5481 5482 self.specGraphToolPath.setEnabled(False)
5482 5483 self.specGraphPrefix.setEnabled(False)
5483 5484
5484 5485 self.specGgraphftpratio.setEnabled(False)
5485 5486 # set Operation SpectraHeis
5486 5487 self.specHeisOpIncoherent.setEnabled(False)
5487 5488 self.specHeisOpCobIncInt.setEnabled(False)
5488 5489 # set Graph SpectraHeis
5489 5490 self.specHeisGgraphChannelList.setEnabled(False)
5490 5491 self.specHeisGgraphXminXmax.setEnabled(False)
5491 5492 self.specHeisGgraphYminYmax.setEnabled(False)
5492 5493 self.specHeisGgraphTminTmax.setEnabled(False)
5493 5494 self.specHeisGgraphTimeRange.setEnabled(False)
5494 5495 self.specHeisGgraphftpratio.setEnabled(False)
5495 5496 self.specHeisGraphPath.setEnabled(False)
5496 5497 self.specHeisGraphPrefix.setEnabled(False)
5497 5498 self.specHeisGraphToolPath.setEnabled(False)
5498 5499
5499 5500
5500 5501 # tool tip gui
5501 5502 QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10))
5502 5503 self.projectExplorerTree.setToolTip('Right clik to add Project or Unit Process')
5503 5504 # tool tip gui project
5504 5505 self.proComWalk.setToolTip('<b>On Files</b>:<i>Search file in format .r or pdata</i> <b>On Folders</b>:<i>Search file in a directory DYYYYDOY</i>')
5505 5506 self.proComWalk.setCurrentIndex(0)
5506 5507 # tool tip gui volOp
5507 5508 self.volOpChannel.setToolTip('Example: 1,2,3,4,5')
5508 5509 self.volOpHeights.setToolTip('Example: 90,180')
5509 5510 self.volOpFilter.setToolTip('Example: 2')
5510 5511 self.volOpProfile.setToolTip('Example:0,127')
5511 5512 self.volOpCohInt.setToolTip('Example: 128')
5512 5513 self.volOpFlip.setToolTip('ChannelList where flip will be applied. Example: 0,2,3')
5513 5514 self.volOpOk.setToolTip('If you have finished, please Ok ')
5514 5515 # tool tip gui volGraph
5515 5516 self.volGraphfreqrange.setToolTip('Height range. Example: 50,100')
5516 5517 self.volGraphHeightrange.setToolTip('Amplitude. Example: 0,10000')
5517 5518 # tool tip gui specOp
5518 5519 self.specOpnFFTpoints.setToolTip('Example: 128')
5519 5520 self.specOpProfiles.setToolTip('Example: 128')
5520 5521 self.specOpippFactor.setToolTip('Example:1.0')
5521 5522 self.specOpIncoherent.setToolTip('Example: 10')
5522 5523 self.specOpgetNoise.setToolTip('Example:20,180,30,120 (minHei,maxHei,minVel,maxVel)')
5523 5524
5524 5525 self.specOpChannel.setToolTip('Example: 0,1,2,3')
5525 5526 self.specOpHeights.setToolTip('Example: 90,180')
5526 5527 self.specOppairsList.setToolTip('Example: (0,1),(2,3)')
5527 5528 # tool tip gui specGraph
5528 5529
5529 5530 self.specGgraphChannelList.setToolTip('Example: 0,3,4')
5530 5531 self.specGgraphFreq.setToolTip('Example: -20,20')
5531 5532 self.specGgraphHeight.setToolTip('Example: 100,400')
5532 5533 self.specGgraphDbsrange.setToolTip('Example: 30,170')
5533 5534
5534 5535 self.specGraphPrefix.setToolTip('Example: EXPERIMENT_NAME')
5535 5536
5536 5537
5537 5538 self.specHeisOpIncoherent.setToolTip('Example: 10')
5538 5539
5539 5540 self.specHeisGgraphChannelList.setToolTip('Example: 0,2,3')
5540 5541 self.specHeisGgraphXminXmax.setToolTip('Example (Hz): -1000, 1000')
5541 5542 self.specHeisGgraphYminYmax.setToolTip('Example (dB): 5, 35')
5542 5543 self.specHeisGgraphTminTmax.setToolTip('Example (hours): 0, 24')
5543 5544 self.specHeisGgraphTimeRange.setToolTip('Example (hours): 8')
5544 5545
5545 5546 self.labelSet.show()
5546 5547 self.proSet.show()
5547 5548
5548 5549 self.labelIPPKm.hide()
5549 5550 self.proIPPKm.hide()
5550 5551
5551 5552 sys.stdout = ShowMeConsole(textWritten=self.normalOutputWritten)
5552 5553 # sys.stderr = ShowMeConsole(textWritten=self.errorOutputWritten)
5553 5554
5554 5555
5555 5556 class UnitProcessWindow(QMainWindow, Ui_UnitProcess):
5556 5557 """
5557 5558 Class documentation goes here.
5558 5559 """
5559 5560 closed = pyqtSignal()
5560 5561 create = False
5561 5562
5562 5563 def __init__(self, parent=None):
5563 5564 """
5564 5565 Constructor
5565 5566 """
5566 5567 QMainWindow.__init__(self, parent)
5567 5568 self.setupUi(self)
5568 5569 self.getFromWindow = None
5569 5570 self.getfromWindowList = []
5570 5571 self.dataTypeProject = None
5571 5572
5572 5573 self.listUP = None
5573 5574
5574 5575 @pyqtSignature("")
5575 5576 def on_unitPokbut_clicked(self):
5576 5577 """
5577 5578 Slot documentation goes here.
5578 5579 """
5579 5580 self.create = True
5580 5581 self.getFromWindow = self.getfromWindowList[int(self.comboInputBox.currentIndex())]
5581 5582 # self.nameofUP= str(self.nameUptxt.text())
5582 5583 self.typeofUP = str(self.comboTypeBox.currentText())
5583 5584 self.close()
5584 5585
5585 5586
5586 5587 @pyqtSignature("")
5587 5588 def on_unitPcancelbut_clicked(self):
5588 5589 """
5589 5590 Slot documentation goes here.
5590 5591 """
5591 5592 self.create = False
5592 5593 self.close()
5593 5594
5594 5595 def loadTotalList(self):
5595 5596 self.comboInputBox.clear()
5596 5597 for i in self.getfromWindowList:
5597 5598
5598 5599 name = i.getElementName()
5599 5600 if name == 'Project':
5600 5601 id = i.id
5601 5602 name = i.name
5602 5603 if self.dataTypeProject == 'Voltage':
5603 5604 self.comboTypeBox.clear()
5604 5605 self.comboTypeBox.addItem("Voltage")
5605 5606
5606 5607 if self.dataTypeProject == 'Spectra':
5607 5608 self.comboTypeBox.clear()
5608 5609 self.comboTypeBox.addItem("Spectra")
5609 5610 self.comboTypeBox.addItem("Correlation")
5610 5611 if self.dataTypeProject == 'Fits':
5611 5612 self.comboTypeBox.clear()
5612 5613 self.comboTypeBox.addItem("SpectraHeis")
5613 5614
5614 5615
5615 5616 if name == 'ProcUnit':
5616 5617 id = int(i.id) - 1
5617 5618 name = i.datatype
5618 5619 if name == 'Voltage':
5619 5620 self.comboTypeBox.clear()
5620 5621 self.comboTypeBox.addItem("Spectra")
5621 5622 self.comboTypeBox.addItem("SpectraHeis")
5622 5623 self.comboTypeBox.addItem("Correlation")
5623 5624 if name == 'Spectra':
5624 5625 self.comboTypeBox.clear()
5625 5626 self.comboTypeBox.addItem("Spectra")
5626 5627 self.comboTypeBox.addItem("SpectraHeis")
5627 5628 self.comboTypeBox.addItem("Correlation")
5628 5629 if name == 'SpectraHeis':
5629 5630 self.comboTypeBox.clear()
5630 5631 self.comboTypeBox.addItem("SpectraHeis")
5631 5632
5632 5633 self.comboInputBox.addItem(str(name))
5633 5634 # self.comboInputBox.addItem(str(name)+str(id))
5634 5635
5635 5636 def closeEvent(self, event):
5636 5637 self.closed.emit()
5637 5638 event.accept()
5638 5639
5639 5640 class Ftp(QMainWindow, Ui_Ftp):
5640 5641 """
5641 5642 Class documentation goes here.
5642 5643 """
5643 5644 create = False
5644 5645 closed = pyqtSignal()
5645 5646 server = None
5646 5647 remotefolder = None
5647 5648 username = None
5648 5649 password = None
5649 5650 ftp_wei = None
5650 5651 exp_code = None
5651 5652 sub_exp_code = None
5652 5653 plot_pos = None
5653 5654
5654 5655 def __init__(self, parent=None):
5655 5656 """
5656 5657 Constructor
5657 5658 """
5658 5659 QMainWindow.__init__(self, parent)
5659 5660 self.setupUi(self)
5660 5661 self.setGUIStatus()
5661 5662
5662 5663 def setGUIStatus(self):
5663 5664 self.setWindowTitle("ROJ-Signal Chain")
5664 5665 self.serverFTP.setToolTip('Example: jro-app.igp.gob.pe')
5665 5666 self.folderFTP.setToolTip('Example: /home/wmaster/graficos')
5666 5667 self.usernameFTP.setToolTip('Example: myusername')
5667 5668 self.passwordFTP.setToolTip('Example: mypass ')
5668 5669 self.weightFTP.setToolTip('Example: 0')
5669 5670 self.expcodeFTP.setToolTip('Example: 0')
5670 5671 self.subexpFTP.setToolTip('Example: 0')
5671 5672 self.plotposFTP.setToolTip('Example: 0')
5672 5673
5673 5674 def setParmsfromTemporal(self, server, remotefolder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos):
5674 5675 self.serverFTP.setText(str(server))
5675 5676 self.folderFTP.setText(str(remotefolder))
5676 5677 self.usernameFTP.setText(str(username))
5677 5678 self.passwordFTP.setText(str(password))
5678 5679 self.weightFTP.setText(str(ftp_wei))
5679 5680 self.expcodeFTP.setText(str(exp_code))
5680 5681 self.subexpFTP.setText(str(sub_exp_code))
5681 5682 self.plotposFTP.setText(str(plot_pos))
5682 5683
5683 5684 def getParmsFromFtpWindow(self):
5684 5685 """
5685 5686 Return Inputs Project:
5686 5687 - server
5687 5688 - remotefolder
5688 5689 - username
5689 5690 - password
5690 5691 - ftp_wei
5691 5692 - exp_code
5692 5693 - sub_exp_code
5693 5694 - plot_pos
5694 5695 """
5695 5696 name_server_ftp = str(self.serverFTP.text())
5696 5697 if not name_server_ftp:
5697 5698 self.console.clear()
5698 5699 self.console.append("Please Write a FTP Server")
5699 5700 return 0
5700 5701
5701 5702 folder_server_ftp = str(self.folderFTP.text())
5702 5703 if not folder_server_ftp:
5703 5704 self.console.clear()
5704 5705 self.console.append("Please Write a Folder")
5705 5706 return 0
5706 5707
5707 5708 username_ftp = str(self.usernameFTP.text())
5708 5709 if not username_ftp:
5709 5710 self.console.clear()
5710 5711 self.console.append("Please Write a User Name")
5711 5712 return 0
5712 5713
5713 5714 password_ftp = str(self.passwordFTP.text())
5714 5715 if not password_ftp:
5715 5716 self.console.clear()
5716 5717 self.console.append("Please Write a passwordFTP")
5717 5718 return 0
5718 5719
5719 5720 ftp_wei = str(self.weightFTP.text())
5720 5721 if not ftp_wei == "":
5721 5722 try:
5722 5723 ftp_wei = int(self.weightFTP.text())
5723 5724 except:
5724 5725 self.console.clear()
5725 5726 self.console.append("Please Write a ftp_wei number")
5726 5727 return 0
5727 5728
5728 5729 exp_code = str(self.expcodeFTP.text())
5729 5730 if not exp_code == "":
5730 5731 try:
5731 5732 exp_code = int(self.expcodeFTP.text())
5732 5733 except:
5733 5734 self.console.clear()
5734 5735 self.console.append("Please Write a exp_code number")
5735 5736 return 0
5736 5737
5737 5738
5738 5739 sub_exp_code = str(self.subexpFTP.text())
5739 5740 if not sub_exp_code == "":
5740 5741 try:
5741 5742 sub_exp_code = int(self.subexpFTP.text())
5742 5743 except:
5743 5744 self.console.clear()
5744 5745 self.console.append("Please Write a sub_exp_code number")
5745 5746 return 0
5746 5747
5747 5748 plot_pos = str(self.plotposFTP.text())
5748 5749 if not plot_pos == "":
5749 5750 try:
5750 5751 plot_pos = int(self.plotposFTP.text())
5751 5752 except:
5752 5753 self.console.clear()
5753 5754 self.console.append("Please Write a plot_pos number")
5754 5755 return 0
5755 5756
5756 5757 return name_server_ftp, folder_server_ftp, username_ftp, password_ftp, ftp_wei, exp_code, sub_exp_code, plot_pos
5757 5758
5758 5759 @pyqtSignature("")
5759 5760 def on_ftpOkButton_clicked(self):
5760 5761 server, remotefolder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos = self.getParmsFromFtpWindow()
5761 5762 self.create = True
5762 5763 self.close()
5763 5764
5764 5765 @pyqtSignature("")
5765 5766 def on_ftpCancelButton_clicked(self):
5766 5767 self.create = False
5767 5768 self.close()
5768 5769
5769 5770 def closeEvent(self, event):
5770 5771 self.closed.emit()
5771 5772 event.accept()
5772 5773
5773 5774 class ftpBuffer():
5774 5775
5775 5776 server = None
5776 5777 remotefolder = None
5777 5778 username = None
5778 5779 password = None
5779 5780 ftp_wei = None
5780 5781 exp_code = None
5781 5782 sub_exp_code = None
5782 5783 plot_pos = None
5783 5784 create = False
5784 5785 withoutconfig = False
5785 5786 createforView = False
5786 5787 localfolder = None
5787 5788 extension = None
5788 5789 period = None
5789 5790 protocol = None
5790 5791
5791 5792 def __init__(self):
5792 5793
5793 5794 self.create = False
5794 5795 self.server = None
5795 5796 self.remotefolder = None
5796 5797 self.username = None
5797 5798 self.password = None
5798 5799 self.ftp_wei = None
5799 5800 self.exp_code = None
5800 5801 self.sub_exp_code = None
5801 5802 self.plot_pos = None
5802 5803 # self.create = False
5803 5804 self.localfolder = None
5804 5805 self.extension = None
5805 5806 self.period = None
5806 5807 self.protocol = None
5807 5808
5808 5809 def setwithoutconfiguration(self):
5809 5810
5810 5811 self.create = False
5811 5812 self.server = "jro-app.igp.gob.pe"
5812 5813 self.remotefolder = "/home/wmaster/graficos"
5813 5814 self.username = "wmaster"
5814 5815 self.password = "mst2010vhf"
5815 5816 self.withoutconfig = True
5816 5817 self.localfolder = './'
5817 5818 self.extension = '.png'
5818 5819 self.period = 60
5819 5820 self.protocol = 'ftp'
5820 5821 self.createforView = True
5821 5822
5822 5823 if not self.ftp_wei:
5823 5824 self.ftp_wei = 0
5824 5825
5825 5826 if not self.exp_code:
5826 5827 self.exp_code = 0
5827 5828
5828 5829 if not self.sub_exp_code:
5829 5830 self.sub_exp_code = 0
5830 5831
5831 5832 if not self.plot_pos:
5832 5833 self.plot_pos = 0
5833 5834
5834 5835 def save(self, server, remotefolder, username, password, ftp_wei=0, exp_code=0, sub_exp_code=0, plot_pos=0, localfolder='./', extension='.png', period=60, protocol='ftp'):
5835 5836
5836 5837 self.server = server
5837 5838 self.remotefolder = remotefolder
5838 5839 self.username = username
5839 5840 self.password = password
5840 5841 self.ftp_wei = ftp_wei
5841 5842 self.exp_code = exp_code
5842 5843 self.sub_exp_code = sub_exp_code
5843 5844 self.plot_pos = plot_pos
5844 5845 self.create = True
5845 5846 self.withoutconfig = False
5846 5847 self.createforView = True
5847 5848 self.localfolder = localfolder
5848 5849 self.extension = extension
5849 5850 self.period = period
5850 5851 self.protocol = protocol
5851 5852
5852 5853 def recover(self):
5853 5854
5854 5855 return self.server, self.remotefolder, self.username, self.password, self.ftp_wei, self.exp_code, self.sub_exp_code, self.plot_pos, self.extension, self.period, self.protocol
5855 5856
5856 5857 class ShowMeConsole(QtCore.QObject):
5857 5858
5858 5859 textWritten = QtCore.pyqtSignal(str)
5859 5860
5860 5861 def write(self, text):
5861 5862
5862 5863 if text[-1] == "\n":
5863 5864 text = text[:-1]
5864 5865
5865 5866 self.textWritten.emit(str(text))
@@ -1,1596 +1,1596
1 1 '''
2 2 Created on Jul 2, 2014
3 3
4 4 @author: roj-idl71
5 5 '''
6 6 import os
7 7 import sys
8 8 import glob
9 9 import time
10 10 import numpy
11 11 import fnmatch
12 12 import time, datetime
13 13 #import h5py
14 14 import traceback
15 15
16 16 try:
17 17 from gevent import sleep
18 18 except:
19 19 from time import sleep
20 20
21 21 from schainpy.model.data.jroheaderIO import PROCFLAG, BasicHeader, SystemHeader, RadarControllerHeader, ProcessingHeader
22 22 from schainpy.model.data.jroheaderIO import get_dtype_index, get_numpy_dtype, get_procflag_dtype, get_dtype_width
23 23
24 24 LOCALTIME = True
25 25
26 26 def isNumber(cad):
27 27 """
28 28 Chequea si el conjunto de caracteres que componen un string puede ser convertidos a un numero.
29 29
30 30 Excepciones:
31 31 Si un determinado string no puede ser convertido a numero
32 32 Input:
33 33 str, string al cual se le analiza para determinar si convertible a un numero o no
34 34
35 35 Return:
36 36 True : si el string es uno numerico
37 37 False : no es un string numerico
38 38 """
39 39 try:
40 40 float( cad )
41 41 return True
42 42 except:
43 43 return False
44 44
45 45 def isFileInEpoch(filename, startUTSeconds, endUTSeconds):
46 46 """
47 47 Esta funcion determina si un archivo de datos se encuentra o no dentro del rango de fecha especificado.
48 48
49 49 Inputs:
50 50 filename : nombre completo del archivo de datos en formato Jicamarca (.r)
51 51
52 52 startUTSeconds : fecha inicial del rango seleccionado. La fecha esta dada en
53 53 segundos contados desde 01/01/1970.
54 54 endUTSeconds : fecha final del rango seleccionado. La fecha esta dada en
55 55 segundos contados desde 01/01/1970.
56 56
57 57 Return:
58 58 Boolean : Retorna True si el archivo de datos contiene datos en el rango de
59 59 fecha especificado, de lo contrario retorna False.
60 60
61 61 Excepciones:
62 62 Si el archivo no existe o no puede ser abierto
63 63 Si la cabecera no puede ser leida.
64 64
65 65 """
66 66 basicHeaderObj = BasicHeader(LOCALTIME)
67 67
68 68 try:
69 69 fp = open(filename,'rb')
70 70 except IOError:
71 71 traceback.print_exc()
72 72 raise IOError, "The file %s can't be opened" %(filename)
73 73
74 74 sts = basicHeaderObj.read(fp)
75 75 fp.close()
76 76
77 77 if not(sts):
78 78 print "Skipping the file %s because it has not a valid header" %(filename)
79 79 return 0
80 80
81 81 if not ((startUTSeconds <= basicHeaderObj.utc) and (endUTSeconds > basicHeaderObj.utc)):
82 82 return 0
83 83
84 84 return 1
85 85
86 86 def isFileInTimeRange(filename, startDate, endDate, startTime, endTime):
87 87 """
88 88 Retorna 1 si el archivo de datos se encuentra dentro del rango de horas especificado.
89 89
90 90 Inputs:
91 91 filename : nombre completo del archivo de datos en formato Jicamarca (.r)
92 92
93 93 startDate : fecha inicial del rango seleccionado en formato datetime.date
94 94
95 95 endDate : fecha final del rango seleccionado en formato datetime.date
96 96
97 97 startTime : tiempo inicial del rango seleccionado en formato datetime.time
98 98
99 99 endTime : tiempo final del rango seleccionado en formato datetime.time
100 100
101 101 Return:
102 102 Boolean : Retorna True si el archivo de datos contiene datos en el rango de
103 103 fecha especificado, de lo contrario retorna False.
104 104
105 105 Excepciones:
106 106 Si el archivo no existe o no puede ser abierto
107 107 Si la cabecera no puede ser leida.
108 108
109 109 """
110 110
111 111
112 112 try:
113 113 fp = open(filename,'rb')
114 114 except IOError:
115 115 traceback.print_exc()
116 116 raise IOError, "The file %s can't be opened" %(filename)
117 117
118 118 basicHeaderObj = BasicHeader(LOCALTIME)
119 119 sts = basicHeaderObj.read(fp)
120 120 fp.close()
121 121
122 122 thisDatetime = basicHeaderObj.datatime
123 123 thisDate = thisDatetime.date()
124 124 thisTime = thisDatetime.time()
125 125
126 126 if not(sts):
127 127 print "Skipping the file %s because it has not a valid header" %(filename)
128 128 return None
129 129
130 130 #General case
131 131 # o>>>>>>>>>>>>>><<<<<<<<<<<<<<o
132 132 #-----------o----------------------------o-----------
133 133 # startTime endTime
134 134
135 135 if endTime >= startTime:
136 136 if (thisTime < startTime) or (thisTime > endTime):
137 137 return None
138 138
139 139 return thisDatetime
140 140
141 141 #If endTime < startTime then endTime belongs to the next day
142 142
143 143
144 144 #<<<<<<<<<<<o o>>>>>>>>>>>
145 145 #-----------o----------------------------o-----------
146 146 # endTime startTime
147 147
148 148 if (thisDate == startDate) and (thisTime < startTime):
149 149 return None
150 150
151 151 if (thisDate == endDate) and (thisTime > endTime):
152 152 return None
153 153
154 154 if (thisTime < startTime) and (thisTime > endTime):
155 155 return None
156 156
157 157 return thisDatetime
158 158
159 159 def isFolderInDateRange(folder, startDate=None, endDate=None):
160 160 """
161 161 Retorna 1 si el archivo de datos se encuentra dentro del rango de horas especificado.
162 162
163 163 Inputs:
164 164 folder : nombre completo del directorio.
165 165 Su formato deberia ser "/path_root/?YYYYDDD"
166 166
167 167 siendo:
168 168 YYYY : Anio (ejemplo 2015)
169 169 DDD : Dia del anio (ejemplo 305)
170 170
171 171 startDate : fecha inicial del rango seleccionado en formato datetime.date
172 172
173 173 endDate : fecha final del rango seleccionado en formato datetime.date
174 174
175 175 Return:
176 176 Boolean : Retorna True si el archivo de datos contiene datos en el rango de
177 177 fecha especificado, de lo contrario retorna False.
178 178 Excepciones:
179 179 Si el directorio no tiene el formato adecuado
180 180 """
181 181
182 182 basename = os.path.basename(folder)
183 183
184 184 if not isRadarFolder(basename):
185 185 raise IOError, "The folder %s has not the rigth format" %folder
186 186
187 187 if startDate and endDate:
188 188 thisDate = getDateFromRadarFolder(basename)
189 189
190 190 if thisDate < startDate:
191 191 return 0
192 192
193 193 if thisDate > endDate:
194 194 return 0
195 195
196 196 return 1
197 197
198 198 def isFileInDateRange(filename, startDate=None, endDate=None):
199 199 """
200 200 Retorna 1 si el archivo de datos se encuentra dentro del rango de horas especificado.
201 201
202 202 Inputs:
203 203 filename : nombre completo del archivo de datos en formato Jicamarca (.r)
204 204
205 205 Su formato deberia ser "?YYYYDDDsss"
206 206
207 207 siendo:
208 208 YYYY : Anio (ejemplo 2015)
209 209 DDD : Dia del anio (ejemplo 305)
210 210 sss : set
211 211
212 212 startDate : fecha inicial del rango seleccionado en formato datetime.date
213 213
214 214 endDate : fecha final del rango seleccionado en formato datetime.date
215 215
216 216 Return:
217 217 Boolean : Retorna True si el archivo de datos contiene datos en el rango de
218 218 fecha especificado, de lo contrario retorna False.
219 219 Excepciones:
220 220 Si el archivo no tiene el formato adecuado
221 221 """
222 222
223 223 basename = os.path.basename(filename)
224 224
225 225 if not isRadarFile(basename):
226 226 raise IOError, "The filename %s has not the rigth format" %filename
227 227
228 228 if startDate and endDate:
229 229 thisDate = getDateFromRadarFile(basename)
230 230
231 231 if thisDate < startDate:
232 232 return 0
233 233
234 234 if thisDate > endDate:
235 235 return 0
236 236
237 237 return 1
238 238
239 239 def getFileFromSet(path, ext, set):
240 240 validFilelist = []
241 241 fileList = os.listdir(path)
242 242
243 243 # 0 1234 567 89A BCDE
244 244 # H YYYY DDD SSS .ext
245 245
246 246 for thisFile in fileList:
247 247 try:
248 248 year = int(thisFile[1:5])
249 249 doy = int(thisFile[5:8])
250 250 except:
251 251 continue
252 252
253 253 if (os.path.splitext(thisFile)[-1].lower() != ext.lower()):
254 254 continue
255 255
256 256 validFilelist.append(thisFile)
257 257
258 258 myfile = fnmatch.filter(validFilelist,'*%4.4d%3.3d%3.3d*'%(year,doy,set))
259 259
260 260 if len(myfile)!= 0:
261 261 return myfile[0]
262 262 else:
263 263 filename = '*%4.4d%3.3d%3.3d%s'%(year,doy,set,ext.lower())
264 264 print 'the filename %s does not exist'%filename
265 265 print '...going to the last file: '
266 266
267 267 if validFilelist:
268 268 validFilelist = sorted( validFilelist, key=str.lower )
269 269 return validFilelist[-1]
270 270
271 271 return None
272 272
273 273 def getlastFileFromPath(path, ext):
274 274 """
275 275 Depura el fileList dejando solo los que cumplan el formato de "PYYYYDDDSSS.ext"
276 276 al final de la depuracion devuelve el ultimo file de la lista que quedo.
277 277
278 278 Input:
279 279 fileList : lista conteniendo todos los files (sin path) que componen una determinada carpeta
280 280 ext : extension de los files contenidos en una carpeta
281 281
282 282 Return:
283 283 El ultimo file de una determinada carpeta, no se considera el path.
284 284 """
285 285 validFilelist = []
286 286 fileList = os.listdir(path)
287 287
288 288 # 0 1234 567 89A BCDE
289 289 # H YYYY DDD SSS .ext
290 290
291 291 for thisFile in fileList:
292 292
293 293 year = thisFile[1:5]
294 294 if not isNumber(year):
295 295 continue
296 296
297 297 doy = thisFile[5:8]
298 298 if not isNumber(doy):
299 299 continue
300 300
301 301 year = int(year)
302 302 doy = int(doy)
303 303
304 304 if (os.path.splitext(thisFile)[-1].lower() != ext.lower()):
305 305 continue
306 306
307 307 validFilelist.append(thisFile)
308 308
309 309 if validFilelist:
310 310 validFilelist = sorted( validFilelist, key=str.lower )
311 311 return validFilelist[-1]
312 312
313 313 return None
314 314
315 315 def checkForRealPath(path, foldercounter, year, doy, set, ext):
316 316 """
317 317 Por ser Linux Case Sensitive entonces checkForRealPath encuentra el nombre correcto de un path,
318 318 Prueba por varias combinaciones de nombres entre mayusculas y minusculas para determinar
319 319 el path exacto de un determinado file.
320 320
321 321 Example :
322 322 nombre correcto del file es .../.../D2009307/P2009307367.ext
323 323
324 324 Entonces la funcion prueba con las siguientes combinaciones
325 325 .../.../y2009307367.ext
326 326 .../.../Y2009307367.ext
327 327 .../.../x2009307/y2009307367.ext
328 328 .../.../x2009307/Y2009307367.ext
329 329 .../.../X2009307/y2009307367.ext
330 330 .../.../X2009307/Y2009307367.ext
331 331 siendo para este caso, la ultima combinacion de letras, identica al file buscado
332 332
333 333 Return:
334 334 Si encuentra la cobinacion adecuada devuelve el path completo y el nombre del file
335 335 caso contrario devuelve None como path y el la ultima combinacion de nombre en mayusculas
336 336 para el filename
337 337 """
338 338 fullfilename = None
339 339 find_flag = False
340 340 filename = None
341 341
342 342 prefixDirList = [None,'d','D']
343 343 if ext.lower() == ".r": #voltage
344 344 prefixFileList = ['d','D']
345 345 elif ext.lower() == ".pdata": #spectra
346 346 prefixFileList = ['p','P']
347 347 else:
348 348 return None, filename
349 349
350 350 #barrido por las combinaciones posibles
351 351 for prefixDir in prefixDirList:
352 352 thispath = path
353 353 if prefixDir != None:
354 354 #formo el nombre del directorio xYYYYDDD (x=d o x=D)
355 355 if foldercounter == 0:
356 356 thispath = os.path.join(path, "%s%04d%03d" % ( prefixDir, year, doy ))
357 357 else:
358 358 thispath = os.path.join(path, "%s%04d%03d_%02d" % ( prefixDir, year, doy , foldercounter))
359 359 for prefixFile in prefixFileList: #barrido por las dos combinaciones posibles de "D"
360 360 filename = "%s%04d%03d%03d%s" % ( prefixFile, year, doy, set, ext ) #formo el nombre del file xYYYYDDDSSS.ext
361 361 fullfilename = os.path.join( thispath, filename ) #formo el path completo
362 362
363 363 if os.path.exists( fullfilename ): #verifico que exista
364 364 find_flag = True
365 365 break
366 366 if find_flag:
367 367 break
368 368
369 369 if not(find_flag):
370 370 return None, filename
371 371
372 372 return fullfilename, filename
373 373
374 374 def isRadarFolder(folder):
375 375 try:
376 376 year = int(folder[1:5])
377 377 doy = int(folder[5:8])
378 378 except:
379 379 return 0
380 380
381 381 return 1
382 382
383 383 def isRadarFile(file):
384 384 try:
385 385 year = int(file[1:5])
386 386 doy = int(file[5:8])
387 387 set = int(file[8:11])
388 388 except:
389 389 return 0
390 390
391 391 return 1
392 392
393 393 def getDateFromRadarFile(file):
394 394 try:
395 395 year = int(file[1:5])
396 396 doy = int(file[5:8])
397 397 set = int(file[8:11])
398 398 except:
399 399 return None
400 400
401 401 thisDate = datetime.date(year, 1, 1) + datetime.timedelta(doy-1)
402 402 return thisDate
403 403
404 404 def getDateFromRadarFolder(folder):
405 405 try:
406 406 year = int(folder[1:5])
407 407 doy = int(folder[5:8])
408 408 except:
409 409 return None
410 410
411 411 thisDate = datetime.date(year, 1, 1) + datetime.timedelta(doy-1)
412 412 return thisDate
413 413
414 414 class JRODataIO:
415 415
416 416 c = 3E8
417 417
418 418 isConfig = False
419 419
420 420 basicHeaderObj = None
421 421
422 422 systemHeaderObj = None
423 423
424 424 radarControllerHeaderObj = None
425 425
426 426 processingHeaderObj = None
427 427
428 428 online = 0
429 429
430 430 dtype = None
431 431
432 432 pathList = []
433 433
434 434 filenameList = []
435 435
436 436 filename = None
437 437
438 438 ext = None
439 439
440 440 flagIsNewFile = 1
441 441
442 442 flagDiscontinuousBlock = 0
443 443
444 444 flagIsNewBlock = 0
445 445
446 446 fp = None
447 447
448 448 firstHeaderSize = 0
449 449
450 450 basicHeaderSize = 24
451 451
452 452 versionFile = 1103
453 453
454 454 fileSize = None
455 455
456 456 # ippSeconds = None
457 457
458 458 fileSizeByHeader = None
459 459
460 460 fileIndex = None
461 461
462 462 profileIndex = None
463 463
464 464 blockIndex = None
465 465
466 466 nTotalBlocks = None
467 467
468 468 maxTimeStep = 30
469 469
470 470 lastUTTime = None
471 471
472 472 datablock = None
473 473
474 474 dataOut = None
475 475
476 476 blocksize = None
477 477
478 478 getByBlock = False
479 479
480 480 def __init__(self):
481 481
482 482 raise ValueError, "Not implemented"
483 483
484 484 def run(self):
485 485
486 486 raise ValueError, "Not implemented"
487 487
488 488 def getDtypeWidth(self):
489 489
490 490 dtype_index = get_dtype_index(self.dtype)
491 491 dtype_width = get_dtype_width(dtype_index)
492 492
493 493 return dtype_width
494 494
495 495 class JRODataReader(JRODataIO):
496 496
497 497 nReadBlocks = 0
498 498
499 499 delay = 10 #number of seconds waiting a new file
500 500
501 501 nTries = 3 #quantity tries
502 502
503 503 nFiles = 3 #number of files for searching
504 504
505 505 path = None
506 506
507 507 foldercounter = 0
508 508
509 509 flagNoMoreFiles = 0
510 510
511 511 datetimeList = []
512 512
513 513 __isFirstTimeOnline = 1
514 514
515 515 __printInfo = True
516 516
517 517 profileIndex = None
518 518
519 519 nTxs = 1
520 520
521 521 txIndex = None
522 522
523 523 def __init__(self):
524 524
525 525 """
526 526
527 527 """
528 528
529 529 # raise NotImplementedError, "This method has not been implemented"
530 530
531 531
532 532 def createObjByDefault(self):
533 533 """
534 534
535 535 """
536 536 raise NotImplementedError, "This method has not been implemented"
537 537
538 538 def getBlockDimension(self):
539 539
540 540 raise NotImplementedError, "No implemented"
541 541
542 542 def __searchFilesOffLine(self,
543 543 path,
544 544 startDate=None,
545 545 endDate=None,
546 546 startTime=datetime.time(0,0,0),
547 547 endTime=datetime.time(23,59,59),
548 548 set=None,
549 549 expLabel='',
550 550 ext='.r',
551 551 walk=True):
552 552
553 553 self.filenameList = []
554 554 self.datetimeList = []
555 555
556 556 pathList = []
557 557
558 558 dateList, pathList = self.findDatafiles(path, startDate, endDate, expLabel, ext, walk, include_path=True)
559 559
560 560 if dateList == []:
561 561 print "[Reading] No *%s files in %s from %s to %s)"%(ext, path,
562 562 datetime.datetime.combine(startDate,startTime).ctime(),
563 563 datetime.datetime.combine(endDate,endTime).ctime())
564 564
565 565 return None, None
566 566
567 567 if len(dateList) > 1:
568 568 print "[Reading] %d days were found in date range: %s - %s" %(len(dateList), startDate, endDate)
569 569 else:
570 570 print "[Reading] data was found for the date %s" %(dateList[0])
571 571
572 572 filenameList = []
573 573 datetimeList = []
574 574
575 575 for thisPath in pathList:
576 576 # thisPath = pathList[pathDict[file]]
577 577
578 578 fileList = glob.glob1(thisPath, "*%s" %ext)
579 579 fileList.sort()
580 580
581 581 for file in fileList:
582 582
583 583 filename = os.path.join(thisPath,file)
584 584
585 585 if not isFileInDateRange(filename, startDate, endDate):
586 586 continue
587 587
588 588 thisDatetime = isFileInTimeRange(filename, startDate, endDate, startTime, endTime)
589 589
590 590 if not(thisDatetime):
591 591 continue
592 592
593 593 filenameList.append(filename)
594 594 datetimeList.append(thisDatetime)
595 595
596 596 if not(filenameList):
597 print "[Reading] Any file was found int time range %s - %s" %(startTime.ctime(), endTime.ctime())
597 print "[Reading] Any file was found int time range %s - %s" %(datetime.datetime.combine(startDate,startTime).ctime(), datetime.datetime.combine(endDate,endTime).ctime())
598 598 return None, None
599 599
600 600 print "[Reading] %d file(s) was(were) found in time range: %s - %s" %(len(filenameList), startTime, endTime)
601 601 print
602 602
603 603 for i in range(len(filenameList)):
604 604 print "[Reading] %s -> [%s]" %(filenameList[i], datetimeList[i].ctime())
605 605
606 606 self.filenameList = filenameList
607 607 self.datetimeList = datetimeList
608 608
609 609 return pathList, filenameList
610 610
611 611 def __searchFilesOnLine(self, path, expLabel = "", ext = None, walk=True, set=None):
612 612
613 613 """
614 614 Busca el ultimo archivo de la ultima carpeta (determinada o no por startDateTime) y
615 615 devuelve el archivo encontrado ademas de otros datos.
616 616
617 617 Input:
618 618 path : carpeta donde estan contenidos los files que contiene data
619 619
620 620 expLabel : Nombre del subexperimento (subfolder)
621 621
622 622 ext : extension de los files
623 623
624 624 walk : Si es habilitado no realiza busquedas dentro de los ubdirectorios (doypath)
625 625
626 626 Return:
627 627 directory : eL directorio donde esta el file encontrado
628 628 filename : el ultimo file de una determinada carpeta
629 629 year : el anho
630 630 doy : el numero de dia del anho
631 631 set : el set del archivo
632 632
633 633
634 634 """
635 635 dirList = []
636 636
637 637 if not walk:
638 638 fullpath = path
639 639 foldercounter = 0
640 640 else:
641 641 #Filtra solo los directorios
642 642 for thisPath in os.listdir(path):
643 643 if not os.path.isdir(os.path.join(path,thisPath)):
644 644 continue
645 645 if not isRadarFolder(thisPath):
646 646 continue
647 647
648 648 dirList.append(thisPath)
649 649
650 650 if not(dirList):
651 651 return None, None, None, None, None, None
652 652
653 653 dirList = sorted( dirList, key=str.lower )
654 654
655 655 doypath = dirList[-1]
656 656 foldercounter = int(doypath.split('_')[1]) if len(doypath.split('_'))>1 else 0
657 657 fullpath = os.path.join(path, doypath, expLabel)
658 658
659 659
660 660 print "[Reading] %s folder was found: " %(fullpath )
661 661
662 662 if set == None:
663 663 filename = getlastFileFromPath(fullpath, ext)
664 664 else:
665 665 filename = getFileFromSet(fullpath, ext, set)
666 666
667 667 if not(filename):
668 668 return None, None, None, None, None, None
669 669
670 670 print "[Reading] %s file was found" %(filename)
671 671
672 672 if not(self.__verifyFile(os.path.join(fullpath, filename))):
673 673 return None, None, None, None, None, None
674 674
675 675 year = int( filename[1:5] )
676 676 doy = int( filename[5:8] )
677 677 set = int( filename[8:11] )
678 678
679 679 return fullpath, foldercounter, filename, year, doy, set
680 680
681 681 def __setNextFileOffline(self):
682 682
683 683 idFile = self.fileIndex
684 684
685 685 while (True):
686 686 idFile += 1
687 687 if not(idFile < len(self.filenameList)):
688 688 self.flagNoMoreFiles = 1
689 689 # print "[Reading] No more Files"
690 690 return 0
691 691
692 692 filename = self.filenameList[idFile]
693 693
694 694 if not(self.__verifyFile(filename)):
695 695 continue
696 696
697 697 fileSize = os.path.getsize(filename)
698 698 fp = open(filename,'rb')
699 699 break
700 700
701 701 self.flagIsNewFile = 1
702 702 self.fileIndex = idFile
703 703 self.filename = filename
704 704 self.fileSize = fileSize
705 705 self.fp = fp
706 706
707 707 # print "[Reading] Setting the file: %s"%self.filename
708 708
709 709 return 1
710 710
711 711 def __setNextFileOnline(self):
712 712 """
713 713 Busca el siguiente file que tenga suficiente data para ser leida, dentro de un folder especifico, si
714 714 no encuentra un file valido espera un tiempo determinado y luego busca en los posibles n files
715 715 siguientes.
716 716
717 717 Affected:
718 718 self.flagIsNewFile
719 719 self.filename
720 720 self.fileSize
721 721 self.fp
722 722 self.set
723 723 self.flagNoMoreFiles
724 724
725 725 Return:
726 726 0 : si luego de una busqueda del siguiente file valido este no pudo ser encontrado
727 727 1 : si el file fue abierto con exito y esta listo a ser leido
728 728
729 729 Excepciones:
730 730 Si un determinado file no puede ser abierto
731 731 """
732 732 nFiles = 0
733 733 fileOk_flag = False
734 734 firstTime_flag = True
735 735
736 736 self.set += 1
737 737
738 738 if self.set > 999:
739 739 self.set = 0
740 740 self.foldercounter += 1
741 741
742 742 #busca el 1er file disponible
743 743 fullfilename, filename = checkForRealPath( self.path, self.foldercounter, self.year, self.doy, self.set, self.ext )
744 744 if fullfilename:
745 745 if self.__verifyFile(fullfilename, False):
746 746 fileOk_flag = True
747 747
748 748 #si no encuentra un file entonces espera y vuelve a buscar
749 749 if not(fileOk_flag):
750 750 for nFiles in range(self.nFiles+1): #busco en los siguientes self.nFiles+1 files posibles
751 751
752 752 if firstTime_flag: #si es la 1era vez entonces hace el for self.nTries veces
753 753 tries = self.nTries
754 754 else:
755 755 tries = 1 #si no es la 1era vez entonces solo lo hace una vez
756 756
757 757 for nTries in range( tries ):
758 758 if firstTime_flag:
759 759 print "\t[Reading] Waiting %0.2f sec for the file \"%s\" , try %03d ..." % ( self.delay, filename, nTries+1 )
760 760 sleep( self.delay )
761 761 else:
762 762 print "\t[Reading] Searching the next \"%s%04d%03d%03d%s\" file ..." % (self.optchar, self.year, self.doy, self.set, self.ext)
763 763
764 764 fullfilename, filename = checkForRealPath( self.path, self.foldercounter, self.year, self.doy, self.set, self.ext )
765 765 if fullfilename:
766 766 if self.__verifyFile(fullfilename):
767 767 fileOk_flag = True
768 768 break
769 769
770 770 if fileOk_flag:
771 771 break
772 772
773 773 firstTime_flag = False
774 774
775 775 print "\t[Reading] Skipping the file \"%s\" due to this file doesn't exist" % filename
776 776 self.set += 1
777 777
778 778 if nFiles == (self.nFiles-1): #si no encuentro el file buscado cambio de carpeta y busco en la siguiente carpeta
779 779 self.set = 0
780 780 self.doy += 1
781 781 self.foldercounter = 0
782 782
783 783 if fileOk_flag:
784 784 self.fileSize = os.path.getsize( fullfilename )
785 785 self.filename = fullfilename
786 786 self.flagIsNewFile = 1
787 787 if self.fp != None: self.fp.close()
788 788 self.fp = open(fullfilename, 'rb')
789 789 self.flagNoMoreFiles = 0
790 790 # print '[Reading] Setting the file: %s' % fullfilename
791 791 else:
792 792 self.fileSize = 0
793 793 self.filename = None
794 794 self.flagIsNewFile = 0
795 795 self.fp = None
796 796 self.flagNoMoreFiles = 1
797 797 # print '[Reading] No more files to read'
798 798
799 799 return fileOk_flag
800 800
801 801 def setNextFile(self):
802 802 if self.fp != None:
803 803 self.fp.close()
804 804
805 805 if self.online:
806 806 newFile = self.__setNextFileOnline()
807 807 else:
808 808 newFile = self.__setNextFileOffline()
809 809
810 810 if not(newFile):
811 811 print '[Reading] No more files to read'
812 812 return 0
813 813
814 814 print '[Reading] Setting the file: %s' % self.filename
815 815
816 816 self.__readFirstHeader()
817 817 self.nReadBlocks = 0
818 818 return 1
819 819
820 820 def __waitNewBlock(self):
821 821 """
822 822 Return 1 si se encontro un nuevo bloque de datos, 0 de otra forma.
823 823
824 824 Si el modo de lectura es OffLine siempre retorn 0
825 825 """
826 826 if not self.online:
827 827 return 0
828 828
829 829 if (self.nReadBlocks >= self.processingHeaderObj.dataBlocksPerFile):
830 830 return 0
831 831
832 832 currentPointer = self.fp.tell()
833 833
834 834 neededSize = self.processingHeaderObj.blockSize + self.basicHeaderSize
835 835
836 836 for nTries in range( self.nTries ):
837 837
838 838 self.fp.close()
839 839 self.fp = open( self.filename, 'rb' )
840 840 self.fp.seek( currentPointer )
841 841
842 842 self.fileSize = os.path.getsize( self.filename )
843 843 currentSize = self.fileSize - currentPointer
844 844
845 845 if ( currentSize >= neededSize ):
846 846 self.basicHeaderObj.read(self.fp)
847 847 return 1
848 848
849 849 if self.fileSize == self.fileSizeByHeader:
850 850 # self.flagEoF = True
851 851 return 0
852 852
853 853 print "[Reading] Waiting %0.2f seconds for the next block, try %03d ..." % (self.delay, nTries+1)
854 854 sleep( self.delay )
855 855
856 856
857 857 return 0
858 858
859 859 def waitDataBlock(self,pointer_location):
860 860
861 861 currentPointer = pointer_location
862 862
863 863 neededSize = self.processingHeaderObj.blockSize #+ self.basicHeaderSize
864 864
865 865 for nTries in range( self.nTries ):
866 866 self.fp.close()
867 867 self.fp = open( self.filename, 'rb' )
868 868 self.fp.seek( currentPointer )
869 869
870 870 self.fileSize = os.path.getsize( self.filename )
871 871 currentSize = self.fileSize - currentPointer
872 872
873 873 if ( currentSize >= neededSize ):
874 874 return 1
875 875
876 876 print "[Reading] Waiting %0.2f seconds for the next block, try %03d ..." % (self.delay, nTries+1)
877 877 sleep( self.delay )
878 878
879 879 return 0
880 880
881 881 def __jumpToLastBlock(self):
882 882
883 883 if not(self.__isFirstTimeOnline):
884 884 return
885 885
886 886 csize = self.fileSize - self.fp.tell()
887 887 blocksize = self.processingHeaderObj.blockSize
888 888
889 889 #salta el primer bloque de datos
890 890 if csize > self.processingHeaderObj.blockSize:
891 891 self.fp.seek(self.fp.tell() + blocksize)
892 892 else:
893 893 return
894 894
895 895 csize = self.fileSize - self.fp.tell()
896 896 neededsize = self.processingHeaderObj.blockSize + self.basicHeaderSize
897 897 while True:
898 898
899 899 if self.fp.tell()<self.fileSize:
900 900 self.fp.seek(self.fp.tell() + neededsize)
901 901 else:
902 902 self.fp.seek(self.fp.tell() - neededsize)
903 903 break
904 904
905 905 # csize = self.fileSize - self.fp.tell()
906 906 # neededsize = self.processingHeaderObj.blockSize + self.basicHeaderSize
907 907 # factor = int(csize/neededsize)
908 908 # if factor > 0:
909 909 # self.fp.seek(self.fp.tell() + factor*neededsize)
910 910
911 911 self.flagIsNewFile = 0
912 912 self.__isFirstTimeOnline = 0
913 913
914 914 def __setNewBlock(self):
915 915
916 916 if self.fp == None:
917 917 return 0
918 918
919 919 if self.online:
920 920 self.__jumpToLastBlock()
921 921
922 922 if self.flagIsNewFile:
923 923 return 1
924 924
925 925 self.lastUTTime = self.basicHeaderObj.utc
926 926 currentSize = self.fileSize - self.fp.tell()
927 927 neededSize = self.processingHeaderObj.blockSize + self.basicHeaderSize
928 928
929 929 if (currentSize >= neededSize):
930 930 self.basicHeaderObj.read(self.fp)
931 931 return 1
932 932
933 933 if self.__waitNewBlock():
934 934 return 1
935 935
936 936 if not(self.setNextFile()):
937 937 return 0
938 938
939 939 deltaTime = self.basicHeaderObj.utc - self.lastUTTime #
940 940
941 941 self.flagDiscontinuousBlock = 0
942 942
943 943 if deltaTime > self.maxTimeStep:
944 944 self.flagDiscontinuousBlock = 1
945 945
946 946 return 1
947 947
948 948 def readNextBlock(self):
949 949
950 950 if not(self.__setNewBlock()):
951 951 return 0
952 952
953 953 if not(self.readBlock()):
954 954 return 0
955 955
956 956 self.getBasicHeader()
957 957
958 958 print "[Reading] Block No. %d/%d -> %s" %(self.nReadBlocks,
959 959 self.processingHeaderObj.dataBlocksPerFile,
960 960 self.dataOut.datatime.ctime())
961 961 return 1
962 962
963 963 def __readFirstHeader(self):
964 964
965 965 self.basicHeaderObj.read(self.fp)
966 966 self.systemHeaderObj.read(self.fp)
967 967 self.radarControllerHeaderObj.read(self.fp)
968 968 self.processingHeaderObj.read(self.fp)
969 969
970 970 self.firstHeaderSize = self.basicHeaderObj.size
971 971
972 972 datatype = int(numpy.log2((self.processingHeaderObj.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR))
973 973 if datatype == 0:
974 974 datatype_str = numpy.dtype([('real','<i1'),('imag','<i1')])
975 975 elif datatype == 1:
976 976 datatype_str = numpy.dtype([('real','<i2'),('imag','<i2')])
977 977 elif datatype == 2:
978 978 datatype_str = numpy.dtype([('real','<i4'),('imag','<i4')])
979 979 elif datatype == 3:
980 980 datatype_str = numpy.dtype([('real','<i8'),('imag','<i8')])
981 981 elif datatype == 4:
982 982 datatype_str = numpy.dtype([('real','<f4'),('imag','<f4')])
983 983 elif datatype == 5:
984 984 datatype_str = numpy.dtype([('real','<f8'),('imag','<f8')])
985 985 else:
986 986 raise ValueError, 'Data type was not defined'
987 987
988 988 self.dtype = datatype_str
989 989 #self.ippSeconds = 2 * 1000 * self.radarControllerHeaderObj.ipp / self.c
990 990 self.fileSizeByHeader = self.processingHeaderObj.dataBlocksPerFile * self.processingHeaderObj.blockSize + self.firstHeaderSize + self.basicHeaderSize*(self.processingHeaderObj.dataBlocksPerFile - 1)
991 991 # self.dataOut.channelList = numpy.arange(self.systemHeaderObj.numChannels)
992 992 # self.dataOut.channelIndexList = numpy.arange(self.systemHeaderObj.numChannels)
993 993 self.getBlockDimension()
994 994
995 995 def __verifyFile(self, filename, msgFlag=True):
996 996 msg = None
997 997 try:
998 998 fp = open(filename, 'rb')
999 999 currentPosition = fp.tell()
1000 1000 except IOError:
1001 1001 traceback.print_exc()
1002 1002 if msgFlag:
1003 1003 print "[Reading] The file %s can't be opened" % (filename)
1004 1004 return False
1005 1005
1006 1006 neededSize = self.processingHeaderObj.blockSize + self.firstHeaderSize
1007 1007
1008 1008 if neededSize == 0:
1009 1009 basicHeaderObj = BasicHeader(LOCALTIME)
1010 1010 systemHeaderObj = SystemHeader()
1011 1011 radarControllerHeaderObj = RadarControllerHeader()
1012 1012 processingHeaderObj = ProcessingHeader()
1013 1013
1014 1014 try:
1015 1015 if not( basicHeaderObj.read(fp) ): raise IOError
1016 1016 if not( systemHeaderObj.read(fp) ): raise IOError
1017 1017 if not( radarControllerHeaderObj.read(fp) ): raise IOError
1018 1018 if not( processingHeaderObj.read(fp) ): raise IOError
1019 1019 # data_type = int(numpy.log2((processingHeaderObj.processFlags & PROCFLAG.DATATYPE_MASK))-numpy.log2(PROCFLAG.DATATYPE_CHAR))
1020 1020
1021 1021 neededSize = processingHeaderObj.blockSize + basicHeaderObj.size
1022 1022
1023 1023 except IOError:
1024 1024 traceback.print_exc()
1025 1025 sys.exit(0)
1026 1026
1027 1027 if msgFlag:
1028 1028 print "[Reading] The file %s is empty or it hasn't enough data" % filename
1029 1029
1030 1030 fp.close()
1031 1031 return False
1032 1032 else:
1033 1033 msg = "[Reading] Skipping the file %s due to it hasn't enough data" %filename
1034 1034
1035 1035 fp.close()
1036 1036 fileSize = os.path.getsize(filename)
1037 1037 currentSize = fileSize - currentPosition
1038 1038 if currentSize < neededSize:
1039 1039 if msgFlag and (msg != None):
1040 1040 print msg #print"\tSkipping the file %s due to it hasn't enough data" %filename
1041 1041 return False
1042 1042
1043 1043 return True
1044 1044
1045 1045 def findDatafiles(self, path, startDate=None, endDate=None, expLabel='', ext='.r', walk=True, include_path=False):
1046 1046
1047 1047 dateList = []
1048 1048 pathList = []
1049 1049
1050 1050 multi_path = path.split(',')
1051 1051
1052 1052 if not walk:
1053 1053
1054 1054 for single_path in multi_path:
1055 1055
1056 1056 if not os.path.isdir(single_path):
1057 1057 continue
1058 1058
1059 1059 fileList = glob.glob1(single_path, "*"+ext)
1060 1060
1061 1061 for thisFile in fileList:
1062 1062
1063 1063 if not os.path.isfile(os.path.join(single_path, thisFile)):
1064 1064 continue
1065 1065
1066 1066 if not isRadarFile(thisFile):
1067 1067 continue
1068 1068
1069 1069 if not isFileInDateRange(thisFile, startDate, endDate):
1070 1070 continue
1071 1071
1072 1072 thisDate = getDateFromRadarFile(thisFile)
1073 1073
1074 1074 if thisDate in dateList:
1075 1075 continue
1076 1076
1077 1077 dateList.append(thisDate)
1078 1078 pathList.append(single_path)
1079 1079
1080 1080 else:
1081 1081 for single_path in multi_path:
1082 1082
1083 1083 if not os.path.isdir(single_path):
1084 1084 continue
1085 1085
1086 1086 dirList = []
1087 1087
1088 1088 for thisPath in os.listdir(single_path):
1089 1089
1090 1090 if not os.path.isdir(os.path.join(single_path,thisPath)):
1091 1091 continue
1092 1092
1093 1093 if not isRadarFolder(thisPath):
1094 1094 continue
1095 1095
1096 1096 if not isFolderInDateRange(thisPath, startDate, endDate):
1097 1097 continue
1098 1098
1099 1099 dirList.append(thisPath)
1100 1100
1101 1101 if not dirList:
1102 1102 continue
1103 1103
1104 1104 for thisDir in dirList:
1105 1105
1106 1106 datapath = os.path.join(single_path, thisDir, expLabel)
1107 1107 fileList = glob.glob1(datapath, "*"+ext)
1108 1108
1109 1109 if len(fileList) < 1:
1110 1110 continue
1111 1111
1112 1112 thisDate = getDateFromRadarFolder(thisDir)
1113 1113
1114 1114 pathList.append(datapath)
1115 1115 dateList.append(thisDate)
1116 1116
1117 1117 dateList.sort()
1118 1118
1119 1119 if include_path:
1120 1120 return dateList, pathList
1121 1121
1122 1122 return dateList
1123 1123
1124 1124 def setup(self,
1125 1125 path=None,
1126 1126 startDate=None,
1127 1127 endDate=None,
1128 1128 startTime=datetime.time(0,0,0),
1129 1129 endTime=datetime.time(23,59,59),
1130 1130 set=None,
1131 1131 expLabel = "",
1132 1132 ext = None,
1133 1133 online = False,
1134 1134 delay = 60,
1135 1135 walk = True,
1136 1136 getblock = False,
1137 1137 nTxs = 1):
1138 1138
1139 1139 if path == None:
1140 1140 raise ValueError, "[Reading] The path is not valid"
1141 1141
1142 1142 if ext == None:
1143 1143 ext = self.ext
1144 1144
1145 1145 if online:
1146 1146 print "[Reading] Searching files in online mode..."
1147 1147
1148 1148 for nTries in range( self.nTries ):
1149 1149 fullpath, foldercounter, file, year, doy, set = self.__searchFilesOnLine(path=path, expLabel=expLabel, ext=ext, walk=walk, set=set)
1150 1150
1151 1151 if fullpath:
1152 1152 break
1153 1153
1154 1154 print '[Reading] Waiting %0.2f sec for an valid file in %s: try %02d ...' % (self.delay, path, nTries+1)
1155 1155 sleep( self.delay )
1156 1156
1157 1157 if not(fullpath):
1158 1158 print "[Reading] There 'isn't any valid file in %s" % path
1159 1159 return None
1160 1160
1161 1161 self.year = year
1162 1162 self.doy = doy
1163 1163 self.set = set - 1
1164 1164 self.path = path
1165 1165 self.foldercounter = foldercounter
1166 1166 last_set = None
1167 1167
1168 1168 else:
1169 1169 print "[Reading] Searching files in offline mode ..."
1170 1170 pathList, filenameList = self.__searchFilesOffLine(path, startDate=startDate, endDate=endDate,
1171 1171 startTime=startTime, endTime=endTime,
1172 1172 set=set, expLabel=expLabel, ext=ext,
1173 1173 walk=walk)
1174 1174
1175 1175 if not(pathList):
1176 1176 # print "[Reading] No *%s files in %s (%s - %s)"%(ext, path,
1177 1177 # datetime.datetime.combine(startDate,startTime).ctime(),
1178 1178 # datetime.datetime.combine(endDate,endTime).ctime())
1179 1179 #
1180 1180 sys.exit(-1)
1181 1181
1182 1182
1183 1183 self.fileIndex = -1
1184 1184 self.pathList = pathList
1185 1185 self.filenameList = filenameList
1186 1186 file_name = os.path.basename(filenameList[-1])
1187 1187 basename, ext = os.path.splitext(file_name)
1188 1188 last_set = int(basename[-3:])
1189 1189
1190 1190 self.online = online
1191 1191 self.delay = delay
1192 1192 ext = ext.lower()
1193 1193 self.ext = ext
1194 1194 self.getByBlock = getblock
1195 1195 self.nTxs = int(nTxs)
1196 1196
1197 1197 if not(self.setNextFile()):
1198 1198 if (startDate!=None) and (endDate!=None):
1199 1199 print "[Reading] No files in range: %s - %s" %(datetime.datetime.combine(startDate,startTime).ctime(), datetime.datetime.combine(endDate,endTime).ctime())
1200 1200 elif startDate != None:
1201 1201 print "[Reading] No files in range: %s" %(datetime.datetime.combine(startDate,startTime).ctime())
1202 1202 else:
1203 1203 print "[Reading] No files"
1204 1204
1205 1205 sys.exit(-1)
1206 1206
1207 1207 # self.getBasicHeader()
1208 1208
1209 1209 if last_set != None:
1210 1210 self.dataOut.last_block = last_set * self.processingHeaderObj.dataBlocksPerFile + self.basicHeaderObj.dataBlock
1211 1211 return
1212 1212
1213 1213 def getBasicHeader(self):
1214 1214
1215 1215 self.dataOut.utctime = self.basicHeaderObj.utc + self.basicHeaderObj.miliSecond/1000. + self.profileIndex * self.radarControllerHeaderObj.ippSeconds
1216 1216
1217 1217 self.dataOut.flagDiscontinuousBlock = self.flagDiscontinuousBlock
1218 1218
1219 1219 self.dataOut.timeZone = self.basicHeaderObj.timeZone
1220 1220
1221 1221 self.dataOut.dstFlag = self.basicHeaderObj.dstFlag
1222 1222
1223 1223 self.dataOut.errorCount = self.basicHeaderObj.errorCount
1224 1224
1225 1225 self.dataOut.useLocalTime = self.basicHeaderObj.useLocalTime
1226 1226
1227 1227 self.dataOut.ippSeconds = self.radarControllerHeaderObj.ippSeconds/self.nTxs
1228 1228
1229 1229 self.dataOut.nProfiles = self.processingHeaderObj.profilesPerBlock*self.nTxs
1230 1230
1231 1231
1232 1232 def getFirstHeader(self):
1233 1233
1234 1234 raise ValueError, "This method has not been implemented"
1235 1235
1236 1236 def getData(self):
1237 1237
1238 1238 raise ValueError, "This method has not been implemented"
1239 1239
1240 1240 def hasNotDataInBuffer(self):
1241 1241
1242 1242 raise ValueError, "This method has not been implemented"
1243 1243
1244 1244 def readBlock(self):
1245 1245
1246 1246 raise ValueError, "This method has not been implemented"
1247 1247
1248 1248 def isEndProcess(self):
1249 1249
1250 1250 return self.flagNoMoreFiles
1251 1251
1252 1252 def printReadBlocks(self):
1253 1253
1254 1254 print "[Reading] Number of read blocks per file %04d" %self.nReadBlocks
1255 1255
1256 1256 def printTotalBlocks(self):
1257 1257
1258 1258 print "[Reading] Number of read blocks %04d" %self.nTotalBlocks
1259 1259
1260 1260 def printNumberOfBlock(self):
1261 1261
1262 1262 if self.flagIsNewBlock:
1263 1263 print "[Reading] Block No. %d/%d -> %s" %(self.nReadBlocks,
1264 1264 self.processingHeaderObj.dataBlocksPerFile,
1265 1265 self.dataOut.datatime.ctime())
1266 1266
1267 1267 def printInfo(self):
1268 1268
1269 1269 if self.__printInfo == False:
1270 1270 return
1271 1271
1272 1272 self.basicHeaderObj.printInfo()
1273 1273 self.systemHeaderObj.printInfo()
1274 1274 self.radarControllerHeaderObj.printInfo()
1275 1275 self.processingHeaderObj.printInfo()
1276 1276
1277 1277 self.__printInfo = False
1278 1278
1279 1279
1280 1280 def run(self, **kwargs):
1281 1281
1282 1282 if not(self.isConfig):
1283 1283
1284 1284 # self.dataOut = dataOut
1285 1285 self.setup(**kwargs)
1286 1286 self.isConfig = True
1287 1287
1288 1288 self.getData()
1289 1289
1290 1290 class JRODataWriter(JRODataIO):
1291 1291
1292 1292 """
1293 1293 Esta clase permite escribir datos a archivos procesados (.r o ,pdata). La escritura
1294 1294 de los datos siempre se realiza por bloques.
1295 1295 """
1296 1296
1297 1297 blockIndex = 0
1298 1298
1299 1299 path = None
1300 1300
1301 1301 setFile = None
1302 1302
1303 1303 profilesPerBlock = None
1304 1304
1305 1305 blocksPerFile = None
1306 1306
1307 1307 nWriteBlocks = 0
1308 1308
1309 1309 fileDate = None
1310 1310
1311 1311 def __init__(self, dataOut=None):
1312 1312 raise ValueError, "Not implemented"
1313 1313
1314 1314
1315 1315 def hasAllDataInBuffer(self):
1316 1316 raise ValueError, "Not implemented"
1317 1317
1318 1318
1319 1319 def setBlockDimension(self):
1320 1320 raise ValueError, "Not implemented"
1321 1321
1322 1322
1323 1323 def writeBlock(self):
1324 1324 raise ValueError, "No implemented"
1325 1325
1326 1326
1327 1327 def putData(self):
1328 1328 raise ValueError, "No implemented"
1329 1329
1330 1330
1331 1331 def getProcessFlags(self):
1332 1332
1333 1333 processFlags = 0
1334 1334
1335 1335 dtype_index = get_dtype_index(self.dtype)
1336 1336 procflag_dtype = get_procflag_dtype(dtype_index)
1337 1337
1338 1338 processFlags += procflag_dtype
1339 1339
1340 1340 if self.dataOut.flagDecodeData:
1341 1341 processFlags += PROCFLAG.DECODE_DATA
1342 1342
1343 1343 if self.dataOut.flagDeflipData:
1344 1344 processFlags += PROCFLAG.DEFLIP_DATA
1345 1345
1346 1346 if self.dataOut.code is not None:
1347 1347 processFlags += PROCFLAG.DEFINE_PROCESS_CODE
1348 1348
1349 1349 if self.dataOut.nCohInt > 1:
1350 1350 processFlags += PROCFLAG.COHERENT_INTEGRATION
1351 1351
1352 1352 if self.dataOut.type == "Spectra":
1353 1353 if self.dataOut.nIncohInt > 1:
1354 1354 processFlags += PROCFLAG.INCOHERENT_INTEGRATION
1355 1355
1356 1356 if self.dataOut.data_dc is not None:
1357 1357 processFlags += PROCFLAG.SAVE_CHANNELS_DC
1358 1358
1359 1359 if self.dataOut.flagShiftFFT:
1360 1360 processFlags += PROCFLAG.SHIFT_FFT_DATA
1361 1361
1362 1362 return processFlags
1363 1363
1364 1364 def setBasicHeader(self):
1365 1365
1366 1366 self.basicHeaderObj.size = self.basicHeaderSize #bytes
1367 1367 self.basicHeaderObj.version = self.versionFile
1368 1368 self.basicHeaderObj.dataBlock = self.nTotalBlocks
1369 1369
1370 1370 utc = numpy.floor(self.dataOut.utctime)
1371 1371 milisecond = (self.dataOut.utctime - utc)* 1000.0
1372 1372
1373 1373 self.basicHeaderObj.utc = utc
1374 1374 self.basicHeaderObj.miliSecond = milisecond
1375 1375 self.basicHeaderObj.timeZone = self.dataOut.timeZone
1376 1376 self.basicHeaderObj.dstFlag = self.dataOut.dstFlag
1377 1377 self.basicHeaderObj.errorCount = self.dataOut.errorCount
1378 1378
1379 1379 def setFirstHeader(self):
1380 1380 """
1381 1381 Obtiene una copia del First Header
1382 1382
1383 1383 Affected:
1384 1384
1385 1385 self.basicHeaderObj
1386 1386 self.systemHeaderObj
1387 1387 self.radarControllerHeaderObj
1388 1388 self.processingHeaderObj self.
1389 1389
1390 1390 Return:
1391 1391 None
1392 1392 """
1393 1393
1394 1394 raise ValueError, "No implemented"
1395 1395
1396 1396 def __writeFirstHeader(self):
1397 1397 """
1398 1398 Escribe el primer header del file es decir el Basic header y el Long header (SystemHeader, RadarControllerHeader, ProcessingHeader)
1399 1399
1400 1400 Affected:
1401 1401 __dataType
1402 1402
1403 1403 Return:
1404 1404 None
1405 1405 """
1406 1406
1407 1407 # CALCULAR PARAMETROS
1408 1408
1409 1409 sizeLongHeader = self.systemHeaderObj.size + self.radarControllerHeaderObj.size + self.processingHeaderObj.size
1410 1410 self.basicHeaderObj.size = self.basicHeaderSize + sizeLongHeader
1411 1411
1412 1412 self.basicHeaderObj.write(self.fp)
1413 1413 self.systemHeaderObj.write(self.fp)
1414 1414 self.radarControllerHeaderObj.write(self.fp)
1415 1415 self.processingHeaderObj.write(self.fp)
1416 1416
1417 1417 def __setNewBlock(self):
1418 1418 """
1419 1419 Si es un nuevo file escribe el First Header caso contrario escribe solo el Basic Header
1420 1420
1421 1421 Return:
1422 1422 0 : si no pudo escribir nada
1423 1423 1 : Si escribio el Basic el First Header
1424 1424 """
1425 1425 if self.fp == None:
1426 1426 self.setNextFile()
1427 1427
1428 1428 if self.flagIsNewFile:
1429 1429 return 1
1430 1430
1431 1431 if self.blockIndex < self.processingHeaderObj.dataBlocksPerFile:
1432 1432 self.basicHeaderObj.write(self.fp)
1433 1433 return 1
1434 1434
1435 1435 if not( self.setNextFile() ):
1436 1436 return 0
1437 1437
1438 1438 return 1
1439 1439
1440 1440
1441 1441 def writeNextBlock(self):
1442 1442 """
1443 1443 Selecciona el bloque siguiente de datos y los escribe en un file
1444 1444
1445 1445 Return:
1446 1446 0 : Si no hizo pudo escribir el bloque de datos
1447 1447 1 : Si no pudo escribir el bloque de datos
1448 1448 """
1449 1449 if not( self.__setNewBlock() ):
1450 1450 return 0
1451 1451
1452 1452 self.writeBlock()
1453 1453
1454 1454 print "[Writing] Block No. %d/%d" %(self.blockIndex,
1455 1455 self.processingHeaderObj.dataBlocksPerFile)
1456 1456
1457 1457 return 1
1458 1458
1459 1459 def setNextFile(self):
1460 1460 """
1461 1461 Determina el siguiente file que sera escrito
1462 1462
1463 1463 Affected:
1464 1464 self.filename
1465 1465 self.subfolder
1466 1466 self.fp
1467 1467 self.setFile
1468 1468 self.flagIsNewFile
1469 1469
1470 1470 Return:
1471 1471 0 : Si el archivo no puede ser escrito
1472 1472 1 : Si el archivo esta listo para ser escrito
1473 1473 """
1474 1474 ext = self.ext
1475 1475 path = self.path
1476 1476
1477 1477 if self.fp != None:
1478 1478 self.fp.close()
1479 1479
1480 1480 timeTuple = time.localtime( self.dataOut.utctime)
1481 1481 subfolder = 'd%4.4d%3.3d' % (timeTuple.tm_year,timeTuple.tm_yday)
1482 1482
1483 1483 fullpath = os.path.join( path, subfolder )
1484 1484 setFile = self.setFile
1485 1485
1486 1486 if not( os.path.exists(fullpath) ):
1487 1487 os.mkdir(fullpath)
1488 1488 setFile = -1 #inicializo mi contador de seteo
1489 1489 else:
1490 1490 filesList = os.listdir( fullpath )
1491 1491 if len( filesList ) > 0:
1492 1492 filesList = sorted( filesList, key=str.lower )
1493 1493 filen = filesList[-1]
1494 1494 # el filename debera tener el siguiente formato
1495 1495 # 0 1234 567 89A BCDE (hex)
1496 1496 # x YYYY DDD SSS .ext
1497 1497 if isNumber( filen[8:11] ):
1498 1498 setFile = int( filen[8:11] ) #inicializo mi contador de seteo al seteo del ultimo file
1499 1499 else:
1500 1500 setFile = -1
1501 1501 else:
1502 1502 setFile = -1 #inicializo mi contador de seteo
1503 1503
1504 1504 setFile += 1
1505 1505
1506 1506 #If this is a new day it resets some values
1507 1507 if self.dataOut.datatime.date() > self.fileDate:
1508 1508 setFile = 0
1509 1509 self.nTotalBlocks = 0
1510 1510
1511 1511 filen = '%s%4.4d%3.3d%3.3d%s' % (self.optchar, timeTuple.tm_year, timeTuple.tm_yday, setFile, ext )
1512 1512
1513 1513 filename = os.path.join( path, subfolder, filen )
1514 1514
1515 1515 fp = open( filename,'wb' )
1516 1516
1517 1517 self.blockIndex = 0
1518 1518
1519 1519 #guardando atributos
1520 1520 self.filename = filename
1521 1521 self.subfolder = subfolder
1522 1522 self.fp = fp
1523 1523 self.setFile = setFile
1524 1524 self.flagIsNewFile = 1
1525 1525 self.fileDate = self.dataOut.datatime.date()
1526 1526
1527 1527 self.setFirstHeader()
1528 1528
1529 1529 print '[Writing] Opening file: %s'%self.filename
1530 1530
1531 1531 self.__writeFirstHeader()
1532 1532
1533 1533 return 1
1534 1534
1535 1535 def setup(self, dataOut, path, blocksPerFile, profilesPerBlock=64, set=None, ext=None, datatype=4):
1536 1536 """
1537 1537 Setea el tipo de formato en la cual sera guardada la data y escribe el First Header
1538 1538
1539 1539 Inputs:
1540 1540 path : directory where data will be saved
1541 1541 profilesPerBlock : number of profiles per block
1542 1542 set : initial file set
1543 1543 datatype : An integer number that defines data type:
1544 1544 0 : int8 (1 byte)
1545 1545 1 : int16 (2 bytes)
1546 1546 2 : int32 (4 bytes)
1547 1547 3 : int64 (8 bytes)
1548 1548 4 : float32 (4 bytes)
1549 1549 5 : double64 (8 bytes)
1550 1550
1551 1551 Return:
1552 1552 0 : Si no realizo un buen seteo
1553 1553 1 : Si realizo un buen seteo
1554 1554 """
1555 1555
1556 1556 if ext == None:
1557 1557 ext = self.ext
1558 1558
1559 1559 self.ext = ext.lower()
1560 1560
1561 1561 self.path = path
1562 1562
1563 1563 if set is None:
1564 1564 self.setFile = -1
1565 1565 else:
1566 1566 self.setFile = set - 1
1567 1567
1568 1568 self.blocksPerFile = blocksPerFile
1569 1569
1570 1570 self.profilesPerBlock = profilesPerBlock
1571 1571
1572 1572 self.dataOut = dataOut
1573 1573 self.fileDate = self.dataOut.datatime.date()
1574 1574 #By default
1575 1575 self.dtype = self.dataOut.dtype
1576 1576
1577 1577 if datatype is not None:
1578 1578 self.dtype = get_numpy_dtype(datatype)
1579 1579
1580 1580 if not(self.setNextFile()):
1581 1581 print "[Writing] There isn't a next file"
1582 1582 return 0
1583 1583
1584 1584 self.setBlockDimension()
1585 1585
1586 1586 return 1
1587 1587
1588 1588 def run(self, dataOut, **kwargs):
1589 1589
1590 1590 if not(self.isConfig):
1591 1591
1592 1592 self.setup(dataOut, **kwargs)
1593 1593 self.isConfig = True
1594 1594
1595 1595 self.putData()
1596 1596
@@ -1,1065 +1,1069
1 1 import numpy
2 2
3 3 from jroproc_base import ProcessingUnit, Operation
4 4 from schainpy.model.data.jrodata import Voltage
5 5
6 6 class VoltageProc(ProcessingUnit):
7 7
8 8
9 9 def __init__(self):
10 10
11 11 ProcessingUnit.__init__(self)
12 12
13 13 # self.objectDict = {}
14 14 self.dataOut = Voltage()
15 15 self.flip = 1
16 16
17 17 def run(self):
18 18 if self.dataIn.type == 'AMISR':
19 19 self.__updateObjFromAmisrInput()
20 20
21 21 if self.dataIn.type == 'Voltage':
22 22 self.dataOut.copy(self.dataIn)
23 23
24 24 # self.dataOut.copy(self.dataIn)
25 25
26 26 def __updateObjFromAmisrInput(self):
27 27
28 28 self.dataOut.timeZone = self.dataIn.timeZone
29 29 self.dataOut.dstFlag = self.dataIn.dstFlag
30 30 self.dataOut.errorCount = self.dataIn.errorCount
31 31 self.dataOut.useLocalTime = self.dataIn.useLocalTime
32 32
33 33 self.dataOut.flagNoData = self.dataIn.flagNoData
34 34 self.dataOut.data = self.dataIn.data
35 35 self.dataOut.utctime = self.dataIn.utctime
36 36 self.dataOut.channelList = self.dataIn.channelList
37 37 # self.dataOut.timeInterval = self.dataIn.timeInterval
38 38 self.dataOut.heightList = self.dataIn.heightList
39 39 self.dataOut.nProfiles = self.dataIn.nProfiles
40 40
41 41 self.dataOut.nCohInt = self.dataIn.nCohInt
42 42 self.dataOut.ippSeconds = self.dataIn.ippSeconds
43 43 self.dataOut.frequency = self.dataIn.frequency
44 44
45 45 self.dataOut.azimuth = self.dataIn.azimuth
46 46 self.dataOut.zenith = self.dataIn.zenith
47 47
48 48 self.dataOut.beam.codeList = self.dataIn.beam.codeList
49 49 self.dataOut.beam.azimuthList = self.dataIn.beam.azimuthList
50 50 self.dataOut.beam.zenithList = self.dataIn.beam.zenithList
51 51 #
52 52 # pass#
53 53 #
54 54 # def init(self):
55 55 #
56 56 #
57 57 # if self.dataIn.type == 'AMISR':
58 58 # self.__updateObjFromAmisrInput()
59 59 #
60 60 # if self.dataIn.type == 'Voltage':
61 61 # self.dataOut.copy(self.dataIn)
62 62 # # No necesita copiar en cada init() los atributos de dataIn
63 63 # # la copia deberia hacerse por cada nuevo bloque de datos
64 64
65 65 def selectChannels(self, channelList):
66 66
67 67 channelIndexList = []
68 68
69 69 for channel in channelList:
70 70 if channel not in self.dataOut.channelList:
71 71 raise ValueError, "Channel %d is not in %s" %(channel, str(self.dataOut.channelList))
72 72
73 73 index = self.dataOut.channelList.index(channel)
74 74 channelIndexList.append(index)
75 75
76 76 self.selectChannelsByIndex(channelIndexList)
77 77
78 78 def selectChannelsByIndex(self, channelIndexList):
79 79 """
80 80 Selecciona un bloque de datos en base a canales segun el channelIndexList
81 81
82 82 Input:
83 83 channelIndexList : lista sencilla de canales a seleccionar por ej. [2,3,7]
84 84
85 85 Affected:
86 86 self.dataOut.data
87 87 self.dataOut.channelIndexList
88 88 self.dataOut.nChannels
89 89 self.dataOut.m_ProcessingHeader.totalSpectra
90 90 self.dataOut.systemHeaderObj.numChannels
91 91 self.dataOut.m_ProcessingHeader.blockSize
92 92
93 93 Return:
94 94 None
95 95 """
96 96
97 97 for channelIndex in channelIndexList:
98 98 if channelIndex not in self.dataOut.channelIndexList:
99 99 print channelIndexList
100 100 raise ValueError, "The value %d in channelIndexList is not valid" %channelIndex
101 101
102 102 # nChannels = len(channelIndexList)
103 103 if self.dataOut.flagDataAsBlock:
104 104 """
105 105 Si la data es obtenida por bloques, dimension = [nChannels, nProfiles, nHeis]
106 106 """
107 107 data = self.dataOut.data[channelIndexList,:,:]
108 108 else:
109 109 data = self.dataOut.data[channelIndexList,:]
110 110
111 111 self.dataOut.data = data
112 112 self.dataOut.channelList = [self.dataOut.channelList[i] for i in channelIndexList]
113 113 # self.dataOut.nChannels = nChannels
114 114
115 115 return 1
116 116
117 117 def selectHeights(self, minHei=None, maxHei=None):
118 118 """
119 119 Selecciona un bloque de datos en base a un grupo de valores de alturas segun el rango
120 120 minHei <= height <= maxHei
121 121
122 122 Input:
123 123 minHei : valor minimo de altura a considerar
124 124 maxHei : valor maximo de altura a considerar
125 125
126 126 Affected:
127 127 Indirectamente son cambiados varios valores a travez del metodo selectHeightsByIndex
128 128
129 129 Return:
130 130 1 si el metodo se ejecuto con exito caso contrario devuelve 0
131 131 """
132 132
133 133 if minHei == None:
134 134 minHei = self.dataOut.heightList[0]
135 135
136 136 if maxHei == None:
137 137 maxHei = self.dataOut.heightList[-1]
138 138
139 139 if (minHei < self.dataOut.heightList[0]):
140 140 minHei = self.dataOut.heightList[0]
141 141 # raise ValueError, "height range [%d,%d] is not valid. Data height range is [%d, %d]" % (minHei,
142 142 # maxHei,
143 143 # self.dataOut.heightList[0],
144 144 # self.dataOut.heightList[-1])
145 145
146 146 if (maxHei > self.dataOut.heightList[-1]):
147 147 maxHei = self.dataOut.heightList[-1]
148 148 # raise ValueError, "some value in (%d,%d) is not valid" % (minHei, maxHei)
149 149
150 150 minIndex = 0
151 151 maxIndex = 0
152 152 heights = self.dataOut.heightList
153 153
154 154 inda = numpy.where(heights >= minHei)
155 155 indb = numpy.where(heights <= maxHei)
156 156
157 157 try:
158 158 minIndex = inda[0][0]
159 159 except:
160 160 minIndex = 0
161 161
162 162 try:
163 163 maxIndex = indb[0][-1]
164 164 except:
165 165 maxIndex = len(heights)
166 166
167 167 self.selectHeightsByIndex(minIndex, maxIndex)
168 168
169 169 return 1
170 170
171 171
172 172 def selectHeightsByIndex(self, minIndex, maxIndex):
173 173 """
174 174 Selecciona un bloque de datos en base a un grupo indices de alturas segun el rango
175 175 minIndex <= index <= maxIndex
176 176
177 177 Input:
178 178 minIndex : valor de indice minimo de altura a considerar
179 179 maxIndex : valor de indice maximo de altura a considerar
180 180
181 181 Affected:
182 182 self.dataOut.data
183 183 self.dataOut.heightList
184 184
185 185 Return:
186 186 1 si el metodo se ejecuto con exito caso contrario devuelve 0
187 187 """
188 188
189 189 if (minIndex < 0) or (minIndex > maxIndex):
190 190 raise ValueError, "some value in (%d,%d) is not valid" % (minIndex, maxIndex)
191 191
192 192 if (maxIndex >= self.dataOut.nHeights):
193 193 maxIndex = self.dataOut.nHeights
194 194 # raise ValueError, "some value in (%d,%d) is not valid" % (minIndex, maxIndex)
195 195
196 196 # nHeights = maxIndex - minIndex + 1
197 197
198 198 #voltage
199 199 if self.dataOut.flagDataAsBlock:
200 200 """
201 201 Si la data es obtenida por bloques, dimension = [nChannels, nProfiles, nHeis]
202 202 """
203 203 data = self.dataOut.data[:,minIndex:maxIndex,:]
204 204 else:
205 205 data = self.dataOut.data[:,minIndex:maxIndex]
206 206
207 207 # firstHeight = self.dataOut.heightList[minIndex]
208 208
209 209 self.dataOut.data = data
210 210 self.dataOut.heightList = self.dataOut.heightList[minIndex:maxIndex]
211 211
212 212 if self.dataOut.nHeights <= 1:
213 213 raise ValueError, "selectHeights: Too few heights. Current number of heights is %d" %(self.dataOut.nHeights)
214 214
215 215 return 1
216 216
217 217
218 218 def filterByHeights(self, window):
219 219
220 220 deltaHeight = self.dataOut.heightList[1] - self.dataOut.heightList[0]
221 221
222 222 if window == None:
223 223 window = (self.dataOut.radarControllerHeaderObj.txA/self.dataOut.radarControllerHeaderObj.nBaud) / deltaHeight
224 224
225 225 newdelta = deltaHeight * window
226 226 r = self.dataOut.nHeights % window
227 227 newheights = (self.dataOut.nHeights-r)/window
228 228
229 229 if newheights <= 1:
230 230 raise ValueError, "filterByHeights: Too few heights. Current number of heights is %d and window is %d" %(self.dataOut.nHeights, window)
231 231
232 232 if self.dataOut.flagDataAsBlock:
233 233 """
234 234 Si la data es obtenida por bloques, dimension = [nChannels, nProfiles, nHeis]
235 235 """
236 236 buffer = self.dataOut.data[:, :, 0:self.dataOut.nHeights-r]
237 237 buffer = buffer.reshape(self.dataOut.nChannels,self.dataOut.nProfiles,self.dataOut.nHeights/window,window)
238 238 buffer = numpy.sum(buffer,3)
239 239
240 240 else:
241 241 buffer = self.dataOut.data[:,0:self.dataOut.nHeights-r]
242 242 buffer = buffer.reshape(self.dataOut.nChannels,self.dataOut.nHeights/window,window)
243 243 buffer = numpy.sum(buffer,2)
244 244
245 245 self.dataOut.data = buffer
246 246 self.dataOut.heightList = self.dataOut.heightList[0] + numpy.arange( newheights )*newdelta
247 247 self.dataOut.windowOfFilter = window
248 248
249 249 def setH0(self, h0, deltaHeight = None):
250 250
251 251 if not deltaHeight:
252 252 deltaHeight = self.dataOut.heightList[1] - self.dataOut.heightList[0]
253 253
254 254 nHeights = self.dataOut.nHeights
255 255
256 256 newHeiRange = h0 + numpy.arange(nHeights)*deltaHeight
257 257
258 258 self.dataOut.heightList = newHeiRange
259 259
260 260 def deFlip(self, channelList = []):
261 261
262 262 data = self.dataOut.data.copy()
263 263
264 264 if self.dataOut.flagDataAsBlock:
265 265 flip = self.flip
266 266 profileList = range(self.dataOut.nProfiles)
267 267
268 268 if not channelList:
269 269 for thisProfile in profileList:
270 270 data[:,thisProfile,:] = data[:,thisProfile,:]*flip
271 271 flip *= -1.0
272 272 else:
273 273 for thisChannel in channelList:
274 274 if thisChannel not in self.dataOut.channelList:
275 275 continue
276 276
277 277 for thisProfile in profileList:
278 278 data[thisChannel,thisProfile,:] = data[thisChannel,thisProfile,:]*flip
279 279 flip *= -1.0
280 280
281 281 self.flip = flip
282 282
283 283 else:
284 284 if not channelList:
285 285 data[:,:] = data[:,:]*self.flip
286 286 else:
287 287 for thisChannel in channelList:
288 288 if thisChannel not in self.dataOut.channelList:
289 289 continue
290 290
291 291 data[thisChannel,:] = data[thisChannel,:]*self.flip
292 292
293 293 self.flip *= -1.
294 294
295 295 self.dataOut.data = data
296 296
297 297 def setRadarFrequency(self, frequency=None):
298 298
299 299 if frequency != None:
300 300 self.dataOut.frequency = frequency
301 301
302 302 return 1
303 303
304 304 class CohInt(Operation):
305 305
306 306 isConfig = False
307 307
308 308 __profIndex = 0
309 309 __withOverapping = False
310 310
311 311 __byTime = False
312 312 __initime = None
313 313 __lastdatatime = None
314 314 __integrationtime = None
315 315
316 316 __buffer = None
317 317
318 318 __dataReady = False
319 319
320 320 n = None
321 321
322 322
323 323 def __init__(self):
324 324
325 325 Operation.__init__(self)
326 326
327 327 # self.isConfig = False
328 328
329 329 def setup(self, n=None, timeInterval=None, overlapping=False, byblock=False):
330 330 """
331 331 Set the parameters of the integration class.
332 332
333 333 Inputs:
334 334
335 335 n : Number of coherent integrations
336 336 timeInterval : Time of integration. If the parameter "n" is selected this one does not work
337 337 overlapping :
338 338
339 339 """
340 340
341 341 self.__initime = None
342 342 self.__lastdatatime = 0
343 343 self.__buffer = None
344 344 self.__dataReady = False
345 345 self.byblock = byblock
346 346
347 347 if n == None and timeInterval == None:
348 348 raise ValueError, "n or timeInterval should be specified ..."
349 349
350 350 if n != None:
351 351 self.n = n
352 352 self.__byTime = False
353 353 else:
354 354 self.__integrationtime = timeInterval #* 60. #if (type(timeInterval)!=integer) -> change this line
355 355 self.n = 9999
356 356 self.__byTime = True
357 357
358 358 if overlapping:
359 359 self.__withOverapping = True
360 360 self.__buffer = None
361 361 else:
362 362 self.__withOverapping = False
363 363 self.__buffer = 0
364 364
365 365 self.__profIndex = 0
366 366
367 367 def putData(self, data):
368 368
369 369 """
370 370 Add a profile to the __buffer and increase in one the __profileIndex
371 371
372 372 """
373 373
374 374 if not self.__withOverapping:
375 375 self.__buffer += data.copy()
376 376 self.__profIndex += 1
377 377 return
378 378
379 379 #Overlapping data
380 380 nChannels, nHeis = data.shape
381 381 data = numpy.reshape(data, (1, nChannels, nHeis))
382 382
383 383 #If the buffer is empty then it takes the data value
384 384 if self.__buffer is None:
385 385 self.__buffer = data
386 386 self.__profIndex += 1
387 387 return
388 388
389 389 #If the buffer length is lower than n then stakcing the data value
390 390 if self.__profIndex < self.n:
391 391 self.__buffer = numpy.vstack((self.__buffer, data))
392 392 self.__profIndex += 1
393 393 return
394 394
395 395 #If the buffer length is equal to n then replacing the last buffer value with the data value
396 396 self.__buffer = numpy.roll(self.__buffer, -1, axis=0)
397 397 self.__buffer[self.n-1] = data
398 398 self.__profIndex = self.n
399 399 return
400 400
401 401
402 402 def pushData(self):
403 403 """
404 404 Return the sum of the last profiles and the profiles used in the sum.
405 405
406 406 Affected:
407 407
408 408 self.__profileIndex
409 409
410 410 """
411 411
412 412 if not self.__withOverapping:
413 413 data = self.__buffer
414 414 n = self.__profIndex
415 415
416 416 self.__buffer = 0
417 417 self.__profIndex = 0
418 418
419 419 return data, n
420 420
421 421 #Integration with Overlapping
422 422 data = numpy.sum(self.__buffer, axis=0)
423 423 n = self.__profIndex
424 424
425 425 return data, n
426 426
427 427 def byProfiles(self, data):
428 428
429 429 self.__dataReady = False
430 430 avgdata = None
431 431 # n = None
432 432
433 433 self.putData(data)
434 434
435 435 if self.__profIndex == self.n:
436 436
437 437 avgdata, n = self.pushData()
438 438 self.__dataReady = True
439 439
440 440 return avgdata
441 441
442 442 def byTime(self, data, datatime):
443 443
444 444 self.__dataReady = False
445 445 avgdata = None
446 446 n = None
447 447
448 448 self.putData(data)
449 449
450 450 if (datatime - self.__initime) >= self.__integrationtime:
451 451 avgdata, n = self.pushData()
452 452 self.n = n
453 453 self.__dataReady = True
454 454
455 455 return avgdata
456 456
457 457 def integrate(self, data, datatime=None):
458 458
459 459 if self.__initime == None:
460 460 self.__initime = datatime
461 461
462 462 if self.__byTime:
463 463 avgdata = self.byTime(data, datatime)
464 464 else:
465 465 avgdata = self.byProfiles(data)
466 466
467 467
468 468 self.__lastdatatime = datatime
469 469
470 470 if avgdata is None:
471 471 return None, None
472 472
473 473 avgdatatime = self.__initime
474 474
475 475 deltatime = datatime -self.__lastdatatime
476 476
477 477 if not self.__withOverapping:
478 478 self.__initime = datatime
479 479 else:
480 480 self.__initime += deltatime
481 481
482 482 return avgdata, avgdatatime
483 483
484 484 def integrateByBlock(self, dataOut):
485 485
486 486 times = int(dataOut.data.shape[1]/self.n)
487 487 avgdata = numpy.zeros((dataOut.nChannels, times, dataOut.nHeights), dtype=numpy.complex)
488 488
489 489 id_min = 0
490 490 id_max = self.n
491 491
492 492 for i in range(times):
493 493 junk = dataOut.data[:,id_min:id_max,:]
494 494 avgdata[:,i,:] = junk.sum(axis=1)
495 495 id_min += self.n
496 496 id_max += self.n
497 497
498 498 timeInterval = dataOut.ippSeconds*self.n
499 499 avgdatatime = (times - 1) * timeInterval + dataOut.utctime
500 500 self.__dataReady = True
501 501 return avgdata, avgdatatime
502 502
503 503 def run(self, dataOut, **kwargs):
504 504
505 505 if not self.isConfig:
506 506 self.setup(**kwargs)
507 507 self.isConfig = True
508 508
509 509 if dataOut.flagDataAsBlock:
510 510 """
511 511 Si la data es leida por bloques, dimension = [nChannels, nProfiles, nHeis]
512 512 """
513 513 avgdata, avgdatatime = self.integrateByBlock(dataOut)
514 514 else:
515 515 avgdata, avgdatatime = self.integrate(dataOut.data, dataOut.utctime)
516 516
517 517 # dataOut.timeInterval *= n
518 518 dataOut.flagNoData = True
519 519
520 520 if self.__dataReady:
521 521 dataOut.data = avgdata
522 522 dataOut.nCohInt *= self.n
523 523 dataOut.utctime = avgdatatime
524 524 # dataOut.timeInterval = dataOut.ippSeconds * dataOut.nCohInt
525 525 dataOut.flagNoData = False
526 526
527 527 class Decoder(Operation):
528 528
529 529 isConfig = False
530 530 __profIndex = 0
531 531
532 532 code = None
533 533
534 534 nCode = None
535 535 nBaud = None
536 536
537 537
538 538 def __init__(self):
539 539
540 540 Operation.__init__(self)
541 541
542 542 self.times = None
543 543 self.osamp = None
544 544 # self.__setValues = False
545 545 self.isConfig = False
546 546
547 547 def setup(self, code, osamp, dataOut):
548 548
549 549 self.__profIndex = 0
550 550
551 551 self.code = code
552 552
553 553 self.nCode = len(code)
554 554 self.nBaud = len(code[0])
555 555
556 556 if (osamp != None) and (osamp >1):
557 557 self.osamp = osamp
558 558 self.code = numpy.repeat(code, repeats=self.osamp, axis=1)
559 559 self.nBaud = self.nBaud*self.osamp
560 560
561 561 self.__nChannels = dataOut.nChannels
562 562 self.__nProfiles = dataOut.nProfiles
563 563 self.__nHeis = dataOut.nHeights
564 564
565 if self.__nHeis < self.nBaud:
566 print 'IOError: Number of heights (%d) should be greater than number of bauds (%d)' %(self.__nHeis, self.nBaud)
567 raise IOError, 'Number of heights (%d) should be greater than number of bauds (%d)' %(self.__nHeis, self.nBaud)
568
565 569 if dataOut.flagDataAsBlock:
566 570
567 571 self.ndatadec = self.__nHeis #- self.nBaud + 1
568 572
569 573 self.datadecTime = numpy.zeros((self.__nChannels, self.__nProfiles, self.ndatadec), dtype=numpy.complex)
570 574
571 575 else:
572 576
573 577 __codeBuffer = numpy.zeros((self.nCode, self.__nHeis), dtype=numpy.complex)
574 578
575 579 __codeBuffer[:,0:self.nBaud] = self.code
576 580
577 581 self.fft_code = numpy.conj(numpy.fft.fft(__codeBuffer, axis=1))
578 582
579 583 self.ndatadec = self.__nHeis #- self.nBaud + 1
580 584
581 585 self.datadecTime = numpy.zeros((self.__nChannels, self.ndatadec), dtype=numpy.complex)
582 586
583 587 def convolutionInFreq(self, data):
584 588
585 589 fft_code = self.fft_code[self.__profIndex].reshape(1,-1)
586 590
587 591 fft_data = numpy.fft.fft(data, axis=1)
588 592
589 593 conv = fft_data*fft_code
590 594
591 595 data = numpy.fft.ifft(conv,axis=1)
592 596
593 597 datadec = data#[:,:]
594 598
595 599 return datadec
596 600
597 601 def convolutionInFreqOpt(self, data):
598 602
599 603 raise NotImplementedError
600 604
601 605 # fft_code = self.fft_code[self.__profIndex].reshape(1,-1)
602 606 #
603 607 # data = cfunctions.decoder(fft_code, data)
604 608 #
605 609 # datadec = data#[:,:]
606 610 #
607 611 # return datadec
608 612
609 613 def convolutionInTime(self, data):
610 614
611 615 code = self.code[self.__profIndex]
612 616
613 617 for i in range(self.__nChannels):
614 618 self.datadecTime[i,:] = numpy.correlate(data[i,:], code, mode='full')[self.nBaud-1:]
615 619
616 620 return self.datadecTime
617 621
618 622 def convolutionByBlockInTime(self, data):
619 623
620 624 repetitions = self.__nProfiles / self.nCode
621 625
622 626 junk = numpy.lib.stride_tricks.as_strided(self.code, (repetitions, self.code.size), (0, self.code.itemsize))
623 627 junk = junk.flatten()
624 628 code_block = numpy.reshape(junk, (self.nCode*repetitions, self.nBaud))
625 629
626 630 for i in range(self.__nChannels):
627 631 for j in range(self.__nProfiles):
628 632 self.datadecTime[i,j,:] = numpy.correlate(data[i,j,:], code_block[j,:], mode='same')
629 633
630 634 return self.datadecTime
631 635
632 636 def run(self, dataOut, code=None, nCode=None, nBaud=None, mode = 0, osamp=None, times=None):
633 637
634 638 if dataOut.flagDecodeData:
635 639 print "This data is already decoded, recoding again ..."
636 640
637 641 if not self.isConfig:
638 642
639 643 if code is None:
640 644 code = dataOut.code
641 645 else:
642 646 code = numpy.array(code).reshape(nCode,nBaud)
643 647
644 648 self.setup(code, osamp, dataOut)
645 649
646 650 self.isConfig = True
647 651
648 652 if self.code is None:
649 653 print "Fail decoding: Code is not defined."
650 654 return
651 655
652 656 if dataOut.flagDataAsBlock:
653 657 """
654 658 Decoding when data have been read as block,
655 659 """
656 660 datadec = self.convolutionByBlockInTime(dataOut.data)
657 661
658 662 else:
659 663 """
660 664 Decoding when data have been read profile by profile
661 665 """
662 666 if mode == 0:
663 667 datadec = self.convolutionInTime(dataOut.data)
664 668
665 669 if mode == 1:
666 670 datadec = self.convolutionInFreq(dataOut.data)
667 671
668 672 if mode == 2:
669 673 datadec = self.convolutionInFreqOpt(dataOut.data)
670 674
671 675 dataOut.code = self.code
672 676 dataOut.nCode = self.nCode
673 677 dataOut.nBaud = self.nBaud
674 678
675 679 dataOut.data = datadec
676 680
677 681 dataOut.heightList = dataOut.heightList[0:self.ndatadec]
678 682
679 683 dataOut.flagDecodeData = True #asumo q la data esta decodificada
680 684
681 685 if self.__profIndex == self.nCode-1:
682 686 self.__profIndex = 0
683 687 return 1
684 688
685 689 self.__profIndex += 1
686 690
687 691 return 1
688 692 # dataOut.flagDeflipData = True #asumo q la data no esta sin flip
689 693
690 694
691 695 class ProfileConcat(Operation):
692 696
693 697 isConfig = False
694 698 buffer = None
695 699
696 700 def __init__(self):
697 701
698 702 Operation.__init__(self)
699 703 self.profileIndex = 0
700 704
701 705 def reset(self):
702 706 self.buffer = numpy.zeros_like(self.buffer)
703 707 self.start_index = 0
704 708 self.times = 1
705 709
706 710 def setup(self, data, m, n=1):
707 711 self.buffer = numpy.zeros((data.shape[0],data.shape[1]*m),dtype=type(data[0,0]))
708 712 self.nHeights = data.nHeights
709 713 self.start_index = 0
710 714 self.times = 1
711 715
712 716 def concat(self, data):
713 717
714 718 self.buffer[:,self.start_index:self.profiles*self.times] = data.copy()
715 719 self.start_index = self.start_index + self.nHeights
716 720
717 721 def run(self, dataOut, m):
718 722
719 723 dataOut.flagNoData = True
720 724
721 725 if not self.isConfig:
722 726 self.setup(dataOut.data, m, 1)
723 727 self.isConfig = True
724 728
725 729 if dataOut.flagDataAsBlock:
726 730
727 731 raise ValueError, "ProfileConcat can only be used when voltage have been read profile by profile, getBlock = False"
728 732
729 733 else:
730 734 self.concat(dataOut.data)
731 735 self.times += 1
732 736 if self.times > m:
733 737 dataOut.data = self.buffer
734 738 self.reset()
735 739 dataOut.flagNoData = False
736 740 # se deben actualizar mas propiedades del header y del objeto dataOut, por ejemplo, las alturas
737 741 deltaHeight = dataOut.heightList[1] - dataOut.heightList[0]
738 742 xf = dataOut.heightList[0] + dataOut.nHeights * deltaHeight * m
739 743 dataOut.heightList = numpy.arange(dataOut.heightList[0], xf, deltaHeight)
740 744 dataOut.ippSeconds *= m
741 745
742 746 class ProfileSelector(Operation):
743 747
744 748 profileIndex = None
745 749 # Tamanho total de los perfiles
746 750 nProfiles = None
747 751
748 752 def __init__(self):
749 753
750 754 Operation.__init__(self)
751 755 self.profileIndex = 0
752 756
753 757 def incIndex(self):
754 758
755 759 self.profileIndex += 1
756 760
757 761 if self.profileIndex >= self.nProfiles:
758 762 self.profileIndex = 0
759 763
760 764 def isThisProfileInRange(self, profileIndex, minIndex, maxIndex):
761 765
762 766 if profileIndex < minIndex:
763 767 return False
764 768
765 769 if profileIndex > maxIndex:
766 770 return False
767 771
768 772 return True
769 773
770 774 def isThisProfileInList(self, profileIndex, profileList):
771 775
772 776 if profileIndex not in profileList:
773 777 return False
774 778
775 779 return True
776 780
777 781 def run(self, dataOut, profileList=None, profileRangeList=None, beam=None, byblock=False, rangeList = None, nProfiles=None):
778 782
779 783 """
780 784 ProfileSelector:
781 785
782 786 Inputs:
783 787 profileList : Index of profiles selected. Example: profileList = (0,1,2,7,8)
784 788
785 789 profileRangeList : Minimum and maximum profile indexes. Example: profileRangeList = (4, 30)
786 790
787 791 rangeList : List of profile ranges. Example: rangeList = ((4, 30), (32, 64), (128, 256))
788 792
789 793 """
790 794
791 795 dataOut.flagNoData = True
792 796
793 797 if nProfiles:
794 798 self.nProfiles = dataOut.nProfiles
795 799 else:
796 800 self.nProfiles = nProfiles
797 801
798 802 if dataOut.flagDataAsBlock:
799 803 """
800 804 data dimension = [nChannels, nProfiles, nHeis]
801 805 """
802 806 if profileList != None:
803 807 dataOut.data = dataOut.data[:,profileList,:]
804 808 dataOut.nProfiles = len(profileList)
805 809 dataOut.profileIndex = dataOut.nProfiles - 1
806 810
807 811 if profileRangeList != None:
808 812 minIndex = profileRangeList[0]
809 813 maxIndex = profileRangeList[1]
810 814
811 815 dataOut.data = dataOut.data[:,minIndex:maxIndex+1,:]
812 816 dataOut.nProfiles = maxIndex - minIndex + 1
813 817 dataOut.profileIndex = dataOut.nProfiles - 1
814 818
815 819 if rangeList != None:
816 820 raise ValueError, "Profile Selector: Not implemented for rangeList yet"
817 821
818 822 dataOut.flagNoData = False
819 823
820 824 return True
821 825
822 826 else:
823 827 """
824 828 data dimension = [nChannels, nHeis]
825 829
826 830 """
827 831 if profileList != None:
828 832
829 833 dataOut.nProfiles = len(profileList)
830 834
831 835 if self.isThisProfileInList(dataOut.profileIndex, profileList):
832 836 dataOut.flagNoData = False
833 837 dataOut.profileIndex = self.profileIndex
834 838
835 839 self.incIndex()
836 840 return True
837 841
838 842
839 843 if profileRangeList != None:
840 844
841 845 minIndex = profileRangeList[0]
842 846 maxIndex = profileRangeList[1]
843 847
844 848 dataOut.nProfiles = maxIndex - minIndex + 1
845 849
846 850 if self.isThisProfileInRange(dataOut.profileIndex, minIndex, maxIndex):
847 851 dataOut.flagNoData = False
848 852 dataOut.profileIndex = self.profileIndex
849 853
850 854 self.incIndex()
851 855 return True
852 856
853 857 if rangeList != None:
854 858
855 859 nProfiles = 0
856 860
857 861 for thisRange in rangeList:
858 862 minIndex = thisRange[0]
859 863 maxIndex = thisRange[1]
860 864
861 865 nProfiles += maxIndex - minIndex + 1
862 866
863 867 dataOut.nProfiles = nProfiles
864 868
865 869 for thisRange in rangeList:
866 870
867 871 minIndex = thisRange[0]
868 872 maxIndex = thisRange[1]
869 873
870 874 if self.isThisProfileInRange(dataOut.profileIndex, minIndex, maxIndex):
871 875
872 876 # print "profileIndex = ", dataOut.profileIndex
873 877
874 878 dataOut.flagNoData = False
875 879 dataOut.profileIndex = self.profileIndex
876 880
877 881 self.incIndex()
878 882 break
879 883 return True
880 884
881 885
882 886 if beam != None: #beam is only for AMISR data
883 887 if self.isThisProfileInList(dataOut.profileIndex, dataOut.beamRangeDict[beam]):
884 888 dataOut.flagNoData = False
885 889 dataOut.profileIndex = self.profileIndex
886 890
887 891 self.incIndex()
888 892 return 1
889 893
890 894 raise ValueError, "ProfileSelector needs profileList, profileRangeList or rangeList parameter"
891 895
892 896 return 0
893 897
894 898
895 899
896 900 class Reshaper(Operation):
897 901
898 902 def __init__(self):
899 903
900 904 Operation.__init__(self)
901 905 self.updateNewHeights = True
902 906
903 907 def run(self, dataOut, shape):
904 908
905 909 if not dataOut.flagDataAsBlock:
906 910 raise ValueError, "Reshaper can only be used when voltage have been read as Block, getBlock = True"
907 911
908 912 if len(shape) != 3:
909 913 raise ValueError, "shape len should be equal to 3, (nChannels, nProfiles, nHeis)"
910 914
911 915 shape_tuple = tuple(shape)
912 916 dataOut.data = numpy.reshape(dataOut.data, shape_tuple)
913 917 dataOut.flagNoData = False
914 918
915 919 if self.updateNewHeights:
916 920
917 921 old_nheights = dataOut.nHeights
918 922 new_nheights = dataOut.data.shape[2]
919 923 factor = 1.0*new_nheights / old_nheights
920 924
921 925 deltaHeight = dataOut.heightList[1] - dataOut.heightList[0]
922 926
923 927 xf = dataOut.heightList[0] + dataOut.nHeights * deltaHeight * factor
924 928
925 929 dataOut.heightList = numpy.arange(dataOut.heightList[0], xf, deltaHeight)
926 930
927 931 dataOut.nProfiles = dataOut.data.shape[1]
928 932
929 933 dataOut.ippSeconds *= factor
930 934 #
931 935 # import collections
932 936 # from scipy.stats import mode
933 937 #
934 938 # class Synchronize(Operation):
935 939 #
936 940 # isConfig = False
937 941 # __profIndex = 0
938 942 #
939 943 # def __init__(self):
940 944 #
941 945 # Operation.__init__(self)
942 946 # # self.isConfig = False
943 947 # self.__powBuffer = None
944 948 # self.__startIndex = 0
945 949 # self.__pulseFound = False
946 950 #
947 951 # def __findTxPulse(self, dataOut, channel=0, pulse_with = None):
948 952 #
949 953 # #Read data
950 954 #
951 955 # powerdB = dataOut.getPower(channel = channel)
952 956 # noisedB = dataOut.getNoise(channel = channel)[0]
953 957 #
954 958 # self.__powBuffer.extend(powerdB.flatten())
955 959 #
956 960 # dataArray = numpy.array(self.__powBuffer)
957 961 #
958 962 # filteredPower = numpy.correlate(dataArray, dataArray[0:self.__nSamples], "same")
959 963 #
960 964 # maxValue = numpy.nanmax(filteredPower)
961 965 #
962 966 # if maxValue < noisedB + 10:
963 967 # #No se encuentra ningun pulso de transmision
964 968 # return None
965 969 #
966 970 # maxValuesIndex = numpy.where(filteredPower > maxValue - 0.1*abs(maxValue))[0]
967 971 #
968 972 # if len(maxValuesIndex) < 2:
969 973 # #Solo se encontro un solo pulso de transmision de un baudio, esperando por el siguiente TX
970 974 # return None
971 975 #
972 976 # phasedMaxValuesIndex = maxValuesIndex - self.__nSamples
973 977 #
974 978 # #Seleccionar solo valores con un espaciamiento de nSamples
975 979 # pulseIndex = numpy.intersect1d(maxValuesIndex, phasedMaxValuesIndex)
976 980 #
977 981 # if len(pulseIndex) < 2:
978 982 # #Solo se encontro un pulso de transmision con ancho mayor a 1
979 983 # return None
980 984 #
981 985 # spacing = pulseIndex[1:] - pulseIndex[:-1]
982 986 #
983 987 # #remover senales que se distancien menos de 10 unidades o muestras
984 988 # #(No deberian existir IPP menor a 10 unidades)
985 989 #
986 990 # realIndex = numpy.where(spacing > 10 )[0]
987 991 #
988 992 # if len(realIndex) < 2:
989 993 # #Solo se encontro un pulso de transmision con ancho mayor a 1
990 994 # return None
991 995 #
992 996 # #Eliminar pulsos anchos (deja solo la diferencia entre IPPs)
993 997 # realPulseIndex = pulseIndex[realIndex]
994 998 #
995 999 # period = mode(realPulseIndex[1:] - realPulseIndex[:-1])[0][0]
996 1000 #
997 1001 # print "IPP = %d samples" %period
998 1002 #
999 1003 # self.__newNSamples = dataOut.nHeights #int(period)
1000 1004 # self.__startIndex = int(realPulseIndex[0])
1001 1005 #
1002 1006 # return 1
1003 1007 #
1004 1008 #
1005 1009 # def setup(self, nSamples, nChannels, buffer_size = 4):
1006 1010 #
1007 1011 # self.__powBuffer = collections.deque(numpy.zeros( buffer_size*nSamples,dtype=numpy.float),
1008 1012 # maxlen = buffer_size*nSamples)
1009 1013 #
1010 1014 # bufferList = []
1011 1015 #
1012 1016 # for i in range(nChannels):
1013 1017 # bufferByChannel = collections.deque(numpy.zeros( buffer_size*nSamples, dtype=numpy.complex) + numpy.NAN,
1014 1018 # maxlen = buffer_size*nSamples)
1015 1019 #
1016 1020 # bufferList.append(bufferByChannel)
1017 1021 #
1018 1022 # self.__nSamples = nSamples
1019 1023 # self.__nChannels = nChannels
1020 1024 # self.__bufferList = bufferList
1021 1025 #
1022 1026 # def run(self, dataOut, channel = 0):
1023 1027 #
1024 1028 # if not self.isConfig:
1025 1029 # nSamples = dataOut.nHeights
1026 1030 # nChannels = dataOut.nChannels
1027 1031 # self.setup(nSamples, nChannels)
1028 1032 # self.isConfig = True
1029 1033 #
1030 1034 # #Append new data to internal buffer
1031 1035 # for thisChannel in range(self.__nChannels):
1032 1036 # bufferByChannel = self.__bufferList[thisChannel]
1033 1037 # bufferByChannel.extend(dataOut.data[thisChannel])
1034 1038 #
1035 1039 # if self.__pulseFound:
1036 1040 # self.__startIndex -= self.__nSamples
1037 1041 #
1038 1042 # #Finding Tx Pulse
1039 1043 # if not self.__pulseFound:
1040 1044 # indexFound = self.__findTxPulse(dataOut, channel)
1041 1045 #
1042 1046 # if indexFound == None:
1043 1047 # dataOut.flagNoData = True
1044 1048 # return
1045 1049 #
1046 1050 # self.__arrayBuffer = numpy.zeros((self.__nChannels, self.__newNSamples), dtype = numpy.complex)
1047 1051 # self.__pulseFound = True
1048 1052 # self.__startIndex = indexFound
1049 1053 #
1050 1054 # #If pulse was found ...
1051 1055 # for thisChannel in range(self.__nChannels):
1052 1056 # bufferByChannel = self.__bufferList[thisChannel]
1053 1057 # #print self.__startIndex
1054 1058 # x = numpy.array(bufferByChannel)
1055 1059 # self.__arrayBuffer[thisChannel] = x[self.__startIndex:self.__startIndex+self.__newNSamples]
1056 1060 #
1057 1061 # deltaHeight = dataOut.heightList[1] - dataOut.heightList[0]
1058 1062 # dataOut.heightList = numpy.arange(self.__newNSamples)*deltaHeight
1059 1063 # # dataOut.ippSeconds = (self.__newNSamples / deltaHeight)/1e6
1060 1064 #
1061 1065 # dataOut.data = self.__arrayBuffer
1062 1066 #
1063 1067 # self.__startIndex += self.__newNSamples
1064 1068 #
1065 1069 # return No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now