diff --git a/schainpy/controller.py b/schainpy/controller.py index abdae15..3568563 100644 --- a/schainpy/controller.py +++ b/schainpy/controller.py @@ -139,6 +139,12 @@ class ParameterConf(): self.name = name self.value = str(value) self.format = str.lower(format) + + def update(self, name, value, format='str'): + + self.name = name + self.value = str(value) + self.format = format def makeXml(self, opElement): @@ -194,6 +200,34 @@ class OperationConf(): return self.parmConfObjList + def getParameterObj(self, parameterName): + + for parmConfObj in self.parmConfObjList: + + if parmConfObj.name != parameterName: + continue + + return parmConfObj + + return None + + def getParameterObjfromValue(self,parameterValue): + for parmConfObj in self.parmConfObjList: + + if parmConfObj.getValue() != parameterValue: + continue + + return parmConfObj.getValue() + + return None + + def getParameterValue(self, parameterName): + + parameterObj = self.getParameterObj(parameterName) + value = parameterObj.getValue() + + return value + def setup(self, id, name, priority, type): self.id = id @@ -202,6 +236,13 @@ class OperationConf(): self.priority = priority self.parmConfObjList = [] + + def removeParameters(self): + + for obj in self.parmConfObjList: + del obj + + self.parmConfObjList = [] def addParameter(self, name, value, format='str'): @@ -214,6 +255,13 @@ class OperationConf(): return parmConfObj + def changeParameter(self, name, value, format='str'): + + parmConfObj = self.getParameterObj(name) + parmConfObj.update(name, value, format) + + return parmConfObj + def makeXml(self, upElement): opElement = SubElement(upElement, self.ELEMENTNAME) @@ -282,6 +330,7 @@ class ProcUnitConf(): name = None datatype = None inputId = None + parentId = None opConfObjList = [] @@ -326,21 +375,49 @@ class ProcUnitConf(): return self.opConfObjList + def getOperationObj(self, name=None): + + for opConfObj in self.opConfObjList: + + if opConfObj.name != name: + continue + + return opConfObj + + return None + + def getOpObjfromParamValue(self,value=None): + + for opConfObj in self.opConfObjList: + if opConfObj.getParameterObjfromValue(parameterValue=value) != value: + continue + return opConfObj + return None + def getProcUnitObj(self): return self.procUnitObj - def setup(self, id, name, datatype, inputId): + def setup(self, id, name, datatype, inputId, parentId=None): self.id = id self.name = name self.datatype = datatype self.inputId = inputId + self.parentId = parentId self.opConfObjList = [] self.addOperation(name='run', optype='self') + def removeOperations(self): + + for obj in self.opConfObjList: + del obj + + self.opConfObjList = [] + self.addOperation(name='run') + def addParameter(self, **kwargs): opObj = self.opConfObjList[0] @@ -426,6 +503,9 @@ class ProcUnitConf(): kwargs = {} for parmConfObj in opConfObj.getParameterObjList(): + if opConfObj.name == 'run' and parmConfObj.name == 'datatype': + continue + kwargs[parmConfObj.name] = parmConfObj.getValue() #print "\tRunning the '%s' operation with %s" %(opConfObj.name, opConfObj.id) @@ -439,8 +519,15 @@ class ProcUnitConf(): def close(self): - self.procUnitObj.close() + for opConfObj in self.opConfObjList: + if opConfObj.type == 'self': + continue + + opObj = self.procUnitObj.getOperationObj(opConfObj.id) + opObj.close() + self.procUnitObj.close() + return class ReadUnitConf(ProcUnitConf): @@ -467,7 +554,7 @@ class ReadUnitConf(ProcUnitConf): return self.ELEMENTNAME - def setup(self, id, name, datatype, path="", startDate="", endDate="", startTime="", endTime="", **kwargs): + def setup(self, id, name, datatype, path, startDate="", endDate="", startTime="", endTime="", parentId=None, **kwargs): self.id = id self.name = name @@ -480,11 +567,23 @@ class ReadUnitConf(ProcUnitConf): self.endTime = endTime self.addRunOperation(**kwargs) - + + def update(self, datatype, path, startDate, endDate, startTime, endTime, parentId=None, **kwargs): + + self.datatype = datatype + self.path = path + self.startDate = startDate + self.endDate = endDate + self.startTime = startTime + self.endTime = endTime + + self.updateRunOperation(**kwargs) + def addRunOperation(self, **kwargs): opObj = self.addOperation(name = 'run', optype = 'self') + opObj.addParameter(name='datatype' , value=self.datatype, format='str') opObj.addParameter(name='path' , value=self.path, format='str') opObj.addParameter(name='startDate' , value=self.startDate, format='date') opObj.addParameter(name='endDate' , value=self.endDate, format='date') @@ -496,6 +595,22 @@ class ReadUnitConf(ProcUnitConf): return opObj + def updateRunOperation(self, **kwargs): + + opObj = self.getOperationObj(name = 'run') + opObj.removeParameters() + + opObj.addParameter(name='datatype' , value=self.datatype, format='str') + opObj.addParameter(name='path' , value=self.path, format='str') + opObj.addParameter(name='startDate' , value=self.startDate, format='date') + opObj.addParameter(name='endDate' , value=self.endDate, format='date') + opObj.addParameter(name='startTime' , value=self.startTime, format='time') + opObj.addParameter(name='endTime' , value=self.endTime, format='time') + + for key, value in kwargs.items(): + opObj.addParameter(name=key, value=value, format=type(value).__name__) + + return opObj class Project(): @@ -507,15 +622,24 @@ class Project(): ELEMENTNAME = 'Project' - def __init__(self): + def __init__(self, control=None, dataq=None): self.id = None self.name = None self.description = None - -# self.readUnitConfObjList = [] + self.procUnitConfObjDict = {} + #global data_q + #data_q = dataq + + if control==None: + control = {} + control['stop'] = False + control['pause'] = False + + self.control = control + def __getNewId(self): id = int(self.id)*10 + len(self.procUnitConfObjDict) + 1 @@ -525,13 +649,22 @@ class Project(): def getElementName(self): return self.ELEMENTNAME + + def getId(self): + + return self.id def setup(self, id, name, description): self.id = id self.name = name self.description = description - + + def update(self, name, description): + + self.name = name + self.description = description + def addReadUnit(self, datatype=None, name=None, **kwargs): #Compatible with old signal chain version @@ -550,7 +683,7 @@ class Project(): id = self.__getNewId() readUnitConfObj = ReadUnitConf() - readUnitConfObj.setup(id, name, datatype, **kwargs) + readUnitConfObj.setup(id, name, datatype, parentId=self.id, **kwargs) self.procUnitConfObjDict[readUnitConfObj.getId()] = readUnitConfObj @@ -574,12 +707,30 @@ class Project(): id = self.__getNewId() procUnitConfObj = ProcUnitConf() - procUnitConfObj.setup(id, name, datatype, inputId) + procUnitConfObj.setup(id, name, datatype, inputId, parentId=self.id) self.procUnitConfObjDict[procUnitConfObj.getId()] = procUnitConfObj return procUnitConfObj + def getReadUnitId(self): + + readUnitConfObj = self.getReadUnitObj() + + return readUnitConfObj.id + + def getReadUnitObj(self): + + for obj in self.procUnitConfObjDict.values(): + if obj.getElementName() == "ReadUnit": + return obj + + return None + + def getProcUnitObj(self, id): + + return self.procUnitConfObjDict[id] + def makeXml(self): projectElement = Element('Project') @@ -705,10 +856,28 @@ class Project(): print "Every process unit have finished" break + if self.control['pause']: + print "Pause..." + + while True: + time.sleep(0.1) + + if not self.control['pause']: + break + + if self.control['stop']: + break + + if self.control['stop']: + print "Stopping process" + break + #Closing every process for procKey in keyList: procUnitConfObj = self.procUnitConfObjDict[procKey] procUnitConfObj.close() + + print "Process stopped" def start(self, filename): diff --git a/schainpy/gui/figure/.bash_logout b/schainpy/gui/figure/.bash_logout new file mode 100644 index 0000000..de4f5f7 --- /dev/null +++ b/schainpy/gui/figure/.bash_logout @@ -0,0 +1,7 @@ +# ~/.bash_logout: executed by bash(1) when login shell exits. + +# when leaving the console clear the screen to increase privacy + +if [ "$SHLVL" = 1 ]; then + [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q +fi diff --git a/schainpy/gui/figure/__init__.py b/schainpy/gui/figure/__init__.py index 734c20f..e69de29 100644 --- a/schainpy/gui/figure/__init__.py +++ b/schainpy/gui/figure/__init__.py @@ -1 +0,0 @@ -from figure import * \ No newline at end of file diff --git a/schainpy/gui/figure/add_PU.gif b/schainpy/gui/figure/add_PU.gif new file mode 100644 index 0000000000000000000000000000000000000000..daee0aba5a832169c46c93feec6a24f00c5d9702 GIT binary patch literal 4831 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 EA9NF%A^-pY literal 0 Hc$@NSs56Z83KGlT!G@EKrEiaAd$-;mCvA1!k|{gpi#qM)WTrV#bDdV;4y>2bEd50 zBze~<48e;SLKZW`tzn2?%b2x|wP>Gw@-o%nIjV`vlrvUqCM?xYU#XwJ)-ZLsN&Xtk z$+|BwOeiLx3iTTU@tw$S$>GC;s{UGQQqof z{BQ8!RuXQNf;8?Lqu;G+b({|_P9j?tgJeqfSw(js~-Ra%2%d2CzZ^tg5u04J| zK(sfgZ*O4VzL4Jip%eCnOxPdPe;|0`f#Au9!loPypLQr}`l0x_$D`(+NSJpfch=F& zc_$JUo=RGDDrv#lq~+&Qm!C}mk}J-qt-6r0^g_m(iy3P!Wv;uNweCvpic5K`E)}f0 zRJ!hR&8iDk8?MxBxKg+ITJx5x&D*cHZn@gD?MCB{8|}MpcJI8|wf9c{{@Zi*-0VMi zck+zRg&%XY8 z{`L3sZ@*uB`^_*4r~$s8O+Ez7Ck!P)e!>4oHed+;&aMg!63zmT$YKTtzQZ8Qcszea z3Q$n8#5JNMI6tkVJh3R1As{g`uSCz!HAJDzSkF|?)U)f)1E8X>o-U3d8o|jw{@-U| z`SP`7%T^QDfB(~eRv{Ojw!5DzijQ8U0rEpWOOTalko?UUnyUl`|zJEXgjIP^gpM7ld9RXU|R1>}H)bPGsItArp3NJ^(DNWSp= zzR&mfUhjYJy?gC7yR)-9bI;8EnR{-(-7W(#RV9QH00MykmAeDD{SGJq5HR@uyc^KF z6Acp$4GKlW#=tjB~~!ejMI5+U1-fFaL#|%9Y*^7{$eC1L$FHDycZJlcr72Kw{opdU|6^ zWBr!^fRAfko)s6sPS)#DHGKX8L+|_yqN?p+LZH z0$J%uH-P@hXQPEWC!}UkY}-yaOd#t=t9F?nA08+EzF{fc!EWRS#Ww(;xqLjyp=qE7 z3SW}kn#?D+mx5;%Rn4_Km9*=GrD`(B-dT}#QUBw?6IsYubyXF0dwfmS$Z2)Kp@}j} z-lO0RM^iifS^nzn_DK5OWk8J&0w%>fa~5(hfBGac_YNNfa3>!;dpNpe{=X{RIxXb`=6hJU3W+Q{e{*6T#kuNH(TBFr#nxm z&+g^$ZG|^0a)pKq0sKb)xUDsXh<5+ezg2gtfQFG%Y1wZA&QII#G<)E65%kTKQs;Q* zPDV8$@3Mx%M<<@VdtA8GyfE{@riv9bsC@P2fn|C)t8~1%!NS zq;x(m8kw{hPdk~GTIyw`9(TNnKMDIM{D9^$#}BsN+9@ZEW%2dV|40D9%ex@vfZc^S z7zDk${3p=S?t>T|1AxKlcnR;ajgOR`fk{^2E~+u_f*phg{xix+m-tsNP)qe^O;>7Z zxz$(C-yTOP^TAQ=PZnk*g(vZmOCp{e#I~2IiaOMmH6x;PIHI=WqMTSGuy_`!`i9{H zB>{nXedl5O__zj+v#nW91Ke-T$J?NFVo%Bzm9JD}o9~{k16t9^VMkMLq!s8SEl zHHlH=`l_t|W>vHPGoJtC*aHc*55LUP*$qGNKG8MJgzjpS?|E8>l(%K0%W5iHF(FPO z>4d|_9r?PPE(j~l7T5Zeh7?>eDo5W}UvBhz`FReBwWCX6dL~Y&`CWs4m*;-)I<)H9 zoin!L_~KUTkZne2qD%fa+BLVvgLux<)(?+K8P1)LB z+c+KJ_7|R##TgF`I6ggG|HYZUB-7<2si8r3ILJC&_Li-;qtfPdZw*x}$qLu%&p5Re z`>k#hfn&t&H1u3~u_X}_Mnf{?7JDffSDL}~fvf%fR*u!AlAp|l19vE{760=#siCsk zOG5wcg_pYvyRC!Ihs?4(Y{Q4uClm^gscwNFvPjPfI{llicSJERVZQ!;1I3yKZO?gI z)~|H6mXB}R-rfQumQyWjA{s9}GV4H^=3@=!n}~!y+p%V*KaLZakJ*mJ5E!Z3C>-B7 z+a*6vrf7B5`I?um`NU1(=lkOL<>{w0&{dKQJAd75_Na$1onCk+3^_0@r>-tBRL*Xr; zDZ|d_T(=ObQlfQiS>y9Z`2FIT2wpBzJFkleanMQY!b0-yj*CCd$5}UzZ`p)FG;h_l zdfHzp>Xj+Ao56cYF;IuJE&UZ};NaB2DM@pExD-WA0 z!?Rl;>Mo&};Q$B%MhE{dY}`QsoRAMjN6#yVWRQjM%X|EjOLx#A13Kfx6!()`-rkuu zwWtUgX@;tPecg{Ke40NA7NoGzVR`;=2GJ|BOU>@9BJSP2We1LEiR;$U!p7Rr=3~sG zW@5=E>QHCnX^$Smvm-s>qtfIJ^A}t4!^DKg=O;=)gG*jlfQ6~bD;f92hCv3xW{QvJ z3R8x=ot9r zkWfb1BVqvykC5ad`JR8K3w%FazjLwD%3(GkH{pUA$iOmGYkfw8&_0zdb*mh6yhiL; zWF<9GSJYqJ2t29@HDmUyFJp$&2VXvZS!{n!Dgi%RDD$f#)O3fgK>E7gg`1`cxvfjq zXPwqRCFH;C?ZGg%Chz?s05kQ$1iRO#vh&B z+es_*b7b%8^zzKZiPF|Dse*du=!$GEzH5^EW{~ zz2kg~{#%3Y0pk;)nAKFg(qRWv6BS=^T&R9qSg2m$Eik^_jWi5Ibut)J#LE$xdRB*G zRXg7hc{QI2Ce}47;-;59#{DW*kCBD7{YtFTs*^RE|2w;!NUj_Kf0NWNlzH`!Xx6~K z9CcXlHY%-E*j>Y`&H9D!^rBGAu99C0D4-x&aMh{WouvEG75l@MhGagCFE5fri4Jic zy_BP}JVX_Bw0Kyss^vqs>V(>#jXWg~YF8Q{%fAJXMvRIzOVaeG^B-c?;NHj#JZKo-JG zhU44P^C>qvwU6Dmt}p3+#YC=CU7HppFRe!PNGy-4OXMrgm5~>fI z-yr^-lAm9SgH4%J(h7G66C>!jq3kS2${MQ3`XmlS#Hcl@!q@0jthHB!EQDRbGvZvhwK0G=2yryHDrYLSH6iv50Dx{R`B3SwU;)BVt% zPdo}vUJ#EvikTBKPscEMKWFd@jpo?W@rCh|5##aJE$p&L-a4MBpW`{GXU=p5yNA?_ zTlJn*Et;dvc|yk(FJRgwwsyuUJWS8@n#8w{s=E+~1rv{|8Jd*TrxH)!56y~_Sk9!M z23s>{JCvann>3)BcWa0x>8tWtOl$^oIX<^l_Bqp!Ra|BxPIuk6x(WB_Yd~MQXGt@@ z%Qm8_zJMBgT(AS4WmP<37+O-P-nwAQdyj=$@o_(&ISjWmEAVTx649;bWk<7T2X=D{hZPwt#g^4+J- z*=3Ds1}pH#D-kc=l|0KlKTK4w~b%n2oiO6 z@se(ksPRDVS>rCll?W%C7Zw{GtMNO?EBEcjQTtD#O;Bd39T5=ja6Ni-WgIwrVAtTG zsH!epaNd+@#o0c`6>Du&f}urGPTml)*y7qs2Q74upEb|dK71C)(d%L&5kj?^9C(RKdRK7zqlE5l&BKP4K z^F!#%I6HYAYr1mhc5S@_l>99qSe7C0GGd#ujBkL$vU4!#Ej^-0yz8Ur!wKKSGnf%6 ztX309jaGPFp`l+5!K9vL72TSB?JewwgM1_%qdOU{CZc*MBuU3%b7rfXM|>G!?Z)T7 zo_rMJ=ta2&?ctZy_v-MBeC1#Rc0EhTR=E2!0<8oGmA6g-D-}>j4H%#=_WBT&M01K z@oL&DrQfs-lX*xGd%$RUnNLoTPPM-NWsC!=xsi;tlAX-pAmSY~Mkz*t{X@gyQ?>bhans*dW{^-B(YeO3j5!;RWwj6l`b0GX6WTN%%0QBjDywb89KU+;yc>4ubhcW ze6jm?w|;9Gt#X{reaBLM5o<{xmzGpiv!i89Z9@(td#T% zwlT31^x&q;jqM!-w@o&%+2I@x zZd&Zpqp`()nB!{vkyK~eY~p!ka&o$~r&CjHEP~TS4MdQf_3g}Cz`k@uG)uMgfu(AD zO0KnEw}7jRHD6^ul7pHjYi}>%K)3n!yJ=GoFG7wS> zPbC`n7!?!xW}#a+tI+NIj-~ZB&dm<+`on1>jYJr+8|-e^2Z7ve64CxG z*5Cj=pB&Nx#_JJ6ms})U*K>3{@$ddnhW_ByY6Qf`VI)A2%Q0lxOm$p3^mzUEfby5f zP~S(aM3R4|B8&4D2+{a$_0~6FhYYCF(;Ww<;tW1!2AyRS^r63)RH&!Hq8&KtZeLB$ zo-UN~PtoU`FKCH&d`%7n{KQ#8EyH4QTgY+KJvpfGjk))VV*J^Oe!5S}17Gtwf;g2Q z^6Zx=wyR=<$EX7cPV*9-`h(MC*w?J5dF1WWk9MBol8)(t(wpNCEFy_JDRm=$k!zX= z3zsXM+H#NoRlF*i&T(xqHRzrBhENoFBw432=C6XCnV5|BY2wh>6#CfkqsSSGV`&5P zCAU35rTxN1wi^#H#HP?;nY8hAVWkzuHe!e6XDiPWmszLJu9b@Ge(RQMEI#^%&*eE@ z>N%-b$d}PM^*|UK=V8+>U00fi9$k>wOJXPXOfBwPAeQ01C-aBngN8*a9EZ>SeZjU# zOA4X(Jb55Oa*Z2#WnJ(KdWu7^qhJVw7O5)!xgD_`mgpb_xs}cMF4}eEUPST7_d0FW zcw}XNcM!YuMD}==|qJ zkd?*ItT}vez9gVRpzo!nvTR%CEOTz&f8E zTJN7fBu#SS6wk5y&s5!5J}kDIyU*dSYADwCJjz+;TV@JmYYR!EpZRnW+hZ@$OgLa` zP!EY%WtrYRS|fX9o+P_0jRW>Uc`Xtxx+_0UtS$+^p4NAL2>&A#A7k{QlWd|6TgBhA{ER-;gK+Z! zm4kWR8Fi^;|G#wdw2z5)p=G%XaqS9e0EeI=Yu&^}2Z$JujRQjwQm zi+4Z7W(9_DkvVSIJR7iPstr$Rb^D!32q~c5_tn??YSyEg0V%ROCdm`5o5M2iWRO2Y zuBO5`oG?*bZRwBJ?BDqf{;ZZ7Yq>CvAYZ;td15}ZcnkPfYGr8XgR>&FNa%$6-|tji z$G`aw4nmB}8S=D=V1CHAX9G_O^_Lonb%ngZw`=UiaT&w>$mNGWgAV4w3$%vMrvlnDZ+58J z9${ZqHlhPmv_=0mjRDBr0t-t)Fr}!_-Ctj7r^o@p2&QDCpL>{e!E#I~6ii`5B7_KN ziWUR^F;fZxxEw0+ynmlow1*<=j*xqiB5OR6eaGrZQF)c26`o>7oPxkiRoMy_DoH^Q zrVudn-gB8#5Y}r(cLb9TLNJcvo_K&@O!dDfLWh|gAKnwG2&Q0*dm?F@DS70ch>c@P zQM>Pw#7ErSHl}DUHsAdeA)TsfeXlTrS>m5hr6BIGgB^a49Uye{|8_(E2RmSNyhw{9 z+57GNN?p&y@qZg4u;WZ~H?{H~@A!%~R`_%b@f@8qKmUyd-3 z=s2#0miCy==j=@03tOC@f-P$#^}xpYaRuotT)*A~5ZTl?UGJqCN2C_;Yqz|ieBiwq z$gx-QcPSWCm@=oXUiNKgbfjOTO;rTO!+i)Oz=k*I45c*s^zn~_XG}>`mVe**iCS3?D}y2rwJIpve}qRiU5_h_Nmc}_UUDI!Rvq>9GIDk%B z#cN`QQGn$)qGma8S^u{Thvz*jR44@_e>AL=W(QN@{1KsS-GIyLE26rRv`RWGfP+w2MA;srq&lwh|>hrdbv!Vm5^7*NR;m@rKX44)t=0WExKC% znZshm&Wfb^zM-wf7ktq36Sc-7A5`~C$;GcGl(kY5MhV&@ewDK4Q_|y4pJ@6(0`|#Z zKQV?)v)g6#Ar*^?Zol`J?{v)s!)jp~8H)r#bF~%Pq&!mT$xY3^)8szl0f? z?OVppdIHCZjAs$NY8No2r~6oAq=7#+oiZHVlrzXbpnsTWC5vO+G+7E*!uFt9_1knc zdfz3b{u%QizV!qddNEUEVeV98$Vj)Tf?68l4@>!Z_7v$AEk!6Tyf8?K2{rS#_POY< zVowdg2YI1x*pmk?FMpHL5(Z>SKdZ$$92N4m{yL)ImfZk%Ybqr8dzG{Ou{`^iE{~L|O1OvM@O!N=+h3AG;kc)Y2)+@Au?q z%F<8eCM8vTK!-3h_pwAqCj1X%zKZek?`!Ron@8XHIY*DW+r1Z z?RHWhc31usVNW@HK$ z_DF}mgqo*u%shubh$*e=mdqAP5DZ)ez`rAN(H|kP0r53^7u*n}60}XzsPBXiLHua$cN8|I z5t0tvycV&qp0uo6m=MfyE=)O9%LIN6;JbxtzapxG_{oieF^xCE9}gX+EQ<)LRJIPJD@eA1q5w{kPV+f zntBr9zCyNoQSsXHCwy}hCKkK2?#iVYXx5?uqa%#SP_|mwm$5FwMhO*w5%9)RTK1U;vXB z&7SA0;;iZ0?*(3Hs+}~Pvy`M+D!c5w>#KgLgT{dC1q8)eoAq6xZA~3%xIDHSfGplm7FLgF8&IU5(D?Na1!3M_C&lG z3X2z+`aP;EYpvBnNokNZXN9pLSvc@Z|D#@xbsl+U0ikfDKK5FZ3?I5jU&s-;RJ4Oi zDNz@+ISQL%KDE>C*e7;qgLLRs@es}^p<%K(0@TY-$(ut$r|lk1!97|;H)pPwi9uw5 zVwQbGE#k;mLY}>ws0GG6)>ngtV}eYhL5WfzD@SzdVi8q*=>FID+Yiyn2tvq3Ftd2K zHmHmq#V~(6@A_izqugo^t_187ois* z5a>^yd-#0Qb1ZK>KElwp2728@;ulhO8@%E8#17Fr6+O=4rz`Fbwm!@eDl=lvcxNHZ{JWm&M6py zd>&8Nl5yMB&c)Eyua*|}3$HW#XZcfp6exd;7y9M0lRt9HnuHG=n(**}J8VrfN};Ld z$?@KwW@ z{D{$eVNgKKfBvP|&9%Kp>=WS7Zz1~cx|3xR`PUPxQT)Fc6Lil(k8m2hA5hlR4RfmY zlIVGEEc$-mTmWgS8^4=^DY{~8OG7`ib~jjeUR195=Z4S_3Ak|xn;{rsv8hNE9e^5* zL?9UbpGA%BvN%J)V~$_7eD0BS4x=X0#m`hL?#J72iwX(d-KtMpR*HzsqVe1Z(7`7Q z7-rktMC|4!m-sAb4wKcvLFl?qD`Lwz%pQ{70<2hxN=#@f8}8I)vH42RZal6o``TwE;$U=@3(;4RF}q>Fa6b#n0R-T z9OdOPpMI;cZep95t(6+$xExDltUc3kK z>fl%}o21~KBtl24-)pM@?6fGmLsNbQ>t{jOW=BF>>!dDbP84{yV`sfe(Q9?G9r>jq zU0hx|E4Cy&6sAG)`xg0XZ2U(KW}z78SP_3#8IW+{EOquD=$?(0nJhbMV4VJnC2OyP=ceEw{!moPFyE4 literal 0 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 diff --git a/schainpy/gui/figure/open.gif b/schainpy/gui/figure/open.gif new file mode 100644 index 0000000000000000000000000000000000000000..117ecbccbe2155288e6df00ead02954c249da2f0 GIT binary patch literal 46061 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 literal 0 Hc$@RWX-|g__ z%NN()vT4(%T&qg0ub-?gGD!tB<%vnH>JA+`)L4CX)v8r3?X~^g1U7Em*vHz=vBz?g zGLt;@mDHyJ59?-=YLnCUUbSY;nuh-ifejlrbhS1W_K4)u9{K$Fvx}c&@L5?|)bTS4 zjV4>{dCS_hYny%uf%WUxXPfTd?Xl9N0FaW_)>bc{K7FEwfJlVky<}%+yPTXHY6Kz@ zRO{*A^!Kh?x32YnMxe5?GG%&I_E?O*0Dt`W(aVPq9}xeXo15#pbm`*jyu3U|X>M+I zEiEnX-Me?b?%1)T>(r?e!ZRX58j;_vo?~{OWWtt{Nx?i(@)dj`Ud77-3?M-F?c3Ll z968br8#c^!?b41~Z<9g*t=E_CJPd zV1So?{rY*GDO0AndGqGEMT-{Ehx(&$Zv$J{#5NedD}*d7EVk+p|Htci8Ul@tjUGfv zNr~&-ySMjv_wL>CBHr^MAPF;)=7dJ^{rmTfps$}jd*&`(y5vVCKR=)FV`S7H&Hrjy z@0T`@!0OejOU%$7;#{Hf=FJ;F{F5h7c4cK{uBfO;o_0NY^dR1S2z2h;ITTM!btv7s zb#uLX^+LQuX3w6@$Y29o*wjckuz;ye1Z;6hS%WH*F7gy!hs=x_Gu+s*V*w5Ui~~-S zQO|l0YY94dSOh)so;`c|Q7kSlcC%*9!WK5YZ7_fZOkn%wBwo34Wws`)CM$6X__=fE zx;}mS03Po#ym1;-x(pYqFpR==Lg`fDNjv{OV#EmF|FL7oAc4LnccI~`GK`ZpZ{FOR zjsQ%_^TilY%p*)vz!NTbO2$L*@gfzKm;jQtz3Q1WXS!3TPR0F_#=*EdCg4`ASkaY~ zuSrG>5|7iSO;dIOJirBBBam)oO_F#ePAin*!-u=+)2F+0=gvu2b}J3*FI%^6Z4v=_ zzk(H(a3S_sd`NMlMvZd)`}b#}3VgWesE)yh&q<+_mIy_oG-1L7cmMuvJqJb; zu>L~?-16ni*_c&?DGnjy;B_Wz3|=EZNfY-OH*+FEVWNlNC15EnEp>bL?9pmX8|+mW z<{jI%ZEJu4%Ck-K75jwGm@#9>^Ip_gzy*H){{14XiRm-Tk|j%$))o>1{i6>kG7|eN z@0<`kSoj|c;J9()+?_jj(AP-hn}Jy-`yoK5v&2|?8Wt)RDKY|$Vv)DBxY17DOe*N3 z%c=`$yv~|Htr!=0jW{Hjhc|BAz=lR0{n?(tvSrJ1tx*|`v~U#^6ae0PKaTk@V^G4) zTpJ3&wF;-rT-XT-kV07}NFogl4ZI6O8Q617nUhqWc9$3!I&>(^S=K|q@diyfTqH8i z0};grBNt{dwH1Mw1na|v3l|7cVaPN6(kxT_Ny8=*D5HcSN>bW`03uKdzoa6<8UZ9E zE|H@|5CY5t+JaI0DzHPKDA?Z9@rsJq|}80l++*!ned3H zla@%x``;uG>MDGAk4Heyp@4_T0Hg4NJtrIiYLwE&d%AMv$`$tV5CJ$jTO`wpJkJ*8 z`Sa)6h9{}V7)a^yr9lb;E)q44J4;N9PoF+@b#-y%4h?^=exiLyhwosAKy9Fml7=XhL_pfd6AId;saG_$u*{^#Op>eQ*EJ-ifO7fN(s*M#KROF~K17xk^nkcX5G$tdJ>NkU1~54|3P$Nrf!XF_ZW;a@SJ6WOmO|Kz$HBMkM` zt5@BmNt1Nf1A%aVeyP4mcc)5G@=+V}%Kit*PK-VOAXV

Select a workspace

\n" -"


\n" -"

Signal Chain stores your projects in a folder called a workspace.

\n" -"

Choose a workspace folder to use for this session.

", None, QtGui.QApplication.UnicodeUTF8)) self.dirLabel.setObjectName(_fromUtf8("dirLabel")) - self.gridLayout.addWidget(self.dirLabel, 0, 0, 1, 2) - self.line = QtGui.QFrame(Dialog) - self.line.setFrameShape(QtGui.QFrame.HLine) - self.line.setFrameShadow(QtGui.QFrame.Sunken) - self.line.setObjectName(_fromUtf8("line")) - self.gridLayout.addWidget(self.line, 1, 0, 1, 2) self.dirWork = QtGui.QLabel(Dialog) + self.dirWork.setGeometry(QtCore.QRect(10, 90, 91, 16)) font = QtGui.QFont() - font.setPointSize(8) + font.setPointSize(11) self.dirWork.setFont(font) - self.dirWork.setText(QtGui.QApplication.translate("Dialog", "Workspace :", None, QtGui.QApplication.UnicodeUTF8)) self.dirWork.setObjectName(_fromUtf8("dirWork")) - self.gridLayout.addWidget(self.dirWork, 2, 0, 1, 1) self.dirComBox = QtGui.QComboBox(Dialog) + self.dirComBox.setGeometry(QtCore.QRect(110, 80, 501, 31)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) @@ -61,15 +54,17 @@ class Ui_Workspace(object): palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) self.dirComBox.setPalette(palette) self.dirComBox.setObjectName(_fromUtf8("dirComBox")) - self.gridLayout.addWidget(self.dirComBox, 3, 0, 1, 1) self.dirToolPath = QtGui.QToolButton(Dialog) + self.dirToolPath.setGeometry(QtCore.QRect(620, 80, 101, 31)) font = QtGui.QFont() - font.setPointSize(8) + font.setPointSize(11) self.dirToolPath.setFont(font) - self.dirToolPath.setText(QtGui.QApplication.translate("Dialog", "...", None, QtGui.QApplication.UnicodeUTF8)) self.dirToolPath.setObjectName(_fromUtf8("dirToolPath")) - self.gridLayout.addWidget(self.dirToolPath, 3, 1, 1, 1) - self.horizontalLayout_3 = QtGui.QHBoxLayout() + self.widget = QtGui.QWidget(Dialog) + self.widget.setGeometry(QtCore.QRect(10, 120, 711, 121)) + self.widget.setObjectName(_fromUtf8("widget")) + self.horizontalLayout_3 = QtGui.QHBoxLayout(self.widget) + self.horizontalLayout_3.setMargin(0) self.horizontalLayout_3.setObjectName(_fromUtf8("horizontalLayout_3")) spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.horizontalLayout_3.addItem(spacerItem) @@ -81,30 +76,32 @@ class Ui_Workspace(object): self.horizontalLayout_3.addItem(spacerItem3) spacerItem4 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) self.horizontalLayout_3.addItem(spacerItem4) - self.gridLayout.addLayout(self.horizontalLayout_3, 4, 0, 1, 1) - self.horizontalLayout = QtGui.QHBoxLayout() - self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) - spacerItem5 = QtGui.QSpacerItem(438, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.horizontalLayout.addItem(spacerItem5) + self.dirCancelBtn = QtGui.QPushButton(Dialog) + self.dirCancelBtn.setGeometry(QtCore.QRect(490, 250, 111, 31)) + self.dirCancelBtn.setObjectName(_fromUtf8("dirCancelBtn")) self.dirOkBtn = QtGui.QPushButton(Dialog) + self.dirOkBtn.setGeometry(QtCore.QRect(610, 250, 111, 31)) font = QtGui.QFont() - font.setPointSize(8) + font.setPointSize(11) self.dirOkBtn.setFont(font) - self.dirOkBtn.setText(QtGui.QApplication.translate("Dialog", "OK", None, QtGui.QApplication.UnicodeUTF8)) self.dirOkBtn.setObjectName(_fromUtf8("dirOkBtn")) - self.horizontalLayout.addWidget(self.dirOkBtn) - self.dirCancelBtn = QtGui.QPushButton(Dialog) - self.dirCancelBtn.setText(QtGui.QApplication.translate("Dialog", "Cancel", None, QtGui.QApplication.UnicodeUTF8)) - self.dirCancelBtn.setObjectName(_fromUtf8("dirCancelBtn")) - self.horizontalLayout.addWidget(self.dirCancelBtn) - self.gridLayout.addLayout(self.horizontalLayout, 5, 0, 1, 1) - self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): - pass + Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) + self.dirLabel.setHtml(_translate("Dialog", "\n" +"\n" +"

Select a workspace

\n" +"

Signal Chain stores your projects in a folder called a workspace.

\n" +"

Choose a workspace folder to use for this session.

", None)) + self.dirWork.setText(_translate("Dialog", "Workspace :", None)) + self.dirToolPath.setText(_translate("Dialog", "Browse...", None)) + self.dirCancelBtn.setText(_translate("Dialog", "Cancel", None)) + self.dirOkBtn.setText(_translate("Dialog", "OK", None)) if __name__ == "__main__": diff --git a/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v44.ui b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v44.ui new file mode 100644 index 0000000..02e8a90 --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v44.ui @@ -0,0 +1,1765 @@ + + + MainWindow + + + + 0 + 0 + 1065 + 711 + + + + MainWindow + + + + + + + Qt::Horizontal + + + + + Qt::Vertical + + + + + 0 + 278 + + + + + 16777215 + 16777215 + + + + 0 + + + + Project + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Project Name : + + + + + + + + + + DataType : + + + + + + + + Voltage + + + + + Spectra + + + + + + + + + + + DataPath : + + + + + + + ... + + + + + + + + + + Read Mode: + + + + + + + + Off Line + + + + + On Line + + + + + + + + Delay: + + + + + + + + + + Walk : + + + + + + + + Search 0 + + + + + Search 1 + + + + + + + + Load + + + + + + + Set: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Star Date: + + + + + + + + + + End Date: + + + + + + + + + + Start Time: + + + + + + + + + + End Time: + + + + + + + + + + Description: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + + Voltage + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + + + + + Value + + + + + Index + + + + + + + + + Value + + + + + Index + + + + + + + + Profile Selector + + + + + + + + Profile List + + + + + Profile Range List + + + + + + + + Decoder + + + + + + + Coherent Integration + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Code: + + + + + + + Select Channels + + + + + + + Select Heights + + + + + + + Filter + + + + + + + + + + Radar Frequency + + + + + + + Mode: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Barker 3 + + + + + Barker 4 + + + + + Barker 5 + + + + + Barker 7 + + + + + Barker 11 + + + + + Barker 13 + + + + + Barker 3 + Comp. + + + + + Barker 4 + Comp. + + + + + Barker 5 + Comp. + + + + + Barker 7 + Comp. + + + + + Barker 11+ Comp. + + + + + Barker 13+ Comp. + + + + + None + + + + + + + + + Time + + + + + Freq 1 + + + + + + + + + Graphics + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + ... + + + + + + + + + + Scope + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Channel List + + + + + + + Show + + + + + + + Freq/Vel + + + + + + + + + + + + + + Path : + + + + + + + Prefix: + + + + + + + Height range + + + + + + + Qt::Horizontal + + + + 40 + 12 + + + + + + + + Qt::Horizontal + + + + 18 + 12 + + + + + + + + + + + + + + Save + + + + + + + + + + + + + + + Output + + + + + + Type: + + + + + + + Path: + + + + + + + + + + ... + + + + + + + + .rawdata + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Blocks per File : + + + + + + + Profiles per Block: + + + + + + + + + + + + + + + Spectra + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + Select Cross Spectra + + + + + + + + Value + + + + + Index + + + + + + + + + + + + Value + + + + + Index + + + + + + + + + + + + + + Remove DC + + + + + + + Select Heights + + + + + + + Select Channel + + + + + + + + + + + + + x-y pairs + + + + + + + nFFTPoints + + + + + + + Incoherent Integration + + + + + + + + Time Interval + + + + + Profiles + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Radar Frequency + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Profiles + + + + + + + + + + + Graphics + + + + + + Coherence Map + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Tmin, Tmax: + + + + + + + + + + + + + + + + + + + + + + + + + + + Prefix + + + + + + + + + + Qt::Horizontal + + + + 28 + 15 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + RTI Plot + + + + + + + Height range: + + + + + + + dBs range: + + + + + + + magnitud [0-1] + + + + + + + + + + + + + Qt::Horizontal + + + + 49 + 15 + + + + + + + + Path + + + + + + + + + + + + + Power Profile + + + + + + + Freq/Vel: + + + + + + + + + + Cross Spectra Plot + + + + + + + ... + + + + + + + Channel List: + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 39 + 15 + + + + + + + + + + + Show + + + + + + + + + + + + + + Wr Period: + + + + + + + Save + + + + + + + + + + + + + + + + + + + + + + + + + + + + ftp + + + + + + + + + + + + + + RTI Noise + + + + + + + + + + + + + + + + + + + + + Time Range: + + + + + + + + + + + Output + + + + + + Type: + + + + + + + + .pdata + + + + + + + + Path: + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + Blocks per File: + + + + + + + Profile per Block: + + + + + + + + + + + + + + + Correlation + + + + + + 0 + + + + Operation + + + + + Graphics + + + + + + + + + + + 0 + 0 + + + + 0 + + + + Console + + + + + + + + + + + + 0 + + + + Project Property + + + + + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1065 + 25 + + + + + Project + + + + + + + + + Run + + + + + + + Options + + + + + + Help + + + + + + + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + Save + + + + + Close + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + Start + + + + + Pause + + + + + About + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + openToolbar + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + createToolbar + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + saveToolbar + + + Save + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + starToolbar + + + Start + + + + + + ../Documents/figure/stopServer.png../Documents/figure/stopServer.png + + + stopToolbar + + + Stop + + + + + + ../workspace/branch_gui_may/gui/figure/pause.png../workspace/branch_gui_may/gui/figure/pause.png + + + pauseToolbar + + + Pause + + + + + + ../addpu.jpg../addpu.jpg + + + addPU + + + + + FTP + + + + + + diff --git a/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v46.ui b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v46.ui new file mode 100644 index 0000000..789d5d2 --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v46.ui @@ -0,0 +1,2179 @@ + + + MainWindow + + + + 0 + 0 + 1065 + 711 + + + + MainWindow + + + + + + + Qt::Horizontal + + + + + Qt::Vertical + + + + + 0 + 278 + + + + + 16777215 + 16777215 + + + + 0 + + + + Project + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Project Name : + + + + + + + + + + DataType : + + + + + + + + Voltage + + + + + Spectra + + + + + Fits + + + + + + + + + + + DataPath : + + + + + + + ... + + + + + + + + + + Read Mode: + + + + + + + + Off Line + + + + + On Line + + + + + + + + Delay: + + + + + + + + + + Walk : + + + + + + + + Search 0 + + + + + Search 1 + + + + + + + + Load + + + + + + + Set: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Star Date: + + + + + + + + + + End Date: + + + + + + + + + + Start Time: + + + + + + + + + + End Time: + + + + + + + + + + Description: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + + Voltage + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + + + + + Value + + + + + Index + + + + + + + + + Value + + + + + Index + + + + + + + + Profile Selector + + + + + + + + Profile List + + + + + Profile Range List + + + + + + + + Decoder + + + + + + + Coherent Integration + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Code: + + + + + + + Select Channels + + + + + + + Select Heights + + + + + + + Filter + + + + + + + + + + Radar Frequency + + + + + + + Mode: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Barker 3 + + + + + Barker 4 + + + + + Barker 5 + + + + + Barker 7 + + + + + Barker 11 + + + + + Barker 13 + + + + + Barker 3 + Comp. + + + + + Barker 4 + Comp. + + + + + Barker 5 + Comp. + + + + + Barker 7 + Comp. + + + + + Barker 11+ Comp. + + + + + Barker 13+ Comp. + + + + + None + + + + + + + + + Time + + + + + Freq 1 + + + + + + + + + Graphics + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + ... + + + + + + + + + + Scope + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Channel List + + + + + + + Show + + + + + + + Freq/Vel + + + + + + + + + + + + + + Path : + + + + + + + Prefix: + + + + + + + Height range + + + + + + + Qt::Horizontal + + + + 40 + 12 + + + + + + + + Qt::Horizontal + + + + 18 + 12 + + + + + + + + + + + + + + Save + + + + + + + + + + + + + + + Output + + + + + + Type: + + + + + + + Path: + + + + + + + + + + ... + + + + + + + + .rawdata + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Blocks per File : + + + + + + + Profiles per Block: + + + + + + + + + + + + + + + Spectra + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + Select Cross Spectra + + + + + + + + Value + + + + + Index + + + + + + + + + + + + Value + + + + + Index + + + + + + + + + + + + + + Remove DC + + + + + + + Select Heights + + + + + + + Select Channel + + + + + + + + + + + + + x-y pairs + + + + + + + nFFTPoints + + + + + + + Incoherent Integration + + + + + + + + Time Interval + + + + + Profiles + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Radar Frequency + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Profiles + + + + + + + + + + Remove Interference + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Mode 1 + + + + + Mode 2 + + + + + + + + + Graphics + + + + + + Coherence Map + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Tmin, Tmax: + + + + + + + + + + + + + + + + + + + + + + + + + + + Prefix : + + + + + + + + + + Qt::Horizontal + + + + 28 + 15 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + RTI Plot + + + + + + + Height range: + + + + + + + dBs range: + + + + + + + magnitud [0-1] + + + + + + + + + + + + + Qt::Horizontal + + + + 49 + 15 + + + + + + + + Path : + + + + + + + + + + + + + Power Profile + + + + + + + Freq/Vel: + + + + + + + + + + Cross Spectra Plot + + + + + + + ... + + + + + + + Channel List: + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 39 + 15 + + + + + + + + + + + Show + + + + + + + + + + + + + + Wr Period: + + + + + + + Save + + + + + + + + + + + + + + + + + + + + + + + + + + + + ftp + + + + + + + + + + + + + + RTI Noise + + + + + + + + + + + + + + + + + + + + + Time Range: + + + + + + + + + + + Output + + + + + + Type: + + + + + + + + .pdata + + + + + + + + Path: + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + Blocks per File: + + + + + + + Profile per Block: + + + + + + + + + + + + + + + SpectraHeis + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Clear + + + + + + + Ok + + + + + + + + + + 0 + + + + Operation + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Time Interval + + + + + + + + Incoherent Intergration + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Graphics + + + + + + Prefix + + + + + + + ... + + + + + + + + + + + + + + ymin - ymax + + + + + + + Tmin - Tmax: + + + + + + + Time Range: + + + + + + + Wr Period + + + + + + + Qt::Horizontal + + + + 134 + 20 + + + + + + + + + + + + + + + + + + + + + Channel List: + + + + + + + xmin - xmax + + + + + + + + + + Save + + + + + + + ftp + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + Path + + + + + + + Show + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 106 + 20 + + + + + + + + + + + + + + + + + + + + + + RTI PLot + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Output + + + + + + Path: + + + + + + + Blocks per File: + + + + + + + Type: + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + + .fits + + + + + + + + Profile per Block: + + + + + + + + + + + + + + + + + + Correlation + + + + + + 0 + + + + Operation + + + + + Graphics + + + + + + + + + + + 0 + 0 + + + + 0 + + + + Console + + + + + + + + + + + + 0 + + + + Project Property + + + + + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1065 + 25 + + + + + Project + + + + + + + + + Run + + + + + + + Options + + + + + + Help + + + + + + + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + Save + + + + + Close + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + Start + + + + + Pause + + + + + About + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + openToolbar + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + createToolbar + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + saveToolbar + + + Save + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + starToolbar + + + Start + + + + + + ../Documents/figure/stopServer.png../Documents/figure/stopServer.png + + + stopToolbar + + + Stop + + + + + + ../workspace/branch_gui_may/gui/figure/pause.png../workspace/branch_gui_may/gui/figure/pause.png + + + pauseToolbar + + + Pause + + + + + + ../addpu.jpg../addpu.jpg + + + addPU + + + + + FTP + + + + + + diff --git a/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v47.ui b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v47.ui new file mode 100644 index 0000000..2035e1a --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v47.ui @@ -0,0 +1,2186 @@ + + + MainWindow + + + + 0 + 0 + 1065 + 711 + + + + MainWindow + + + + + + + Qt::Horizontal + + + + + Qt::Vertical + + + + + 0 + 278 + + + + + 16777215 + 16777215 + + + + 0 + + + + Project + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Project Name : + + + + + + + + + + DataType : + + + + + + + + Voltage + + + + + Spectra + + + + + Fits + + + + + + + + + + + DataPath : + + + + + + + ... + + + + + + + + + + Read Mode: + + + + + + + + Off Line + + + + + On Line + + + + + + + + Delay: + + + + + + + + + + Walk : + + + + + + + + Search 0 + + + + + Search 1 + + + + + + + + Load + + + + + + + Set: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Star Date: + + + + + + + + + + End Date: + + + + + + + + + + Start Time: + + + + + + + + + + End Time: + + + + + + + + + + Description: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + + Voltage + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + + + + + Value + + + + + Index + + + + + + + + + Value + + + + + Index + + + + + + + + Profile Selector + + + + + + + + Profile List + + + + + Profile Range List + + + + + + + + Decoder + + + + + + + Coherent Integration + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Code: + + + + + + + Select Channels + + + + + + + Select Heights + + + + + + + Filter + + + + + + + + + + Radar Frequency + + + + + + + Mode: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Barker 3 + + + + + Barker 4 + + + + + Barker 5 + + + + + Barker 7 + + + + + Barker 11 + + + + + Barker 13 + + + + + Barker 3 + Comp. + + + + + Barker 4 + Comp. + + + + + Barker 5 + Comp. + + + + + Barker 7 + Comp. + + + + + Barker 11+ Comp. + + + + + Barker 13+ Comp. + + + + + None + + + + + + + + + Time + + + + + Freq 1 + + + + + + + + + Graphics + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + ... + + + + + + + + + + Scope + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Channel List + + + + + + + Show + + + + + + + Freq/Vel + + + + + + + + + + + + + + Path : + + + + + + + Prefix: + + + + + + + Height range + + + + + + + Qt::Horizontal + + + + 40 + 12 + + + + + + + + Qt::Horizontal + + + + 18 + 12 + + + + + + + + + + + + + + Save + + + + + + + + + + + + + + + Output + + + + + + Type: + + + + + + + Path: + + + + + + + + + + ... + + + + + + + + .rawdata + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Blocks per File : + + + + + + + Profiles per Block: + + + + + + + + + + + + + + + Spectra + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + Select Cross Spectra + + + + + + + + Value + + + + + Index + + + + + + + + + + + + Value + + + + + Index + + + + + + + + + + + + + + Remove DC + + + + + + + Select Heights + + + + + + + Select Channel + + + + + + + + + + + + + x-y pairs + + + + + + + nFFTPoints + + + + + + + Incoherent Integration + + + + + + + + Time Interval + + + + + Profiles + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Radar Frequency + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Profiles + + + + + + + + + + Remove Interference + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Mode 1 + + + + + Mode 2 + + + + + + + + + Graphics + + + + + + Coherence Map + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Tmin, Tmax: + + + + + + + + + + + + + + + + + + + + + + + + + + + Prefix : + + + + + + + + + + Qt::Horizontal + + + + 28 + 15 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + RTI Plot + + + + + + + Height range: + + + + + + + dBs range: + + + + + + + magnitud [0-1] + + + + + + + + + + + + + Qt::Horizontal + + + + 49 + 15 + + + + + + + + Path : + + + + + + + + + + + + + Power Profile + + + + + + + Freq/Vel: + + + + + + + + + + Cross Spectra Plot + + + + + + + ... + + + + + + + Channel List: + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 39 + 15 + + + + + + + + + + + Show + + + + + + + + + + + + + + Wr Period: + + + + + + + Save + + + + + + + + + + + + + + + + + + + + + + + + + + + + ftp + + + + + + + + + + + + + + RTI Noise + + + + + + + + + + + + + + + + + + + + + Time Range: + + + + + + + + + + + Output + + + + + + Type: + + + + + + + + .pdata + + + + + + + + Path: + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + Blocks per File: + + + + + + + Profile per Block: + + + + + + + + + + + + + + + SpectraHeis + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Clear + + + + + + + Ok + + + + + + + + + + 0 + + + + Operation + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Time Interval + + + + + + + + Incoherent Intergration + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Graphics + + + + + + Prefix + + + + + + + ... + + + + + + + + + + + + + + ymin - ymax + + + + + + + Tmin - Tmax: + + + + + + + Time Range: + + + + + + + Wr Period + + + + + + + Qt::Horizontal + + + + 134 + 20 + + + + + + + + + + + + + + + + + + + + + Channel List: + + + + + + + xmin - xmax + + + + + + + + + + Save + + + + + + + ftp + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + Path + + + + + + + Show + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 106 + 20 + + + + + + + + + + + + + + + + + + + + + + RTI PLot + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Output + + + + + + Path: + + + + + + + Blocks per File: + + + + + + + Type: + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + + .fits + + + + + + + + Metada + + + + + + + + + + + + + ... + + + + + + + + + + + + Correlation + + + + + + 0 + + + + Operation + + + + + Graphics + + + + + + + + + + + 0 + 0 + + + + 0 + + + + Console + + + + + + + + + + + + 0 + + + + Project Property + + + + + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1065 + 25 + + + + + Project + + + + + + + + + Run + + + + + + + Options + + + + + + Help + + + + + + + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + Save + + + + + Close + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + Start + + + + + Pause + + + + + About + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + openToolbar + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + createToolbar + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + saveToolbar + + + Save + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + starToolbar + + + Start + + + + + + ../Documents/figure/stopServer.png../Documents/figure/stopServer.png + + + stopToolbar + + + Stop + + + + + + ../workspace/branch_gui_may/gui/figure/pause.png../workspace/branch_gui_may/gui/figure/pause.png + + + pauseToolbar + + + Pause + + + + + + ../addpu.jpg../addpu.jpg + + + addPU + + + + + FTP + + + + + + diff --git a/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v48.ui b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v48.ui new file mode 100644 index 0000000..d34bd2e --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v48.ui @@ -0,0 +1,2206 @@ + + + MainWindow + + + + 0 + 0 + 1065 + 711 + + + + MainWindow + + + + + + + Qt::Horizontal + + + + + Qt::Vertical + + + + + 0 + 278 + + + + + 16777215 + 16777215 + + + + 0 + + + + Project + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Project Name : + + + + + + + + + + DataType : + + + + + + + + Voltage + + + + + Spectra + + + + + Fits + + + + + + + + + + + DataPath : + + + + + + + ... + + + + + + + + + + Read Mode: + + + + + + + + Off Line + + + + + On Line + + + + + + + + Delay: + + + + + + + + + + Walk : + + + + + + + + Search 0 + + + + + Search 1 + + + + + + + + Load + + + + + + + Set: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Star Date: + + + + + + + + + + End Date: + + + + + + + + + + Start Time: + + + + + + + + + + End Time: + + + + + + + + + + Description: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + + Voltage + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + + + + + Value + + + + + Index + + + + + + + + + Value + + + + + Index + + + + + + + + Profile Selector + + + + + + + + Profile List + + + + + Profile Range List + + + + + + + + Decoder + + + + + + + Coherent Integration + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Code: + + + + + + + Select Channels + + + + + + + Select Heights + + + + + + + Filter + + + + + + + + + + Radar Frequency + + + + + + + Mode: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Barker 3 + + + + + Barker 4 + + + + + Barker 5 + + + + + Barker 7 + + + + + Barker 11 + + + + + Barker 13 + + + + + Barker 3 + Comp. + + + + + Barker 4 + Comp. + + + + + Barker 5 + Comp. + + + + + Barker 7 + Comp. + + + + + Barker 11+ Comp. + + + + + Barker 13+ Comp. + + + + + None + + + + + + + + + Time + + + + + Freq 1 + + + + + + + + + Graphics + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + ... + + + + + + + + + + Scope + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Channel List + + + + + + + Show + + + + + + + Freq/Vel + + + + + + + + + + + + + + Path : + + + + + + + Prefix: + + + + + + + Height range + + + + + + + Qt::Horizontal + + + + 40 + 12 + + + + + + + + Qt::Horizontal + + + + 18 + 12 + + + + + + + + + + + + + + Save + + + + + + + + + + + + + + + Output + + + + + + Type: + + + + + + + Path: + + + + + + + + + + ... + + + + + + + + .rawdata + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Blocks per File : + + + + + + + Profiles per Block: + + + + + + + + + + + + + + + Spectra + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + Select Cross Spectra + + + + + + + + Value + + + + + Index + + + + + + + + + + + + Value + + + + + Index + + + + + + + + + + + + + + Remove DC + + + + + + + Select Heights + + + + + + + Select Channel + + + + + + + + + + + + + x-y pairs + + + + + + + nFFTPoints + + + + + + + Incoherent Integration + + + + + + + + Time Interval + + + + + Profiles + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Radar Frequency + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Profiles + + + + + + + + + + Remove Interference + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Mode 1 + + + + + Mode 2 + + + + + + + + IppFactor + + + + + + + + + + Get Noise + + + + + + + + + + + Graphics + + + + + + Coherence Map + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Tmin, Tmax: + + + + + + + + + + + + + + + + + + + + + + + + + + + Prefix : + + + + + + + + + + Qt::Horizontal + + + + 28 + 15 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + RTI Plot + + + + + + + Height range: + + + + + + + dBs range: + + + + + + + magnitud [0-1] + + + + + + + + + + + + + Qt::Horizontal + + + + 49 + 15 + + + + + + + + Path : + + + + + + + + + + + + + Power Profile + + + + + + + Freq/Vel: + + + + + + + + + + Cross Spectra Plot + + + + + + + ... + + + + + + + Channel List: + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 39 + 15 + + + + + + + + + + + Show + + + + + + + + + + + + + + Wr Period: + + + + + + + Save + + + + + + + + + + + + + + + + + + + + + + + + + + + + ftp + + + + + + + + + + + + + + RTI Noise + + + + + + + + + + + + + + + + + + + + + Time Range: + + + + + + + + + + + Output + + + + + + Type: + + + + + + + + .pdata + + + + + + + + Path: + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + Blocks per File: + + + + + + + Profile per Block: + + + + + + + + + + + + + + + SpectraHeis + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Clear + + + + + + + Ok + + + + + + + + + + 0 + + + + Operation + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Time Interval + + + + + + + + Incoherent Intergration + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Graphics + + + + + + Prefix + + + + + + + ... + + + + + + + + + + + + + + ymin - ymax + + + + + + + Tmin - Tmax: + + + + + + + Time Range: + + + + + + + Wr Period + + + + + + + Qt::Horizontal + + + + 134 + 20 + + + + + + + + + + + + + + + + + + + + + Channel List: + + + + + + + xmin - xmax + + + + + + + + + + Save + + + + + + + ftp + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + Path + + + + + + + Show + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 106 + 20 + + + + + + + + + + + + + + + + + + + + + + RTI PLot + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Output + + + + + + Path: + + + + + + + Blocks per File: + + + + + + + Type: + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + + .fits + + + + + + + + Metada + + + + + + + + + + + + + ... + + + + + + + + + + + + Correlation + + + + + + 0 + + + + Operation + + + + + Graphics + + + + + + + + + + + 0 + 0 + + + + 0 + + + + Console + + + + + + + + + + + + 0 + + + + Project Property + + + + + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1065 + 25 + + + + + Project + + + + + + + + + Run + + + + + + + Options + + + + + + Help + + + + + + + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + Save + + + + + Close + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + Start + + + + + Pause + + + + + About + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + openToolbar + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + createToolbar + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + saveToolbar + + + Save + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + starToolbar + + + Start + + + + + + ../Documents/figure/stopServer.png../Documents/figure/stopServer.png + + + stopToolbar + + + Stop + + + + + + ../workspace/branch_gui_may/gui/figure/pause.png../workspace/branch_gui_may/gui/figure/pause.png + + + pauseToolbar + + + Pause + + + + + + ../addpu.jpg../addpu.jpg + + + addPU + + + + + FTP + + + + + + diff --git a/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v49.ui b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v49.ui new file mode 100644 index 0000000..31cff87 --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/MainWindow_21_02_13_v49.ui @@ -0,0 +1,2206 @@ + + + MainWindow + + + + 0 + 0 + 1065 + 711 + + + + MainWindow + + + + + + + Qt::Horizontal + + + + + Qt::Vertical + + + + + 0 + 278 + + + + + 16777215 + 16777215 + + + + 0 + + + + Project + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Project Name : + + + + + + + + + + DataType : + + + + + + + + Voltage + + + + + Spectra + + + + + Fits + + + + + + + + + + + DataPath : + + + + + + + ... + + + + + + + + + + Read Mode: + + + + + + + + Off Line + + + + + On Line + + + + + + + + Delay: + + + + + + + + + + Walk : + + + + + + + + Search 0 + + + + + Search 1 + + + + + + + + Load + + + + + + + Set: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Star Date: + + + + + + + + + + End Date: + + + + + + + + + + Start Time: + + + + + + + + + + End Time: + + + + + + + + + + Description: + + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + + Voltage + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + + + + + Value + + + + + Index + + + + + + + + + Value + + + + + Index + + + + + + + + Profile Selector + + + + + + + + Profile List + + + + + Profile Range List + + + + + + + + Decoder + + + + + + + Coherent Integration + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Code: + + + + + + + Select Channels + + + + + + + Select Heights + + + + + + + Filter + + + + + + + + + + Radar Frequency + + + + + + + Mode: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Barker 3 + + + + + Barker 4 + + + + + Barker 5 + + + + + Barker 7 + + + + + Barker 11 + + + + + Barker 13 + + + + + Barker 3 + Comp. + + + + + Barker 4 + Comp. + + + + + Barker 5 + Comp. + + + + + Barker 7 + Comp. + + + + + Barker 11+ Comp. + + + + + Barker 13+ Comp. + + + + + None + + + + + + + + + Time + + + + + Freq 1 + + + + + + + + + Graphics + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + ... + + + + + + + + + + Scope + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Channel List + + + + + + + Show + + + + + + + Freq/Vel + + + + + + + + + + + + + + Path : + + + + + + + Prefix: + + + + + + + Height range + + + + + + + Qt::Horizontal + + + + 40 + 12 + + + + + + + + Qt::Horizontal + + + + 18 + 12 + + + + + + + + + + + + + + Save + + + + + + + + + + + + + + + Output + + + + + + Type: + + + + + + + Path: + + + + + + + + + + ... + + + + + + + + .rawdata + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Blocks per File : + + + + + + + Profiles per Block: + + + + + + + + + + + + + + + Spectra + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Ok + + + + + + + Clear + + + + + + + + + + 0 + + + + Operation + + + + + + Select Cross Spectra + + + + + + + + Value + + + + + Index + + + + + + + + + + + + Value + + + + + Index + + + + + + + + + + + + + + Remove DC + + + + + + + Select Heights + + + + + + + Select Channel + + + + + + + + + + + + + x-y pairs + + + + + + + nFFTPoints + + + + + + + Incoherent Integration + + + + + + + + Time Interval + + + + + Profiles + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Radar Frequency + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Profiles + + + + + + + + + + Remove Interference + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + IppFactor + + + + + + + Get Noise + + + + + + + + + + + Mode 1 + + + + + Mode 2 + + + + + + + + + + + + Graphics + + + + + + Coherence Map + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Tmin, Tmax: + + + + + + + + + + + + + + + + + + + + + + + + + + + Prefix : + + + + + + + + + + Qt::Horizontal + + + + 28 + 15 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + RTI Plot + + + + + + + Height range: + + + + + + + dBs range: + + + + + + + magnitud [0-1] + + + + + + + + + + + + + Qt::Horizontal + + + + 49 + 15 + + + + + + + + Path : + + + + + + + + + + + + + Power Profile + + + + + + + Freq/Vel: + + + + + + + + + + Cross Spectra Plot + + + + + + + ... + + + + + + + Channel List: + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 39 + 15 + + + + + + + + + + + Show + + + + + + + + + + + + + + Wr Period: + + + + + + + Save + + + + + + + + + + + + + + + + + + + + + + + + + + + + ftp + + + + + + + + + + + + + + RTI Noise + + + + + + + + + + + + + + + + + + + + + Time Range: + + + + + + + + + + + Output + + + + + + Type: + + + + + + + + .pdata + + + + + + + + Path: + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + Blocks per File: + + + + + + + Profile per Block: + + + + + + + + + + + + + + + SpectraHeis + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Clear + + + + + + + Ok + + + + + + + + + + 0 + + + + Operation + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + Time Interval + + + + + + + + Incoherent Intergration + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Graphics + + + + + + Prefix + + + + + + + ... + + + + + + + + + + + + + + ymin - ymax + + + + + + + Tmin - Tmax: + + + + + + + Time Range: + + + + + + + Wr Period + + + + + + + Qt::Horizontal + + + + 134 + 20 + + + + + + + + + + + + + + + + + + + + + Channel List: + + + + + + + xmin - xmax + + + + + + + + + + Save + + + + + + + ftp + + + + + + + Spectra Plot + + + + + + + + + + + + + + + + + Path + + + + + + + Show + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 106 + 20 + + + + + + + + + + + + + + + + + + + + + + RTI PLot + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Output + + + + + + Path: + + + + + + + Blocks per File: + + + + + + + Type: + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + + + + + + + + .fits + + + + + + + + Metada + + + + + + + + + + + + + ... + + + + + + + + + + + + Correlation + + + + + + 0 + + + + Operation + + + + + Graphics + + + + + + + + + + + 0 + 0 + + + + 0 + + + + Console + + + + + + + + + + + + 0 + + + + Project Property + + + + + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1065 + 25 + + + + + Project + + + + + + + + + Run + + + + + + + Options + + + + + + Help + + + + + + + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + Save + + + + + Close + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + Start + + + + + Pause + + + + + About + + + + + + ../Documents/figure/open.png../Documents/figure/open.png + + + openToolbar + + + Open + + + + + + ../Documents/figure/create_class_obj.png../Documents/figure/create_class_obj.png + + + createToolbar + + + Create + + + + + + ../Documents/figure/save.gif../Documents/figure/save.gif + + + saveToolbar + + + Save + + + + + + ../Documents/figure/startServer.png../Documents/figure/startServer.png + + + starToolbar + + + Start + + + + + + ../Documents/figure/stopServer.png../Documents/figure/stopServer.png + + + stopToolbar + + + Stop + + + + + + ../workspace/branch_gui_may/gui/figure/pause.png../workspace/branch_gui_may/gui/figure/pause.png + + + pauseToolbar + + + Pause + + + + + + ../addpu.jpg../addpu.jpg + + + addPU + + + + + FTP + + + + + + diff --git a/schainpy/gui/viewer/viewer_ui/ftpConfig4.ui b/schainpy/gui/viewer/viewer_ui/ftpConfig4.ui new file mode 100644 index 0000000..ec05dbf --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/ftpConfig4.ui @@ -0,0 +1,300 @@ + + + MainWindow + + + + 0 + 0 + 374 + 399 + + + + + 374 + 399 + + + + + 374 + 399 + + + + MainWindow + + + + + + 9 + 38 + 47 + 17 + + + + Server: + + + + + + 9 + 133 + 77 + 17 + + + + User Name: + + + + + + 9 + 166 + 68 + 17 + + + + Password: + + + + + + 9 + 9 + 101 + 17 + + + + + 75 + true + + + + Server Details + + + + + + 9 + 104 + 87 + 17 + + + + + 75 + true + + + + User Details + + + + + + 9 + 71 + 47 + 17 + + + + Folder: + + + + + + 130 + 40 + 231 + 27 + + + + + + + 130 + 70 + 231 + 27 + + + + + + + 130 + 130 + 231 + 27 + + + + + + + 130 + 160 + 231 + 27 + + + + + + + 130 + 360 + 111 + 27 + + + + Cancel + + + + + + 250 + 360 + 111 + 27 + + + + Ok + + + + + + 10 + 200 + 66 + 17 + + + + + 75 + true + + + + Others + + + + + + 10 + 230 + 81 + 17 + + + + Ftp_wei: + + + + + + 10 + 260 + 81 + 17 + + + + Exp_code: + + + + + + 10 + 290 + 81 + 17 + + + + Sub_exp: + + + + + + 10 + 320 + 81 + 17 + + + + Plot_pos: + + + + + + 130 + 230 + 231 + 27 + + + + + + + 130 + 260 + 231 + 27 + + + + + + + 130 + 290 + 231 + 27 + + + + + + + 130 + 320 + 231 + 27 + + + + + + + + diff --git a/schainpy/gui/viewer/viewer_ui/initwindowv2.ui b/schainpy/gui/viewer/viewer_ui/initwindowv2.ui new file mode 100644 index 0000000..d254434 --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/initwindowv2.ui @@ -0,0 +1,112 @@ + + + Dialog + + + + 0 + 0 + 652 + 496 + + + + Dialog + + + + + + + + + + + Cambria + 22 + 50 + false + + + + Signal Chain - Ver. 1.0 + + + + + + + Qt::Horizontal + + + + + + + + + + ../../Downloads/IMAGENES/w.jpg + + + true + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Exit + + + + + + + Continue + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + diff --git a/schainpy/gui/viewer/viewer_ui/unitProcess4.ui b/schainpy/gui/viewer/viewer_ui/unitProcess4.ui new file mode 100644 index 0000000..d077917 --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/unitProcess4.ui @@ -0,0 +1,170 @@ + + + MainWindow + + + + 0 + 0 + 312 + 195 + + + + MainWindow + + + + + + + + 12 + 50 + false + + + + Input: + + + + + + + + 50 + false + + + + Cancel + + + + + + + + 50 + false + + + + Ok + + + + + + + + 12 + 50 + false + + + + Type: + + + + + + + + 13 + 50 + false + + + + Processing Unit + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 12 + + + + + + + + + 12 + + + + + Voltage + + + + + Spectra + + + + + Correlation + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + + + + + + diff --git a/schainpy/gui/viewer/viewer_ui/workspacev5.ui b/schainpy/gui/viewer/viewer_ui/workspacev5.ui new file mode 100644 index 0000000..5aad07a --- /dev/null +++ b/schainpy/gui/viewer/viewer_ui/workspacev5.ui @@ -0,0 +1,247 @@ + + + Dialog + + + true + + + + 0 + 0 + 730 + 295 + + + + + 730 + 295 + + + + + 730 + 295 + + + + Dialog + + + + + 0 + 0 + 731 + 71 + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Cantarell'; font-size:12pt; font-weight:600;">Select a workspace</span></p> +<p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Cantarell';">Signal Chain stores your projects in a folder called a workspace.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Cantarell';">Choose a workspace folder to use for this session.</span></p></body></html> + + + + + + 10 + 90 + 91 + 16 + + + + + 11 + + + + Workspace : + + + + + + 110 + 80 + 501 + 31 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + + + 620 + 80 + 101 + 31 + + + + + 11 + + + + Browse... + + + + + + 10 + 120 + 711 + 121 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 490 + 250 + 111 + 31 + + + + Cancel + + + + + + 610 + 250 + 111 + 31 + + + + + 11 + + + + OK + + + + + + diff --git a/schainpy/model/graphics/figure.py b/schainpy/model/graphics/figure.py index 943d61d..fb8889f 100644 --- a/schainpy/model/graphics/figure.py +++ b/schainpy/model/graphics/figure.py @@ -3,9 +3,7 @@ import numpy import time, datetime import mpldriver - -import Queue -import threading +from schainpy.model.proc.jroproc_base import Operation def isRealtime(utcdatatime): utcnow = time.mktime(time.localtime()) @@ -14,10 +12,7 @@ def isRealtime(utcdatatime): return False return True - - - -class Figure: +class Figure(Operation): __driver = mpldriver __isConfigThread = False @@ -49,7 +44,7 @@ class Figure: def __del__(self): - self.__driver.closeFigure(True) + self.__driver.closeFigure() def getFilename(self, name, ext='.png'): @@ -85,7 +80,8 @@ class Figure: return xmin, xmax if timerange == None and (xmin==None or xmax==None): - raise ValueError, "timerange or xmin+xmax should be defined" + timerange = 14400 #seconds + #raise ValueError, "(timerange) or (xmin & xmax) should be defined" if timerange != None: txmin = x[0] - x[0] % min(timerange/10, 10*60) @@ -231,32 +227,32 @@ class Figure: def save(self, figpath, figfile=None, save=True, ftp=False, wr_period=1, thisDatetime=None, update_figfile=True): - if not save: + self.counter_imagwr += 1 + if self.counter_imagwr < wr_period: return - if figfile == None: - - if not thisDatetime: - raise ValueError, "Saving figure: figfile or thisDatetime should be defined" - return - - str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S") - figfile = self.getFilename(name = str_datetime) + self.counter_imagwr = 0 + + if save: - if self.figfile == None: - self.figfile = figfile + if figfile == None: + + if not thisDatetime: + raise ValueError, "Saving figure: figfile or thisDatetime should be defined" + return + + str_datetime = thisDatetime.strftime("%Y%m%d_%H%M%S") + figfile = self.getFilename(name = str_datetime) - if update_figfile: - self.figfile = figfile + if self.figfile == None: + self.figfile = figfile + + if update_figfile: + self.figfile = figfile + + # store png plot to local folder + self.saveFigure(figpath, self.figfile) - self.counter_imagwr += 1 - - if self.counter_imagwr

c!j-^ z4kO_)GL-OdVN56LsxSJzdGn^TTQ}NaI~?^ouz@j=0Aj<#-Ut%!@T68wytHrMK6mlr zMb-%RCB&&jWF!I`))IjZ+xz~`pFi(*?AU=Vtvp3B@Bv z&bxQ-GR)|3kb#IotIdLbeSN(2tTQMJcelb|S_g6}O11qtr%Jd4+jaNz9 za|t|p^k_GJ{CMtB!;3H^%sPHodF|RYck9+IJdch*BVoHb!p6YM^WQ~4BvM~V6bnqe z_~@DKF53fYgu)2iuraC5DEW7w;8Ckx*#BuRzx&9O2!fcueUb- zhi(Jk`a?c7Sg>G$|J1;YR9Ky#uwccDoa$Iau+en=rv@iZoM`8#25l$eKlU)A) literal 0 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 N)xy*oS#!oK{vQJJdk_Es literal 0 Hc$@ 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 literal 0 Hc$@(%>juik$XSH0@|iC)8X3* zbt?~FdiL$-&-CWyZ$AIndGvC}%z2v*->ROl=+WEn=Wo4gp0?n`wHHy9tB+iIzU$1B zj+yiCJbwTB^N)#YYcC(Y_>j}OETw+M z?Z@vTN+<3<^CYo$W$X0$=WoA$_U7~UlaJ5edj0+9&wqb^Jvl!&rC~+a?0NtH|7REo zp!k!8k%1wCK?lSE#R&uZod(J9W*Nq|Hksyd$p`~ZPKA(3lS35xts?wHMZ$yU1?$WU zpY0l9%I^@)uv*V%bvQr2ON4R&PdL*~CSx_Va2_7z2qSmiaBd}TIVCyna9&=G2qzVl z@X#AKL&L4T93zCq#0|TiYKn^qN61PC1xcGoy?dwbFC`n{!7l$h?B75390|(@%-;Mm z+8hy%2Lv2NwON$59hjuz)FKe3kf9TJ$g4w9a7{wyA_qr4ZN4C{2?&r$_CLjI3M|I|369FfhCFCPbdvvhwoMMg|6J0M}j;-2eap diff --git a/schainpy/gui/figure/saveicon.jpeg b/schainpy/gui/figure/saveicon.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f9b91edbbbadd2f64ae4d5401d6b9257e24dab90 GIT binary patch literal 4975 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:Search file in format .r or pdata Search1:Search file in a directory DYYYYDOY') - self.proComWalk.setCurrentIndex(1) - #tool tip gui volOp - self.volOpChannel.setToolTip('Example: 1,2,3,4,5') - self.volOpHeights.setToolTip('Example: 90,180') - self.volOpFilter.setToolTip('Example: 3') - self.volOpProfile.setToolTip('Example:0,125 ') - self.volOpCohInt.setToolTip('Example: 100') - self.volOpOk.setToolTip('If you have finish, please Ok ') - #tool tip gui volGraph - self.volGraphfreqrange.setToolTip('Example: 10,150') - self.volGraphHeightrange.setToolTip('Example: 20,180') - self.volGraphOk.setToolTip('If you have finish, please Ok ') - #tool tip gui specOp - self.specOpnFFTpoints.setToolTip('Example: 100') - self.specOpIncoherent.setToolTip('Example: 150') - self.specOpRemoveDC .setToolTip('Example: 1') - - - self.specOpChannel.setToolTip('Example: 1,2,3,4,5') - self.specOpHeights.setToolTip('Example: 90,180') - self.specOppairsList.setToolTip('Example: (0,1),(2,3)') - #tool tip gui specGraph - - self.specGgraphChannelList.setToolTip('Example: Myplot') - self.specGgraphFreq.setToolTip('Example: 10,150') - self.specGgraphHeight.setToolTip('Example: 20,160') - self.specGgraphDbsrange.setToolTip('Example: 30,170') - - self.specGraphPrefix.setToolTip('Example: figure') - -class UnitProcess(QMainWindow, Ui_UnitProcess): - """ - Class documentation goes here. - """ - closed=pyqtSignal() - create= False - def __init__(self, parent = None): - """ - Constructor - """ - QMainWindow.__init__(self, parent) - self.setupUi(self) - self.getFromWindow=None - self.getfromWindowList=[] - self.dataTypeProject=None - - self.listUP=None - - @pyqtSignature("") - def on_unitPokbut_clicked(self): - """ - Slot documentation goes here. - """ - self.create =True - self.getFromWindow=self.getfromWindowList[int(self.comboInputBox.currentIndex())] - #self.nameofUP= str(self.nameUptxt.text()) - self.typeofUP= str(self.comboTypeBox.currentText()) - self.close() - - - @pyqtSignature("") - def on_unitPcancelbut_clicked(self): - """ - Slot documentation goes here. - """ - self.create=False - self.close() - - def loadTotalList(self): - self.comboInputBox.clear() - for i in self.getfromWindowList: - - name=i.getElementName() - if name=='Project': - id= i.id - name=i.name - if self.dataTypeProject=='Voltage': - self.comboTypeBox.clear() - self.comboTypeBox.addItem("Voltage") - - if self.dataTypeProject=='Spectra': - self.comboTypeBox.clear() - self.comboTypeBox.addItem("Spectra") - self.comboTypeBox.addItem("Correlation") - - if name=='ProcUnit': - id=int(i.id)-1 - name=i.datatype - if name == 'Voltage': - self.comboTypeBox.clear() - self.comboTypeBox.addItem("Spectra") - self.comboTypeBox.addItem("Correlation") - if name == 'Spectra': - self.comboTypeBox.clear() - self.comboTypeBox.addItem("Spectra") - self.comboTypeBox.addItem("Correlation") - - - self.comboInputBox.addItem(str(name)) - #self.comboInputBox.addItem(str(name)+str(id)) - - def closeEvent(self, event): - self.closed.emit() - event.accept() - -class ShowMeConsole(QtCore.QObject): - textWritten=QtCore.pyqtSignal(str) - def write (self,text): - self.textWritten.emit(str(text)) \ No newline at end of file +# -*- coding: utf-8 -*- +""" +Module implementing MainWindow. +#+++++++++++++GUI V1++++++++++++++# +@author: AlexanderValdezPortocarrero ñ_ñ +""" +import os, sys, time +import datetime +import Queue +from PyQt4.QtGui import QMainWindow +from PyQt4.QtCore import pyqtSignature +from PyQt4.QtCore import pyqtSignal +from PyQt4 import QtCore +from PyQt4 import QtGui + +from schainpy.gui.viewer.ui_unitprocess import Ui_UnitProcess +from schainpy.gui.viewer.ui_ftp import Ui_Ftp +from schainpy.gui.viewer.ui_mainwindow import Ui_BasicWindow +from schainpy.controller import Project + +from modelProperties import treeModel +from collections import OrderedDict +from os.path import expanduser +from CodeWarrior.Standard_Suite import file +from comm import * + +def isRadarFile(file): + try: + year = int(file[1:5]) + doy = int(file[5:8]) + set = int(file[8:11]) + except: + return 0 + + return 1 + +def isRadarPath(path): + try: + year = int(path[1:5]) + doy = int(path[5:8]) + except: + return 0 + + return 1 + +class BasicWindow(QMainWindow, Ui_BasicWindow): + """ + """ + def __init__(self, parent=None): + """ + + """ + QMainWindow.__init__(self, parent) + self.setupUi(self) + self.__puObjDict = {} + self.__itemTreeDict = {} + self.readUnitConfObjList = [] + self.operObjList = [] + self.projecObjView = None + self.idProject = 0 + # self.idImag = 0 + + self.idImagscope = 0 + self.idImagspectra = 0 + self.idImagcross = 0 + self.idImagrti = 0 + self.idImagcoherence = 0 + self.idImagpower = 0 + self.idImagrtinoise = 0 + self.idImagspectraHeis = 0 + self.idImagrtiHeis = 0 + + self.online = 0 + self.walk = 0 + self.create = False + self.selectedItemTree = None + self.commCtrlPThread = None + self.setParameter() + self.create_comm() + self.create_timers() + self.create_figure() + self.temporalFTP = ftpBuffer() + self.projectProperCaracteristica = [] + self.projectProperPrincipal = [] + self.projectProperDescripcion = [] + self.volProperCaracteristica = [] + self.volProperPrincipal = [] + self.volProperDescripcion = [] + self.specProperCaracteristica = [] + self.specProperPrincipal = [] + self.specProperDescripcion = [] + + self.specHeisProperCaracteristica = [] + self.specHeisProperPrincipal = [] + self.specHeisProperDescripcion = [] + + # self.pathWorkSpace = './' + + self.__projectObjDict = {} + self.__operationObjDict = {} + + @pyqtSignature("") + def on_actionCreate_triggered(self): + """ + Slot documentation goes here. + """ + self.setInputsProject_View() + self.create = True + + @pyqtSignature("") + def on_actionSave_triggered(self): + """ + Slot documentation goes here. + """ + self.saveProject() + + @pyqtSignature("") + def on_actionClose_triggered(self): + """ + Slot documentation goes here. + """ + self.close() + + @pyqtSignature("") + def on_actionPauseToolbar_triggered(self): + self.actionStarToolbar.setEnabled(False) + self.actionPauseToolbar.setEnabled(True) + self.actionStopToolbar.setEnabled(True) + self.pauseProject() + + @pyqtSignature("") + def on_actionStart_triggered(self): + """ + """ + self.playProject() + + + @pyqtSignature("") + def on_actionFTP_triggered(self): + """ + """ + self.configFTPWindowObj = Ftp(self) + # if self.temporalFTP.create: + if self.temporalFTP.createforView: + server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos = self.temporalFTP.recover() + self.configFTPWindowObj.setParmsfromTemporal(server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos) + self.configFTPWindowObj.show() + self.configFTPWindowObj.closed.connect(self.createFTPConfig) + + def createFTPConfig(self): + self.console.clear() + if not self.configFTPWindowObj.create: + self.console.append("There is no FTP configuration") + return + self.console.append("Push Ok in Spectra view to Add FTP Configuration") + server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos = self.configFTPWindowObj.getParmsFromFtpWindow() + self.temporalFTP.save(server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos) + + @pyqtSignature("") + def on_actionOpenToolbar_triggered(self): + """ + Slot documentation goes here. + """ + self.create = False + self.frame_2.setEnabled(True) + home = expanduser("~") + self.dir = os.path.join(home, 'schain_workspace') + # print self.dir + filename = str(QtGui.QFileDialog.getOpenFileName(self, "Open text file", self.dir, self.tr("Text Files (*.xml)"))) + self.console.clear() + projectObjLoad = Project() + try: + projectObjLoad.readXml(filename) + except: + return 0 + project_name, description = projectObjLoad.name, projectObjLoad.description + id = projectObjLoad.id + self.__projectObjDict[id] = projectObjLoad + # Project Properties + datatype, data_path, startDate, endDate, startTime, endTime , online , delay, walk, set = self.showProjectProperties(projectObjLoad) + # show ProjectView + self.addProject2ProjectExplorer(id=id, name=project_name) + self.refreshProjectWindow(project_name, description, datatype, data_path, startDate, endDate, startTime, endTime, online, delay, set) + + if datatype == "Voltage": + ext = '.r' + self.specOpProfiles.setEnabled(True) + self.specOpippFactor.setEnabled(True) + elif datatype == "Spectra": + ext = '.pdata' + elif datatype == "Fits": + ext = '.fits' + + + if online == 0: + self.loadDays(data_path, ext, walk) + else: + self.proComStartDate.setEnabled(False) + self.proComEndDate.setEnabled(False) + self.proStartTime.setEnabled(False) + self.proEndTime.setEnabled(False) + self.frame_2.setEnabled(True) + + self.tabWidgetProject.setEnabled(True) + self.tabWidgetProject.setCurrentWidget(self.tabProject) + # Disable tabProject after finish the creation + self.tabProject.setEnabled(True) + puObjorderList = OrderedDict(sorted(projectObjLoad.procUnitConfObjDict.items(), key=lambda x: x[0])) + + for inputId, puObj in puObjorderList.items(): + # print puObj.datatype, puObj.inputId,puObj.getId(),puObj.parentId + self.__puObjDict[puObj.getId()] = puObj + + if puObj.inputId != "0": + self.addPU2PELoadXML(id=puObj.getId() , name=puObj.datatype , idParent=puObj.inputId) + + if puObj.datatype == "Voltage": + self.refreshPUWindow(puObj.datatype, puObj) + self.showPUVoltageProperties(puObj) + self.showtabPUCreated(datatype=puObj.datatype) + + if puObj.datatype == "Spectra": + self.refreshPUWindow(puObj.datatype, puObj) + self.showPUSpectraProperties(puObj) + self.showtabPUCreated(datatype=puObj.datatype) + + if puObj.datatype == "SpectraHeis": + self.refreshPUWindow(puObj.datatype, puObj) + self.showPUSpectraHeisProperties(puObj) + self.showtabPUCreated(datatype=puObj.datatype) + + # self.refreshPUWindow(datatype=datatype,puObj=puObj) + + @pyqtSignature("") + def on_actionCreateToolbar_triggered(self): + """ + Slot documentation goes here. + """ + self.setInputsProject_View() + self.create = True + + @pyqtSignature("") + def on_actionAddPU_triggered(self): + if len(self.__projectObjDict) == 0: + outputstr = "First Create a Project then add Processing Unit" + self.console.clear() + self.console.append(outputstr) + return 0 + else: + self.addPUWindow() + self.console.clear() + self.console.append("Please, Choose the type of Processing Unit") + self.console.append("If your Datatype is rawdata, you will start with processing unit Type Voltage") + self.console.append("If your Datatype is pdata, you will choose between processing unit Type Spectra or Correlation") + self.console.append("If your Datatype is fits, you will start with processing unit Type SpectraHeis") + + + @pyqtSignature("") + def on_actionSaveToolbar_triggered(self): + """ + Slot documentation goes here. + """ + self.saveProject() + + @pyqtSignature("") + def on_actionStarToolbar_triggered(self): + """ + Slot documentation goes here. + """ + self.playProject() + self.actionStarToolbar.setEnabled(False) + self.actionPauseToolbar.setEnabled(True) + self.actionStopToolbar.setEnabled(True) + + @pyqtSignature("") + def on_actionStopToolbar_triggered(self): + """ + Slot documentation goes here. + """ + self.actionStarToolbar.setEnabled(True) + self.actionPauseToolbar.setEnabled(False) + self.actionStopToolbar.setEnabled(False) + self.stopProject() + + @pyqtSignature("int") + def on_proComReadMode_activated(self, index): + """ + SELECCION DEL MODO DE LECTURA ON=1, OFF=0 + """ + if index == 0: + self.online = 0 + self.proDelay.setText("0") + self.proSet.setText("0") + self.proSet.setEnabled(False) + self.proDelay.setEnabled(False) + elif index == 1: + self.online = 1 + self.proSet.setText(" ") + self.proDelay.setText("5") + self.proSet.setEnabled(True) + self.proDelay.setEnabled(True) + + @pyqtSignature("int") + def on_proComDataType_activated(self, index): + """ + Voltage or Spectra + """ + if index == 0: + self.datatype = '.r' + elif index == 1: + self.datatype = '.pdata' + elif index == 2: + self.datatype = '.fits' + + self.proDataType.setText(self.datatype) + self.console.clear() + + @pyqtSignature("int") + def on_proComWalk_activated(self, index): + """ + + """ + if index == 0: + self.walk = 0 + elif index == 1: + self.walk = 1 + + @pyqtSignature("") + def on_proToolPath_clicked(self): + """ + Choose your path + """ + self.dataPath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) + self.proDataPath.setText(self.dataPath) + + self.proComStartDate.clear() + self.proComEndDate.clear() + + if not os.path.exists(self.dataPath): + self.proOk.setEnabled(False) + self.console.clear() + self.console.append("Write a correct a path") + return + self.console.clear() + self.console.append("Select the read mode") + + + @pyqtSignature("") + def on_proLoadButton_clicked(self): + self.console.clear() + parms_ok, project_name, datatype, ext, data_path, read_mode, delay, walk , set = self.checkInputsProject() + if read_mode == "Offline": + if parms_ok: + self.proComStartDate.clear() + self.proComEndDate.clear() + self.loadDays(data_path, ext, walk) + self.proComStartDate.setEnabled(True) + self.proComEndDate.setEnabled(True) + self.proStartTime.setEnabled(True) + self.proEndTime.setEnabled(True) + self.frame_2.setEnabled(True) + return + if read_mode == "Online": + if parms_ok: + self.proComStartDate.addItem("2010/01/30") + self.proComEndDate.addItem("2013/12/30") + self.loadDays(data_path, ext, walk) + self.proComStartDate.setEnabled(False) + self.proComEndDate.setEnabled(False) + self.proStartTime.setEnabled(False) + self.proEndTime.setEnabled(False) + self.frame_2.setEnabled(True) + + @pyqtSignature("int") + def on_proComStartDate_activated(self, index): + """ + SELECCION DEL RANGO DE FECHAS -START DATE + """ + stopIndex = self.proComEndDate.count() - self.proComEndDate.currentIndex() + self.proComEndDate.clear() + for i in self.dateList[index:]: + self.proComEndDate.addItem(i) + self.proComEndDate.setCurrentIndex(self.proComEndDate.count() - stopIndex) + + @pyqtSignature("int") + def on_proComEndDate_activated(self, index): + """ + SELECCION DEL RANGO DE FECHAS-END DATE + """ + startIndex = self.proComStartDate.currentIndex() + stopIndex = self.proComEndDate.count() - index + self.proComStartDate.clear() + for i in self.dateList[:len(self.dateList) - stopIndex + 1]: + self.proComStartDate.addItem(i) + self.proComStartDate.setCurrentIndex(startIndex) + + @pyqtSignature("") + def on_proOk_clicked(self): + """ + Añade al Obj XML de Projecto, name,datatype,date,time,readmode,wait,etc, crea el readUnitProcess del archivo xml. + Prepara la configuración del diágrama del Arbol del treeView numero 2 + """ + if self.create: + self.idProject += 1 + projectId = self.idProject + projectObjView = self.createProjectView(projectId) + readUnitObj = self.createReadUnitView(projectObjView) + self.addProject2ProjectExplorer(id=projectId, name=projectObjView.name) + else: + projectObjView = self.updateProjectView() + projectId = projectObjView.getId() + idReadUnit = projectObjView.getReadUnitId() + readUnitObj = self.updateReadUnitView(projectObjView, idReadUnit) + + self.__itemTreeDict[projectId].setText(projectObjView.name) + # Project Properties + self.showProjectProperties(projectObjView) + # Disable tabProject after finish the creation + self.tabProject.setEnabled(True) + + @pyqtSignature("") + def on_proClear_clicked(self): + self.setInputsProject_View() + projectObj = self.getSelectedProjectObj() + + @pyqtSignature("int") + def on_volOpCebChannels_stateChanged(self, p0): + """ + Check Box habilita operaciones de Selecci�n de Canales + """ + if p0 == 2: + self.volOpComChannels.setEnabled(True) + self.volOpChannel.setEnabled(True) + + if p0 == 0: + self.volOpComChannels.setEnabled(False) + self.volOpChannel.setEnabled(False) + self.volOpChannel.clear() + + @pyqtSignature("int") + def on_volOpCebHeights_stateChanged(self, p0): + """ + Check Box habilita operaciones de Selecci�n de Alturas + """ + if p0 == 2: + self.volOpHeights.setEnabled(True) + self.volOpComHeights.setEnabled(True) + + if p0 == 0: + self.volOpHeights.setEnabled(False) + self.volOpHeights.clear() + self.volOpComHeights.setEnabled(False) + + @pyqtSignature("int") + def on_volOpCebFilter_stateChanged(self, p0): + """ + Name='Decoder', optype='other' + """ + if p0 == 2: + self.volOpFilter.setEnabled(True) + + if p0 == 0: + self.volOpFilter.setEnabled(False) + self.volOpFilter.clear() + + @pyqtSignature("int") + def on_volOpCebProfile_stateChanged(self, p0): + """ + Check Box habilita ingreso del rango de Perfiles + """ + if p0 == 2: + self.volOpComProfile.setEnabled(True) + self.volOpProfile.setEnabled(True) + + if p0 == 0: + self.volOpComProfile.setEnabled(False) + self.volOpProfile.setEnabled(False) + self.volOpProfile.clear() + + @pyqtSignature("int") + def on_volOpCebDecodification_stateChanged(self, p0): + """ + Check Box habilita + """ + if p0 == 2: + self.volOpComCode.setEnabled(True) + self.volOpComMode.setEnabled(True) + if p0 == 0: + self.volOpComCode.setEnabled(False) + self.volOpComMode.setEnabled(False) + + @pyqtSignature("int") + def on_volOpCebCohInt_stateChanged(self, p0): + """ + Check Box habilita ingresode del numero de Integraciones a realizar + """ + if p0 == 2: + self.volOpCohInt.setEnabled(True) + if p0 == 0: + self.volOpCohInt.setEnabled(False) + self.volOpCohInt.clear() + + @pyqtSignature("int") + def on_volOpCebRadarfrequency_stateChanged(self, p0): + """ + Check Box habilita ingresode del numero de Integraciones a realizar + """ + if p0 == 2: + self.volOpRadarfrequency.setEnabled(True) + if p0 == 0: + self.volOpRadarfrequency.clear() + self.volOpRadarfrequency.setEnabled(False) + + @pyqtSignature("") + def on_volOutputToolPath_clicked(self): + dirOutPath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) + self.volOutputPath.setText(dirOutPath) + + @pyqtSignature("") + def on_specOutputToolPath_clicked(self): + dirOutPath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) + self.specOutputPath.setText(dirOutPath) + + @pyqtSignature("") + def on_specHeisOutputToolPath_clicked(self): + dirOutPath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) + self.specHeisOutputPath.setText(dirOutPath) + + @pyqtSignature("") + def on_specHeisOutputMetadaToolPath_clicked(self): + home = expanduser("~") + self.dir = os.path.join(home, 'schain_workspace') + filename = str(QtGui.QFileDialog.getOpenFileName(self, "Open text file", self.dir, self.tr("Text Files (*.xml)"))) + self.specHeisOutputMetada.setText(filename) + + @pyqtSignature("") + def on_volOpOk_clicked(self): + """ + BUSCA EN LA LISTA DE OPERACIONES DEL TIPO VOLTAJE Y LES A�ADE EL PARAMETRO ADECUADO ESPERANDO LA ACEPTACION DEL USUARIO + PARA AGREGARLO AL ARCHIVO DE CONFIGURACION XML + """ + puObj = self.getSelectedPUObj() + puObj.removeOperations() + + if self.volOpCebRadarfrequency.isChecked(): + value = self.volOpRadarfrequency.text() + format = 'float' + name_operation = 'setRadarFrequency' + name_parameter = 'frequency' + if not value == "": + try: + radarfreq = float(self.volOpRadarfrequency.text()) + except: + self.console.clear() + self.console.append("Write the parameter Radar Frequency type float") + return 0 + opObj = puObj.addOperation(name=name_operation) + opObj.addParameter(name=name_parameter, value=radarfreq, format=format) + + + + if self.volOpCebChannels.isChecked(): + value = self.volOpChannel.text() + format = 'intlist' + if self.volOpComChannels.currentIndex() == 0: + name_operation = "selectChannels" + name_parameter = 'channelList' + else: + name_operation = "selectChannelsByIndex" + name_parameter = 'channelIndexList' + + opObj = puObj.addOperation(name=name_operation) + opObj.addParameter(name=name_parameter, value=value, format=format) + + if self.volOpCebHeights.isChecked(): + value = self.volOpHeights.text() + valueList = value.split(',') + format = 'float' + if self.volOpComHeights.currentIndex() == 0: + name_operation = 'selectHeights' + name_parameter1 = 'minHei' + name_parameter2 = 'maxHei' + else: + name_operation = 'selectHeightsByIndex' + name_parameter1 = 'minIndex' + name_parameter2 = 'maxIndex' + opObj = puObj.addOperation(name=name_operation) + opObj.addParameter(name=name_parameter1, value=valueList[0], format=format) + opObj.addParameter(name=name_parameter2, value=valueList[1], format=format) + + if self.volOpCebFilter.isChecked(): + value = self.volOpFilter.text() + format = 'int' + name_operation = 'filterByHeights' + name_parameter = 'window' + opObj = puObj.addOperation(name=name_operation) + opObj.addParameter(name=name_parameter, value=value, format=format) + + if self.volOpCebProfile.isChecked(): + value = self.volOpProfile.text() + format = 'intlist' + optype = 'other' + name_operation = 'ProfileSelector' + if self.volOpComProfile.currentIndex() == 0: + name_parameter = 'profileList' + else: + name_parameter = 'profileRangeList' + opObj = puObj.addOperation(name='ProfileSelector', optype='other') + opObj.addParameter(name=name_parameter, value=value, format=format) + + if self.volOpCebDecodification.isChecked(): + name_operation = 'Decoder' + optype = 'other' + format1 = 'floatlist' + format2 = 'int' + format3 = 'int' + format4 = 'int' + name_parameter1 = 'code' + name_parameter2 = 'nCode' + name_parameter3 = 'nBaud' + name_parameter4 = 'mode' + + if self.volOpComCode.currentIndex() == 0: + value1 = '1,1,-1' + value2 = '1' + value3 = '3' + if self.volOpComCode.currentIndex() == 1: + value1 = '1,1,-1,1' + value2 = '1' + value3 = '4' + if self.volOpComCode.currentIndex() == 2: + value1 = '1,1,1,−1,1' + value2 = '1' + value3 = '5' + if self.volOpComCode.currentIndex() == 3: + value1 = '1,1,1,-1,-1,1,-1' + value2 = '1' + value3 = '7' + if self.volOpComCode.currentIndex() == 4: + value1 = '1,1,1,-1,-1,-1,1,-1,-1,1,-1' + value2 = '1' + value3 = '11' + if self.volOpComCode.currentIndex() == 5: + value1 = '1,1,1,1,1,-1,-1,1,1,-1,1,-1,1' + value2 = '1' + value3 = '13' + if self.volOpComCode.currentIndex() == 6: + value1 = '1,1,-1,-1,-1,1' + value2 = '2' + value3 = '3' + if self.volOpComCode.currentIndex() == 7: + value1 = '1,1,-1,1,-1,-1,1,-1' + value2 = '2' + value3 = '4' + if self.volOpComCode.currentIndex() == 8: + value1 = '1,1,1,-1,1,-1,-1,-1,1,-1' + value2 = '2' + value3 = '5' + if self.volOpComCode.currentIndex() == 9: + value1 = '1,1,1,-1,-1,1,-1,-1,-1,-1,1,1,-1,1' + value2 = '2' + value3 = '7' + if self.volOpComCode.currentIndex() == 10: + value1 = '1,1,1,-1,-1,-1,1,-1,-1,1,-1,-1 ,-1 ,-1 ,1 ,1,1,-1 ,1 ,1 ,-1 ,1' + value2 = '2' + value3 = '11' + if self.volOpComCode.currentIndex() == 11: + value1 = '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' + value2 = '2' + value3 = '13' + if self.volOpComMode.currentIndex() == 0: + value4 = '0' + if self.volOpComMode.currentIndex() == 1: + value4 = '1' + if self.volOpComMode.currentIndex() == 2: + value4 = '2' + opObj = puObj.addOperation(name=name_operation, optype='other') + if self.volOpComCode.currentIndex() == 12: + pass + else: + opObj.addParameter(name=name_parameter1, value=value1, format=format1) + opObj.addParameter(name=name_parameter2, value=value2, format=format2) + opObj.addParameter(name=name_parameter3, value=value3, format=format3) + opObj.addParameter(name=name_parameter4, value=value4, format=format4) + + if self.volOpCebCohInt.isChecked(): + name_operation = 'CohInt' + optype = 'other' + value = self.volOpCohInt.text() + name_parameter = 'n' + format = 'float' + + opObj = puObj.addOperation(name='CohInt', optype='other') + opObj.addParameter(name=name_parameter, value=value, format=format) + + if self.volGraphCebshow.isChecked(): + name_operation = 'Plot' + optype = 'other' + name_parameter = 'type' + value = 'Scope' + if self.idImagscope == 0: + self.idImagscope = 100 + else: + self.idImagscope = self.idImagscope + 1 + + name_parameter1 = 'id' + value1 = int(self.idImagscope) + format1 = 'int' + format = 'str' + + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + opObj.addParameter(name=name_parameter1, value=value1, format=format1) + + channelList = self.volGraphChannelList.text() + xvalue = self.volGraphfreqrange.text() + yvalue = self.volGraphHeightrange.text() + + if self.volGraphChannelList.isModified(): + try: + value = str(channelList) + except: + return 0 + opObj.addParameter(name='channelList', value=value, format='intlist') + + if not xvalue == "": + xvalueList = xvalue.split(',') + try: + value0 = int(xvalueList[0]) + value1 = int(xvalueList[1]) + except: + return 0 + opObj.addParameter(name='xmin', value=value0, format='int') + opObj.addParameter(name='xmax', value=value1, format='int') + + + if not yvalue == "": + yvalueList = yvalue.split(",") + try: + value = yvalueList[0] + value = yvalueList[1] + except: + return 0 + opObj.addParameter(name='ymin', value=yvalueList[0], format='int') + opObj.addParameter(name='ymax', value=yvalueList[1], format='int') + + if self.volGraphCebSave.isChecked(): + opObj.addParameter(name='save', value='1', format='int') + opObj.addParameter(name='figpath', value=self.volGraphPath.text(), format='str') + value = self.volGraphPrefix.text() + if not value == "": + try: + value = str(self.volGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=self.volGraphPrefix.text(), format='str') + + # if something happend + parms_ok, output_path, blocksperfile, profilesperblock = self.checkInputsPUSave(datatype='Voltage') + name_operation = 'VoltageWriter' + optype = 'other' + name_parameter1 = 'path' + name_parameter2 = 'blocksPerFile' + name_parameter3 = 'profilesPerBlock' + value1 = output_path + value2 = blocksperfile + value3 = profilesperblock + format = "int" + if parms_ok: + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter1, value=value1) + opObj.addParameter(name=name_parameter2, value=value2, format=format) + opObj.addParameter(name=name_parameter3, value=value3, format=format) + + + + #---------NEW VOLTAGE PROPERTIES + self.showPUVoltageProperties(puObj) + + + self.console.clear() + self.console.append("If you want to save your project") + self.console.append("click on your project name in the Tree Project Explorer") + + + """ + Voltage Graph + """ + @pyqtSignature("int") + def on_volGraphCebSave_stateChanged(self, p0): + """ + Check Box habilita ingresode del numero de Integraciones a realizar + """ + if p0 == 2: + self.volGraphPath.setEnabled(True) + self.volGraphPrefix.setEnabled(True) + self.volGraphToolPath.setEnabled(True) + + if p0 == 0: + self.volGraphPath.setEnabled(False) + self.volGraphPrefix.setEnabled(False) + self.volGraphToolPath.setEnabled(False) + + @pyqtSignature("") + def on_volGraphToolPath_clicked(self): + """ + Donde se guardan los DATOS + """ + self.dataPath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) + self.volGraphPath.setText(self.dataPath) + +# if not os.path.exists(self.dataPath): +# self.volGraphOk.setEnabled(False) +# return + + @pyqtSignature("int") + def on_volGraphCebshow_stateChanged(self, p0): + """ + Check Box habilita ingresode del numero de Integraciones a realizar + """ + if p0 == 0: + + self.volGraphChannelList.setEnabled(False) + self.volGraphfreqrange.setEnabled(False) + self.volGraphHeightrange.setEnabled(False) + if p0 == 2: + + self.volGraphChannelList.setEnabled(True) + self.volGraphfreqrange.setEnabled(True) + self.volGraphHeightrange.setEnabled(True) + + """ + Spectra operation + """ + @pyqtSignature("int") + def on_specOpCebRadarfrequency_stateChanged(self, p0): + """ + Check Box habilita ingresode del numero de Integraciones a realizar + """ + if p0 == 2: + self.specOpRadarfrequency.setEnabled(True) + if p0 == 0: + self.specOpRadarfrequency.clear() + self.specOpRadarfrequency.setEnabled(False) + + + @pyqtSignature("int") + def on_specOpCebCrossSpectra_stateChanged(self, p0): + """ + Habilita la opcion de a�adir el par�metro CrossSpectra a la Unidad de Procesamiento . + """ + if p0 == 2: + # self.specOpnFFTpoints.setEnabled(True) + self.specOppairsList.setEnabled(True) + if p0 == 0: + # self.specOpnFFTpoints.setEnabled(False) + self.specOppairsList.setEnabled(False) + + @pyqtSignature("int") + def on_specOpCebChannel_stateChanged(self, p0): + """ + Habilita la opcion de a�adir el par�metro numero de Canales a la Unidad de Procesamiento . + """ + if p0 == 2: + self.specOpChannel.setEnabled(True) + self.specOpComChannel.setEnabled(True) + if p0 == 0: + self.specOpChannel.setEnabled(False) + self.specOpComChannel.setEnabled(False) + + @pyqtSignature("int") + def on_specOpCebHeights_stateChanged(self, p0): + """ + Habilita la opcion de a�adir el par�metro de alturas a la Unidad de Procesamiento . + """ + if p0 == 2: + self.specOpComHeights.setEnabled(True) + self.specOpHeights.setEnabled(True) + if p0 == 0: + self.specOpComHeights.setEnabled(False) + self.specOpHeights.setEnabled(False) + + + @pyqtSignature("int") + def on_specOpCebIncoherent_stateChanged(self, p0): + """ + Habilita la opcion de a�adir el par�metro integraciones incoherentes a la Unidad de Procesamiento . + """ + if p0 == 2: + self.specOpIncoherent.setEnabled(True) + if p0 == 0: + self.specOpIncoherent.setEnabled(False) + + @pyqtSignature("int") + def on_specOpCebRemoveDC_stateChanged(self, p0): + """ + Habilita la opcion de a�adir el par�metro remover DC a la Unidad de Procesamiento . + """ + if p0 == 2: + self.specOpComRemoveDC.setEnabled(True) + if p0 == 0: + self.specOpComRemoveDC.setEnabled(False) + + @pyqtSignature("int") + def on_specOpCebgetNoise_stateChanged(self, p0): + """ + Habilita la opcion de a�adir la estimacion de ruido a la Unidad de Procesamiento . + """ + if p0 == 2: + self.specOpgetNoise.setEnabled(True) + + if p0 == 0: + self.specOpgetNoise.setEnabled(False) + + def refreshID(self, puObj): + opObj = puObj.getOpObjfromParamValue(value="Scope") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagscope == 0: + self.idImagscope = 100 + else: + self.idImagscope = self.idImagscope + 1 + value1 = int(self.idImagscope) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + opObj = puObj.getOpObjfromParamValue(value="SpectraPlot") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagspectra == 0: + self.idImagspectra = 200 + else: + self.idImagspectra = self.idImagspectra + 1 + value1 = int(self.idImagspectra) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + + opObj = puObj.getOpObjfromParamValue(value="CrossSpectraPlot") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagcross == 0: + self.idImagcross = 300 + else: + self.idImagcross = self.idImagcross + 1 + value1 = int(self.idImagcross) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + opObj = puObj.getOpObjfromParamValue(value="RTIPlot") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagrti == 0: + self.idImagrti = 400 + else: + self.idImagrti = self.idImagrti + 1 + value1 = int(self.idImagrti) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + opObj = puObj.getOpObjfromParamValue(value="CoherenceMap") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagcoherence == 0: + self.idImagcoherence = 500 + else: + self.idImagcoherence = self.idImagcoherence + 1 + value1 = int(self.idImagcoherence) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + opObj = puObj.getOpObjfromParamValue(value="PowerProfilePlot") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagpower == 0: + self.idImagpower = 600 + else: + self.idImagpower = self.idImagpower + 1 + value1 = int(self.idImagpower) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + opObj = puObj.getOpObjfromParamValue(value="Noise") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagrtinoise == 0: + self.idImagrtinoise = 700 + else: + self.idImagrtinoise = self.idImagrtinoise + 1 + value1 = int(self.idImagrtinoise) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + opObj = puObj.getOpObjfromParamValue(value="SpectraHeisScope") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagspectraHeis == 0: + self.idImagspectraHeis = 800 + else: + self.idImagspectraHeis = self.idImagspectraHeis + 1 + value1 = int(self.idImagspectraHeis) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + opObj = puObj.getOpObjfromParamValue(value="RTIfromSpectraHeis") + if opObj == None: + pass + else: + name_parameter1 = 'id' + format1 = 'int' + if self.idImagrtiHeis == 0: + self.idImagrtiHeis = 900 + else: + self.idImagrtiHeis = self.idImagrtiHeis + 1 + value1 = int(self.idImagrtiHeis) + opObj.changeParameter(name=name_parameter1, value=value1, format=format1) + + @pyqtSignature("") + def on_specOpOk_clicked(self): + """ + AÑADE OPERACION SPECTRA + """ + puObj = self.getSelectedPUObj() + puObj.removeOperations() + + if self.specOpCebRadarfrequency.isChecked(): + value = self.specOpRadarfrequency.text() + format = 'float' + name_operation = 'setRadarFrequency' + name_parameter = 'frequency' + if not value == "": + try: + radarfreq = float(self.specOpRadarfrequency.text()) + except: + self.console.clear() + self.console.append("Write the parameter Radar Frequency type float") + return 0 + opObj = puObj.addOperation(name=name_operation) + opObj.addParameter(name=name_parameter, value=radarfreq, format=format) + + + if self.proComDataType.currentText() == 'Voltage': + name_parameter = 'nFFTPoints' + value = self.specOpnFFTpoints.text() + name_parameter1 = 'nProfiles' + value1 = self.specOpProfiles.text() + name_parameter2 = 'ippFactor' + value2 = self.specOpippFactor.text() + format = 'int' + try: + value = int(self.specOpnFFTpoints.text()) + except: + self.console.clear() + self.console.append("Please Write the number of FFT") + return 0 + puObj.addParameter(name=name_parameter, value=value, format=format) + if not value1 == "": + try: + value1 = int(self.specOpProfiles.text()) + except: + self.console.clear() + self.console.append("Please Write the number of Profiles") + return 0 + puObj.addParameter(name=name_parameter1, value=value1, format=format) + if not value2 == "": + try: + value2 = int(self.specOpippFactor.text()) + except: + self.console.clear() + self.console.append("Please Write the Number of IppFactor") + puObj.addParameter(name=name_parameter2 , value=value2 , format=format) + + if self.specOpCebCrossSpectra.isChecked(): + name_parameter = 'pairsList' + format = 'pairslist' + value2 = self.specOppairsList.text() + puObj.addParameter(name=name_parameter, value=value2, format=format) + + if self.specOpCebHeights.isChecked(): + value = self.specOpHeights.text() + valueList = value.split(',') + format = 'float' + value0 = valueList[0] + value1 = valueList[1] + + if self.specOpComHeights.currentIndex() == 0: + name_operation = 'selectHeights' + name_parameter1 = 'minHei' + name_parameter2 = 'maxHei' + else: + name_operation = 'selectHeightsByIndex' + name_parameter1 = 'minIndex' + name_parameter2 = 'maxIndex' + opObj = puObj.addOperation(name=name_operation) + opObj.addParameter(name=name_parameter1, value=value0, format=format) + opObj.addParameter(name=name_parameter2, value=value1, format=format) + + if self.specOpCebChannel.isChecked(): + value = self.specOpChannel.text() + format = 'intlist' + if self.specOpComChannel.currentIndex() == 0: + name_operation = "selectChannels" + name_parameter = 'channelList' + else: + name_operation = "selectChannelsByIndex" + name_parameter = 'channelIndexList' + opObj = puObj.addOperation(name="selectChannels") + opObj.addParameter(name=name_parameter, value=value, format=format) + + if self.specOpCebIncoherent.isChecked(): + value = self.specOpIncoherent.text() + name_operation = 'IncohInt' + optype = 'other' + if self.specOpCobIncInt.currentIndex() == 0: + name_parameter = 'timeInterval' + format = 'float' + else: + name_parameter = 'n' + format = 'float' + + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + + if self.specOpCebRemoveDC.isChecked(): + name_operation = 'removeDC' + name_parameter = 'mode' + format = 'int' + if self.specOpComRemoveDC.currentIndex() == 0: + value = 1 + else: + value = 2 + opObj = puObj.addOperation(name=name_operation) + opObj.addParameter(name=name_parameter, value=value, format=format) + + if self.specOpCebRemoveInt.isChecked(): + name_operation = 'removeInterference' + opObj = puObj.addOperation(name=name_operation) + + + if self.specOpCebgetNoise.isChecked(): + value = self.specOpgetNoise.text() + valueList = value.split(',') + format = 'float' + name_operation = "getNoise" + opObj = puObj.addOperation(name=name_operation) + + if not value == '': + valueList = value.split(',') + length = len(valueList) + if length == 1: + try: + value1 = float(valueList[0]) + except: + self.console.clear() + self.console.append("Please Write correct parameter Get Noise") + return 0 + name1 = 'minHei' + opObj.addParameter(name=name1, value=value1, format=format) + elif length == 2: + try: + value1 = float(valueList[0]) + value2 = float(valueList[1]) + except: + self.console.clear() + self.console.append("Please Write corrects parameter Get Noise") + return 0 + name1 = 'minHei' + name2 = 'maxHei' + opObj.addParameter(name=name1, value=value1, format=format) + opObj.addParameter(name=name2, value=value2, format=format) + + elif length == 3: + try: + value1 = float(valueList[0]) + value2 = float(valueList[1]) + value3 = float(valueList[2]) + except: + self.console.clear() + self.console.append("Please Write corrects parameter Get Noise") + return 0 + name1 = 'minHei' + name2 = 'maxHei' + name3 = 'minVel' + opObj.addParameter(name=name1, value=value1, format=format) + opObj.addParameter(name=name2, value=value2, format=format) + opObj.addParameter(name=name3, value=value3, format=format) + + elif length == 4: + try: + value1 = float(valueList[0]) + value2 = float(valueList[1]) + value3 = float(valueList[2]) + value4 = float(valueList[3]) + except: + self.console.clear() + self.console.append("Please Write corrects parameter Get Noise") + return 0 + name1 = 'minHei' + name2 = 'maxHei' + name3 = 'minVel' + name4 = 'maxVel' + opObj.addParameter(name=name1, value=value1, format=format) + opObj.addParameter(name=name2, value=value2, format=format) + opObj.addParameter(name=name3, value=value3, format=format) + opObj.addParameter(name=name4, value=value4, format=format) + + elif length > 4: + self.console.clear() + self.console.append("Get Noise Operation only accepts 4 parameters") + return 0 + + #-----Spectra Plot----- + if self.specGraphCebSpectraplot.isChecked(): + name_operation = 'Plot' + optype = 'other' + name_parameter = 'type' + value = 'SpectraPlot' + format = 'str' + if self.idImagspectra == 0: + self.idImagspectra = 200 + else: + self.idImagspectra = self.idImagspectra + 1 + name_parameter1 = 'id' + value1 = int(self.idImagspectra) + format1 = 'int' + + format = 'str' + + channelList = self.specGgraphChannelList.text() + xvalue = self.specGgraphFreq.text() + yvalue = self.specGgraphHeight.text() + zvalue = self.specGgraphDbsrange.text() + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + opObj.addParameter(name=name_parameter1, value=value1, format=format1) + + if not channelList == '': + name_parameter = 'channelList' + format = 'intlist' + opObj.addParameter(name=name_parameter, value=channelList, format=format) + + if not xvalue == '': + xvalueList = xvalue.split(',') + try: + value1 = float(xvalueList[0]) + value2 = float(xvalueList[1]) + except: + self.console.clear() + self.console.append("Please Write corrects parameter freq") + return 0 + name1 = 'xmin' + name2 = 'xmax' + format = 'float' + opObj.addParameter(name=name1, value=value1, format=format) + opObj.addParameter(name=name2, value=value2, format=format) + #------specGgraphHeight--- + if not yvalue == '': + yvalueList = yvalue.split(",") + try: + value1 = float(yvalueList[0]) + value2 = float(yvalueList[1]) + except: + self.console.clear() + self.console.append("Please Write corrects parameter Height") + return 0 + name1 = 'ymin' + name2 = 'ymax' + format = 'float' + opObj.addParameter(name=name1, value=value1, format=format) + opObj.addParameter(name=name2, value=value2, format=format) + + if not zvalue == '': + zvalueList = zvalue.split(",") + try: + value = float(zvalueList[0]) + value = float(zvalueList[1]) + except: + self.console.clear() + self.console.append("Please Write corrects parameter Dbsrange") + return 0 + format = 'float' + opObj.addParameter(name='zmin', value=zvalueList[0], format=format) + opObj.addParameter(name='zmax', value=zvalueList[1], format=format) + + if self.specGraphSaveSpectra.isChecked(): + name_parameter1 = 'save' + name_parameter2 = 'figpath' + name_parameter3 = 'figfile' + value1 = '1' + value2 = self.specGraphPath.text() + value3 = self.specGraphPrefix.text() + format1 = 'bool' + format2 = 'str' + opObj.addParameter(name=name_parameter1, value=value1 , format=format1) + opObj.addParameter(name=name_parameter2, value=value2, format=format2) + if not value3 == "": + try: + value3 = str(self.specGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=self.specGraphPrefix.text(), format='str') + + # opObj.addParameter(name=name_parameter3, value=value3, format=format2) + # opObj.addParameter(name='wr_period', value='5',format='int') + + if self.specGraphftpSpectra.isChecked(): + opObj.addParameter(name='ftp', value='1', format='int') + self.addFTPConfiguration(puObj, opObj) + + if self.specGraphCebCrossSpectraplot.isChecked(): + name_operation = 'Plot' + optype = 'other' + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name='type', value="CrossSpectraPlot", format='str') + opObj.addParameter(name='power_cmap', value='jet', format='str') + opObj.addParameter(name='coherence_cmap', value='jet', format='str') + opObj.addParameter(name='phase_cmap', value='RdBu_r', format='str') + + if self.idImagcross == 0: + self.idImagcross = 300 + else: + self.idImagcross = self.idImagcross + 1 + value1 = int(self.idImagcross) + channelList = self.specGgraphChannelList.text() + xvalue = self.specGgraphFreq.text() + yvalue = self.specGgraphHeight.text() + zvalue = self.specGgraphDbsrange.text() + + opObj.addParameter(name='id', value=value1, format='int') + + if self.specGgraphChannelList.isModified(): + opObj.addParameter(name='channelList', value=channelList, format='intlist') + + if not xvalue == '': + xvalueList = xvalue.split(',') + try: + value = float(xvalueList[0]) + value = float(xvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='xmin', value=xvalueList[0], format=format) + opObj.addParameter(name='xmax', value=xvalueList[1], format=format) + + if not yvalue == '': + yvalueList = yvalue.split(",") + try: + value = float(yvalueList[0]) + value = float(yvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='ymin', value=yvalueList[0], format=format) + opObj.addParameter(name='ymax', value=yvalueList[1], format=format) + + + if not zvalue == '': + zvalueList = zvalue.split(",") + try: + value = float(zvalueList[0]) + value = float(zvalueList[1]) + except: + return 0 + opObj.addParameter(name='zmin', value=zvalueList[0], format='float') + opObj.addParameter(name='zmax', value=zvalueList[1], format='float') + + if self.specGraphSaveCross.isChecked(): + opObj.addParameter(name='save', value='1', format='bool') + opObj.addParameter(name='figpath', value=self.specGraphPath.text(), format='str') + value = self.specGraphPrefix.text() + if not value == "": + try: + value = str(self.specGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=value, format='str') + # opObj.addParameter(name='figfile', value=self.specGraphPrefix.text(), format='str') + if self.specGraphftpCross.isChecked(): + opObj.addParameter(name='ftp', value='1', format='int') + self.addFTPConfiguration(puObj, opObj) + + if self.specGraphCebRTIplot.isChecked(): + name_operation = 'Plot' + optype = 'other' + name_parameter = 'type' + value = 'RTIPlot' + format = 'str' + + if self.idImagrti == 0: + self.idImagrti = 400 + else: + self.idImagrti = self.idImagrti + 1 + + name_parameter1 = 'id' + value1 = int(self.idImagrti) + format1 = 'int' + + format = 'str' + + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + opObj.addParameter(name=name_parameter1, value=value1, format=format1) + + channelList = self.specGgraphChannelList.text() + xvalue = self.specGgraphTminTmax.text() + yvalue = self.specGgraphHeight.text() + zvalue = self.specGgraphDbsrange.text() + timerange = self.specGgraphTimeRange.text() + + if not channelList == '': + opObj.addParameter(name='channelList', value=channelList, format='intlist') + + if not xvalue == '': + xvalueList = xvalue.split(',') + try: + value = float(xvalueList[0]) + value = float(xvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='xmin', value=xvalueList[0], format=format) + opObj.addParameter(name='xmax', value=xvalueList[1], format=format) + + if not timerange == '': + format = 'int' + try: + timerange = int(timerange) + except: + return 0 + opObj.addParameter(name='timerange', value=timerange, format=format) + + + if not yvalue == '': + yvalueList = yvalue.split(",") + try: + value = float(yvalueList[0]) + value = float(yvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='ymin', value=yvalueList[0], format=format) + opObj.addParameter(name='ymax', value=yvalueList[1], format=format) + + if not zvalue == '': + zvalueList = zvalue.split(",") + try: + value = float(zvalueList[0]) + value = float(zvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='zmin', value=zvalueList[0], format=format) + opObj.addParameter(name='zmax', value=zvalueList[1], format=format) + + if self.specGraphSaveRTIplot.isChecked(): + opObj.addParameter(name='save', value='1', format='bool') + opObj.addParameter(name='figpath', value=self.specGraphPath.text(), format='str') + value = self.specGraphPrefix.text() + if not value == "": + try: + value = str(self.specGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=value, format='str') + + # test_ftp + if self.specGraphftpRTIplot.isChecked(): + opObj.addParameter(name='ftp', value='1', format='int') + self.addFTPConfiguration(puObj, opObj) + + if self.specGraphCebCoherencmap.isChecked(): + name_operation = 'Plot' + optype = 'other' + name_parameter = 'type' + value = 'CoherenceMap' + format = 'str' + if self.idImagcoherence == 0: + self.idImagcoherence = 500 + else: + self.idImagcoherence = self.idImagcoherence + 1 + + name_parameter1 = 'id' + value1 = int(self.idImagcoherence) + format1 = 'int' + + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + # opObj.addParameter(name='coherence_cmap', value='jet', format='str') + # opObj.addParameter(name='phase_cmap', value='RdBu_r', format='str') + opObj.addParameter(name=name_parameter1, value=value1, format=format1) + + channelList = self.specGgraphChannelList.text() + if not channelList == '': + opObj.addParameter(name='channelList', value=channelList, format='intlist') + + timerange = self.specGgraphTimeRange.text() + if not timerange == '': + try: + timerange = int(timerange) + except: + return 0 + format = 'int' + opObj.addParameter(name='timerange', value=timerange, format=format) + + xvalue = self.specGgraphTminTmax.text() + if not xvalue == '': + xvalueList = xvalue.split(',') + try: + value = float(xvalueList[0]) + value = float(xvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='xmin', value=xvalueList[0], format=format) + opObj.addParameter(name='xmax', value=xvalueList[1], format=format) + + yvalue = self.specGgraphHeight.text() + if not yvalue == '': + yvalueList = yvalue.split(",") + try: + value = float(yvalueList[0]) + value = float(yvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='ymin', value=yvalueList[0], format=format) + opObj.addParameter(name='ymax', value=yvalueList[1], format=format) + + zvalue = self.specGgraphmagnitud.text() + if not zvalue == '': + zvalueList = zvalue.split(",") + try: + value = float(zvalueList[0]) + value = float(zvalueList[1]) + except: + return 0 + opObj.addParameter(name='zmin', value=zvalueList[0], format='float') + opObj.addParameter(name='zmax', value=zvalueList[1], format='float') + + if self.specGraphSaveCoherencemap.isChecked(): + opObj.addParameter(name='save', value='1', format='bool') + opObj.addParameter(name='figpath', value=self.specGraphPath.text(), format='str') + value = self.specGraphPrefix.text() + if not value == "": + try: + value = str(self.specGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=value, format='str') + + # test_ftp + if self.specGraphftpCoherencemap.isChecked(): + opObj.addParameter(name='ftp', value='1', format='int') + self.addFTPConfiguration(puObj, opObj) + + if self.specGraphPowerprofile.isChecked(): + name_operation = 'Plot' + optype = 'other' + name_parameter = 'type' + value = 'PowerProfilePlot' + format = 'str' + + if self.idImagpower == 0: + self.idImagpower = 600 + else: + self.idImagpower = self.idImagpower + 1 + value1 = int(self.idImagpower) + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format='str') + opObj.addParameter(name='id', value=value1, format='int') + + channelList = self.specGgraphChannelList.text() + if not channelList == '': + opObj.addParameter(name='channelList', value=channelList, format='intlist') + + xvalue = self.specGgraphDbsrange.text() + if not xvalue == '': + xvalueList = xvalue.split(',') + try: + value = float(xvalueList[0]) + value = float(xvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='xmin', value=xvalueList[0], format=format) + opObj.addParameter(name='xmax', value=xvalueList[1], format=format) + + yvalue = self.specGgraphHeight.text() + if not yvalue == '': + yvalueList = yvalue.split(",") + try: + value = float(yvalueList[0]) + value = float(yvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='ymin', value=yvalueList[0], format=format) + opObj.addParameter(name='ymax', value=yvalueList[1], format=format) + + + if self.specGraphSavePowerprofile.isChecked(): + opObj.addParameter(name='save', value='1', format='bool') + opObj.addParameter(name='figpath', value=self.specGraphPath.text(), format='str') + value = self.specGraphPrefix.text() + if not value == "": + try: + value = str(self.specGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=value, format='str') + + + if self.specGraphftpPowerprofile.isChecked(): + opObj.addParameter(name='ftp', value='1', format='int') + self.addFTPConfiguration(puObj, opObj) + # rti noise + + if self.specGraphCebRTInoise.isChecked(): + name_operation = 'Plot' + optype = 'other' + name_parameter = 'type' + value = 'Noise' + format = 'str' + + if self.idImagrtinoise == 0: + self.idImagrtinoise = 700 + else: + self.idImagrtinoise = self.idImagrtinoise + 1 + + name_parameter1 = 'id' + value1 = int(self.idImagrtinoise) + format1 = 'int' + format = 'str' + + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + opObj.addParameter(name=name_parameter1, value=value1, format=format1) + + channelList = self.specGgraphChannelList.text() + xvalue = self.specGgraphTminTmax.text() + yvalue = self.specGgraphDbsrange.text() + timerange = self.specGgraphTimeRange.text() + + + if not channelList == '': + opObj.addParameter(name='channelList', value=channelList, format='intlist') + + if not timerange == '': + format = 'int' + try: + timerange = int(timerange) + except: + return 0 + opObj.addParameter(name='timerange', value=timerange, format=format) + + if not xvalue == '': + xvalueList = xvalue.split(',') + try: + value = float(xvalueList[0]) + value = float(xvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='xmin', value=xvalueList[0], format=format) + opObj.addParameter(name='xmax', value=xvalueList[1], format=format) + + if not yvalue == '': + yvalueList = yvalue.split(",") + try: + value = float(yvalueList[0]) + value = float(yvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='ymin', value=yvalueList[0], format=format) + opObj.addParameter(name='ymax', value=yvalueList[1], format=format) + + if self.specGraphSaveRTInoise.isChecked(): + opObj.addParameter(name='save', value='1', format='bool') + opObj.addParameter(name='figpath', value=self.specGraphPath.text(), format='str') + value = self.specGraphPrefix.text() + if not value == "": + try: + value = str(self.specGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=value, format='str') + + # test_ftp + if self.specGraphftpRTInoise.isChecked(): + opObj.addParameter(name='ftp', value='1', format='int') + self.addFTPConfiguration(puObj, opObj) + + + +# if something happend + parms_ok, output_path, blocksperfile, profilesperblock = self.checkInputsPUSave(datatype='Spectra') + name_operation = 'SpectraWriter' + optype = 'other' + name_parameter1 = 'path' + name_parameter2 = 'blocksPerFile' + name_parameter3 = 'profilesPerBlock' + value1 = output_path + value2 = blocksperfile + value3 = profilesperblock + format = "int" + if parms_ok: + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter1, value=value1) + opObj.addParameter(name=name_parameter2, value=value2, format=format) + opObj.addParameter(name=name_parameter3, value=value3, format=format) + + self.showPUSpectraProperties(puObj) + + self.console.clear() + self.console.append("If you want to save your project") + self.console.append("click on your project name in the Tree Project Explorer") + + """ + Spectra Graph + """ + @pyqtSignature("int") + def on_specGraphCebSpectraplot_stateChanged(self, p0): + + if p0 == 2: + self.specGgraphChannelList.setEnabled(True) + self.specGgraphFreq.setEnabled(True) + self.specGgraphHeight.setEnabled(True) + self.specGgraphDbsrange.setEnabled(True) + if p0 == 0: + self.specGgraphFreq.setEnabled(False) + self.specGgraphHeight.setEnabled(False) + self.specGgraphDbsrange.setEnabled(False) + + + @pyqtSignature("int") + def on_specGraphCebCrossSpectraplot_stateChanged(self, p0): + + if p0 == 2: + self.specGgraphFreq.setEnabled(True) + self.specGgraphHeight.setEnabled(True) + self.specGgraphDbsrange.setEnabled(True) + if p0 == 0: + self.specGgraphFreq.setEnabled(False) + self.specGgraphHeight.setEnabled(False) + self.specGgraphDbsrange.setEnabled(False) + + @pyqtSignature("int") + def on_specGraphCebRTIplot_stateChanged(self, p0): + + if p0 == 2: + self.specGgraphChannelList.setEnabled(True) + self.specGgraphTminTmax.setEnabled(True) + self.specGgraphHeight.setEnabled(True) + self.specGgraphDbsrange.setEnabled(True) + self.specGgraphTimeRange.setEnabled(True) + + if p0 == 0: + self.specGgraphTminTmax.setEnabled(False) + self.specGgraphHeight.setEnabled(False) + self.specGgraphDbsrange.setEnabled(False) + self.specGgraphTimeRange.setEnabled(False) + + + @pyqtSignature("int") + def on_specGraphCebRTInoise_stateChanged(self, p0): + if p0 == 2: + self.specGgraphChannelList.setEnabled(True) + self.specGgraphTminTmax.setEnabled(True) + self.specGgraphDbsrange.setEnabled(True) + self.specGgraphTimeRange.setEnabled(True) + + if p0 == 0: + self.specGgraphTminTmax.setEnabled(False) + self.specGgraphDbsrange.setEnabled(False) + self.specGgraphTimeRange.setEnabled(False) + + + + + @pyqtSignature("int") + def on_specGraphCebCoherencmap_stateChanged(self, p0): + + if p0 == 2: + self.specGgraphTminTmax.setEnabled(True) + self.specGgraphHeight.setEnabled(True) + self.specGgraphmagnitud.setEnabled(True) + self.specGgraphTimeRange.setEnabled(True) + + if p0 == 0: + self.specGgraphTminTmax.setEnabled(False) + self.specGgraphHeight.setEnabled(False) + self.specGgraphmagnitud.setEnabled(False) + self.specGgraphTimeRange.setEnabled(False) + + + + + @pyqtSignature("int") + def on_specGraphPowerprofile_stateChanged(self, p0): + + if p0 == 2: + + self.specGgraphHeight.setEnabled(True) + self.specGgraphDbsrange.setEnabled(True) + if p0 == 0: + self.specGgraphHeight.setEnabled(False) + self.specGgraphDbsrange.setEnabled(False) + + @pyqtSignature("int") + def on_specGraphPhase_stateChanged(self, p0): + + if p0 == 2: + self.specGgraphTminTmax.setEnabled(True) + self.specGgraphPhaserange.setEnabled(True) + + if p0 == 0: + self.specGgraphTminTmax.setEnabled(False) + self.specGgraphPhaserange.setEnabled(False) + + @pyqtSignature("int") + def on_specGraphSaveSpectra_stateChanged(self, p0): + """ + """ + if p0 == 2: + self.specGraphPath.setEnabled(True) + self.specGraphPrefix.setEnabled(True) + self.specGraphToolPath.setEnabled(True) + if p0 == 0: + self.specGraphPath.setEnabled(False) + self.specGraphPrefix.setEnabled(False) + self.specGraphToolPath.setEnabled(False) + + + @pyqtSignature("int") + def on_specGraphSaveCross_stateChanged(self, p0): + if p0 == 2: + self.specGraphPath.setEnabled(True) + self.specGraphPrefix.setEnabled(True) + self.specGraphToolPath.setEnabled(True) + + @pyqtSignature("int") + def on_specGraphSaveRTIplot_stateChanged(self, p0): + if p0 == 2: + self.specGraphPath.setEnabled(True) + self.specGraphPrefix.setEnabled(True) + self.specGraphToolPath.setEnabled(True) + + @pyqtSignature("int") + def on_specGraphSaveRTInoise_stateChanged(self, p0): + if p0 == 2: + self.specGraphPath.setEnabled(True) + self.specGraphPrefix.setEnabled(True) + self.specGraphToolPath.setEnabled(True) + + @pyqtSignature("int") + def on_specGraphSaveCoherencemap_stateChanged(self, p0): + if p0 == 2: + self.specGraphPath.setEnabled(True) + self.specGraphPrefix.setEnabled(True) + self.specGraphToolPath.setEnabled(True) + + + @pyqtSignature("int") + def on_specGraphSavePowerprofile_stateChanged(self, p0): + if p0 == 2: + self.specGraphPath.setEnabled(True) + self.specGraphPrefix.setEnabled(True) + self.specGraphToolPath.setEnabled(True) + + + #-------ftp-----# + @pyqtSignature("int") + def on_specGraphftpSpectra_stateChanged(self, p0): + """ + """ + if p0 == 2: + self.specGgraphftpratio.setEnabled(True) + + if p0 == 0: + self.specGgraphftpratio.setEnabled(False) + + + @pyqtSignature("int") + def on_specGraphftpCross_stateChanged(self, p0): + if p0 == 2: + self.specGgraphftpratio.setEnabled(True) + + @pyqtSignature("int") + def on_specGraphftpRTIplot_stateChanged(self, p0): + if p0 == 2: + self.specGgraphftpratio.setEnabled(True) + + @pyqtSignature("int") + def on_specGraphftpRTInoise_stateChanged(self, p0): + if p0 == 2: + self.specGgraphftpratio.setEnabled(True) + + @pyqtSignature("int") + def on_specGraphftpCoherencemap_stateChanged(self, p0): + if p0 == 2: + self.specGgraphftpratio.setEnabled(True) + + @pyqtSignature("int") + def on_specGraphftpPowerprofile_stateChanged(self, p0): + if p0 == 2: + self.specGgraphftpratio.setEnabled(True) + + #-------------------# + + + + @pyqtSignature("") + def on_specGraphToolPath_clicked(self): + """ + """ + self.savePath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) + self.specGraphPath.setText(self.savePath) + if not os.path.exists(self.savePath): + self.console.clear() + self.console.append("Write a correct a path") + return + + @pyqtSignature("") + def on_specHeisGraphToolPath_clicked(self): + """ + """ + self.savePath = str(QtGui.QFileDialog.getExistingDirectory(self, 'Open Directory', './', QtGui.QFileDialog.ShowDirsOnly)) + self.specHeisGraphPath.setText(self.savePath) + if not os.path.exists(self.savePath): + self.console.clear() + self.console.append("Write a correct a path") + return + + @pyqtSignature("") + def on_specGraphClear_clicked(self): + self.clearspecGraph() + + @pyqtSignature("int") + def on_specHeisOpCebIncoherent_stateChanged(self, p0): + """ + Habilita la opcion de a�adir el par�metro integraciones incoherentes a la Unidad de Procesamiento . + """ + if p0 == 2: + self.specHeisOpIncoherent.setEnabled(True) + self.specHeisOpCobIncInt.setEnabled(True) + if p0 == 0: + self.specHeisOpIncoherent.setEnabled(False) + self.specHeisOpCobIncInt.setEnabled(False) + + @pyqtSignature("") + def on_specHeisOpOk_clicked(self): + """ + AÑADE OPERACION SPECTRAHEIS + """ + puObj = self.getSelectedPUObj() + puObj.removeOperations() + + if self.specHeisOpCebIncoherent.isChecked(): + value = self.specHeisOpIncoherent.text() + name_operation = 'IncohInt4SpectraHeis' + optype = 'other' + if self.specOpCobIncInt.currentIndex() == 0: + name_parameter = 'timeInterval' + format = 'float' + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + + # ---- Spectra Plot----- + if self.specHeisGraphCebSpectraplot.isChecked(): + name_operation = 'Plot' + optype = 'other' + name_parameter = 'type' + value = 'SpectraHeisScope' + format = 'str' + if self.idImagspectraHeis == 0: + self.idImagspectraHeis = 800 + else: + self.idImagspectraHeis = self.idImagspectraHeis + 1 + name_parameter1 = 'id' + value1 = int(self.idImagspectraHeis) + format1 = 'int' + + format = 'str' + + channelList = self.specHeisGgraphChannelList.text() + xvalue = self.specHeisGgraphXminXmax.text() + yvalue = self.specHeisGgraphYminYmax.text() + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + opObj.addParameter(name=name_parameter1, value=value1, format=format1) + + if not channelList == '': + name_parameter = 'channelList' + format = 'intlist' + opObj.addParameter(name=name_parameter, value=channelList, format=format) + + if not xvalue == '': + xvalueList = xvalue.split(',') + try: + value1 = float(xvalueList[0]) + value2 = float(xvalueList[1]) + except: + self.console.clear() + self.console.append("Please Write corrects parameter xmin-xmax") + return 0 + name1 = 'xmin' + name2 = 'xmax' + format = 'float' + opObj.addParameter(name=name1, value=value1, format=format) + opObj.addParameter(name=name2, value=value2, format=format) + #------specHeisGgraphYmin-Ymax--- + if not yvalue == '': + yvalueList = yvalue.split(",") + try: + value1 = float(yvalueList[0]) + value2 = float(yvalueList[1]) + except: + self.console.clear() + self.console.append("Please Write corrects parameter Ymix-Ymax") + return 0 + name1 = 'ymin' + name2 = 'ymax' + format = 'float' + opObj.addParameter(name=name1, value=value1, format=format) + opObj.addParameter(name=name2, value=value2, format=format) + + if self.specHeisGraphSaveSpectra.isChecked(): + name_parameter1 = 'save' + name_parameter2 = 'figpath' + name_parameter3 = 'figfile' + value1 = '1' + value2 = self.specHeisGraphPath.text() + value3 = self.specHeisGraphPrefix.text() + format1 = 'bool' + format2 = 'str' + opObj.addParameter(name=name_parameter1, value=value1 , format=format1) + opObj.addParameter(name=name_parameter2, value=value2, format=format2) + if not value3 == "": + try: + value3 = str(self.specHeisGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=self.specHeisGraphPrefix.text(), format='str') + + # opObj.addParameter(name=name_parameter3, value=value3, format=format2) + # opObj.addParameter(name='wr_period', value='5',format='int') + + if self.specHeisGraphftpSpectra.isChecked(): + opObj.addParameter(name='ftp', value='1', format='int') + self.addFTPConfiguration(puObj, opObj) + + if self.specHeisGraphCebRTIplot.isChecked(): + name_operation = 'Plot' + optype = 'other' + name_parameter = 'type' + value = 'RTIfromSpectraHeis' + format = 'str' + + if self.idImagrtiHeis == 0: + self.idImagrtiHeis = 900 + else: + self.idImagrtiHeis = self.idImagrtiHeis + 1 + + name_parameter1 = 'id' + value1 = int(self.idImagrtiHeis) + format1 = 'int' + + format = 'str' + + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter, value=value, format=format) + opObj.addParameter(name=name_parameter1, value=value1, format=format1) + + channelList = self.specHeisGgraphChannelList.text() + xvalue = self.specHeisGgraphTminTmax.text() + yvalue = self.specHeisGgraphYminYmax.text() + timerange = self.specHeisGgraphTimeRange.text() + + if not channelList == '': + opObj.addParameter(name='channelList', value=channelList, format='intlist') + + if not xvalue == '': + xvalueList = xvalue.split(',') + try: + value = float(xvalueList[0]) + value = float(xvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='xmin', value=xvalueList[0], format=format) + opObj.addParameter(name='xmax', value=xvalueList[1], format=format) + + if not timerange == '': + format = 'int' + try: + timerange = int(timerange) + except: + return 0 + opObj.addParameter(name='timerange', value=timerange, format=format) + + + if not yvalue == '': + yvalueList = yvalue.split(",") + try: + value = float(yvalueList[0]) + value = float(yvalueList[1]) + except: + return 0 + format = 'float' + opObj.addParameter(name='ymin', value=yvalueList[0], format=format) + opObj.addParameter(name='ymax', value=yvalueList[1], format=format) + + if self.specHeisGraphSaveRTIplot.isChecked(): + opObj.addParameter(name='save', value='1', format='bool') + opObj.addParameter(name='figpath', value=self.specHeisGraphPath.text(), format='str') + value = self.specHeisGraphPrefix.text() + if not value == "": + try: + value = str(self.specHeisGraphPrefix.text()) + except: + self.console.clear() + self.console.append("Please Write prefix") + return 0 + opObj.addParameter(name='figfile', value=value, format='str') + + # test_ftp + if self.specHeisGraphftpRTIplot.isChecked(): + opObj.addParameter(name='ftp', value='1', format='int') + self.addFTPConfiguration(puObj, opObj) + + # if something happened + parms_ok, output_path, blocksperfile, metada = self.checkInputsPUSave(datatype='SpectraHeis') + name_operation = 'FitsWriter' + optype = 'other' + name_parameter1 = 'path' + name_parameter2 = 'dataBlocksPerFile' + name_parameter3 = 'metadatafile' + value1 = output_path + value2 = blocksperfile + value3 = metada + format2 = "int" + format3 = "str" + if parms_ok: + opObj = puObj.addOperation(name=name_operation, optype=optype) + opObj.addParameter(name=name_parameter1, value=value1) + opObj.addParameter(name=name_parameter2, value=value2, format=format2) + opObj.addParameter(name=name_parameter3, value=value3, format=format3) + + self.showPUSpectraHeisProperties(puObj) + + self.console.clear() + self.console.append("If you want to save your project") + self.console.append("click on your project name in the Tree Project Explorer") + + + + @pyqtSignature("int") + def on_specHeisGraphCebSpectraplot_stateChanged(self, p0): + + if p0 == 2: + self.specHeisGgraphChannelList.setEnabled(True) + self.specHeisGgraphXminXmax.setEnabled(True) + self.specHeisGgraphYminYmax.setEnabled(True) + if p0 == 0: + self.specHeisGgraphXminXmax.setEnabled(False) + self.specHeisGgraphYminYmax.setEnabled(False) + + @pyqtSignature("int") + def on_specHeisGraphCebRTIplot_stateChanged(self, p0): + + if p0 == 2: + self.specHeisGgraphChannelList.setEnabled(True) + self.specHeisGgraphTminTmax.setEnabled(True) + self.specHeisGgraphYminYmax.setEnabled(True) + self.specHeisGgraphTimeRange.setEnabled(True) + + if p0 == 0: + self.specHeisGgraphTminTmax.setEnabled(False) + self.specHeisGgraphYminYmax.setEnabled(False) + self.specHeisGgraphTimeRange.setEnabled(False) + + @pyqtSignature("int") + def on_specHeisGraphSaveSpectra_stateChanged(self, p0): + """ + """ + if p0 == 2: + self.specHeisGraphPath.setEnabled(True) + self.specHeisGraphPrefix.setEnabled(True) + self.specHeisGraphToolPath.setEnabled(True) + if p0 == 0: + self.specHeisGraphPath.setEnabled(False) + self.specHeisGraphPrefix.setEnabled(False) + self.specHeisGraphToolPath.setEnabled(False) + + @pyqtSignature("int") + def on_specHeisGraphSaveRTIplot_stateChanged(self, p0): + if p0 == 2: + self.specHeisGraphPath.setEnabled(True) + self.specHeisGraphPrefix.setEnabled(True) + self.specHeisGraphToolPath.setEnabled(True) + + #-------ftp-----# + @pyqtSignature("int") + def on_specHeisGraphftpSpectra_stateChanged(self, p0): + """ + """ + if p0 == 2: + self.specHeisGgraphftpratio.setEnabled(True) + + if p0 == 0: + self.specHeisGgraphftpratio.setEnabled(False) + + @pyqtSignature("int") + def on_specHeisGraphftpRTIplot_stateChanged(self, p0): + if p0 == 2: + self.specHeisGgraphftpratio.setEnabled(True) + + @pyqtSignature("") + def on_specHeisGraphClear_clicked(self): + pass + + def on_click(self, index): + + self.selectedItemTree = self.projectExplorerModel.itemFromIndex(index) + if self.getSelectedProjectObj(): + projectObjView = self.getSelectedProjectObj() + project_name, description = projectObjView.name, projectObjView.description + id = int(projectObjView.id) + idReadUnit = projectObjView.getReadUnitId() + readUnitObj = projectObjView.getProcUnitObj(idReadUnit) + datatype, data_path, startDate, endDate, startTime, endTime , online , delay, walk , set = self.showProjectProperties(projectObjView) + # show ProjectView + self.refreshProjectWindow(project_name, description, datatype, data_path, startDate, endDate, startTime, endTime, online, delay, set) + if datatype == 'Voltage': + ext = '.r' + elif datatype == 'Spectra': + ext = '.pdata' + elif datatype == 'Fits': + ext = '.fits' + if online == 0: + self.proComStartDate.clear() + self.proComEndDate.clear() + self.loadDays(data_path, ext, walk) + self.tabProject.setEnabled(True) + self.tabVoltage.setEnabled(False) + self.tabSpectra.setEnabled(False) + self.tabCorrelation.setEnabled(False) + self.tabSpectraHeis.setEnabled(False) + self.tabWidgetProject.setCurrentWidget(self.tabProject) + + if self.selectedItemTree.text() == 'Voltage': + datatype = 'Voltage' + puObj = self.getSelectedPUObj() + self.showtabPUCreated(datatype=datatype) + if len(puObj.getOperationObjList()) == 1: + self.setInputsPU_View(datatype) + else: + self.refreshPUWindow(datatype=datatype, puObj=puObj) + self.showPUVoltageProperties(puObj) + + if self.selectedItemTree.text() == 'Spectra': + + datatype = 'Spectra' + puObj = self.getSelectedPUObj() + self.showtabPUCreated(datatype=datatype) + if readUnitObj.datatype == 'Spectra': + self.specOpnFFTpoints.setEnabled(False) + self.specOpProfiles.setEnabled(False) + self.specOpippFactor.setEnabled(False) + + else: + self.specOpnFFTpoints.setEnabled(True) + self.specOpProfiles.setEnabled(True) + self.specOpippFactor.setEnabled(True) + + if len(puObj.getOperationObjList()) == 1: + self.setInputsPU_View(datatype) + + opObj = puObj.getOperationObj(name="init") + if opObj == None: + self.specOpnFFTpoints.clear() + self.specOpProfiles.clear() + self.specOpippFactor.clear() + else: + parmObj = opObj.getParameterObj(parameterName='nFFTPoints') + if parmObj == None: + self.specOpnFFTpoints.clear() + else: + value = opObj.getParameterValue(parameterName='nFFTPoints') + self.specOpnFFTpoints.setText(str(value)) + + parmObj = opObj.getParameterObj(parameterName='nProfiles') + if parmObj == None: + self.specOpProfiles.clear() + else: + value = opObj.getParameterValue(parameterName='nProfiles') + self.specOpProfiles.setText(str(value)) + + parmObj = opObj.getParameterObj(parameterName="ippFactor") + if parmObj == None: + self.specOpippFactor.clear() + else: + value = opObj.getParameterValue(parameterName='ippFactor') + self.specOpippFactor.setText(str(value)) + + opObj = puObj.getOperationObj(name="init") + if opObj == None: + self.specOppairsList.clear() + self.specOpCebCrossSpectra.setCheckState(0) + else: + parmObj = opObj.getParameterObj(parameterName='pairsList') + if parmObj == None: + self.specOppairsList.clear() + self.specOpCebCrossSpectra.setCheckState(0) + else: + value = opObj.getParameterValue(parameterName='pairsList') + value = str(value)[1:-1] + self.specOppairsList.setText(str(value)) + self.specOppairsList.setEnabled(True) + self.specOpCebCrossSpectra.setCheckState(QtCore.Qt.Checked) + + else: + self.refreshPUWindow(datatype=datatype, puObj=puObj) + self.showPUSpectraProperties(puObj) + + if self.selectedItemTree.text() == 'Correlation': + self.tabCorrelation.setEnabled(True) + self.tabVoltage.setEnabled(False) + self.tabSpectra.setEnabled(False) + self.tabWidgetProject.setCurrentWidget(self.tabCorrelation) + + if self.selectedItemTree.text() == 'SpectraHeis': + datatype = 'SpectraHeis' + puObj = self.getSelectedPUObj() + self.showtabPUCreated(datatype=datatype) + if len(puObj.getOperationObjList()) == 1: + self.setInputsPU_View(datatype) + else: + self.refreshPUWindow(datatype=datatype, puObj=puObj) + self.showPUSpectraHeisProperties(puObj) + + + def on_right_click(self, pos): + + self.menu = QtGui.QMenu() + quitAction0 = self.menu.addAction("NewProject") + quitAction1 = self.menu.addAction("NewProcessingUnit") + quitAction2 = self.menu.addAction("Delete") + quitAction3 = self.menu.addAction("Exit") + + if len(self.__itemTreeDict) == 0: + quitAction2.setEnabled(False) + else: + quitAction2.setEnabled(True) + + action = self.menu.exec_(self.mapToGlobal(pos)) + + if action == quitAction0: + self. setInputsProject_View() + self.create = True + + if action == quitAction1: + if len(self.__projectObjDict) == 0: + outputstr = "First Create a Project then add Processing Unit" + self.console.clear() + self.console.append(outputstr) + return 0 + else: + self.addPUWindow() + self.console.clear() + self.console.append("Please, Choose the type of Processing Unit") + self.console.append("If your Datatype is rawdata, you will start with processing unit Type Voltage") + self.console.append("If your Datatype is pdata, you will choose between processing unit Type Spectra or Correlation") + self.console.append("If your Datatype is fits, you will start with processing unit Type SpectraHeis") + + if action == quitAction2: + index = self.selectedItemTree + try: + index.parent() + except: + self.console.append('First left click on Project or Processing Unit') + return 0 + # print index.parent(),index + if index.parent() == None: + self.projectExplorerModel.removeRow(index.row()) + else: + index.parent().removeRow(index.row()) + self.deleteProjectorPU() + self.console.clear() + # for i in self.projectExplorerTree.selectionModel().selection().indexes(): + # print i.row() + + if action == quitAction3: + return + + def refreshProjectWindow(self, project_name, description, datatype, data_path, startDate, endDate, startTime, endTime, online, delay, set): + + self.proName.setText(str(project_name)) + + if datatype == 'Voltage': + ext = '.r' + value = 0 + elif datatype == 'Spectra': + ext = '.pdata' + value = 1 + elif datatype == 'Fits': + ext = 'fits' + value = 2 + self.proDataType.setText(ext) + self.proDataPath.setText(str(data_path)) + self.proComDataType.setCurrentIndex(value) + self.proComReadMode.setCurrentIndex(int(online)) + self.proDelay.setText(str(delay)) + self.proSet.setText(str(set)) + self.proComStartDate.clear() + self.proComEndDate.clear() + self.proComStartDate.addItem(str(startDate)) + self.proComEndDate.addItem(str(endDate)) + starTime = str(startTime) + starlist = starTime.split(":") + endTime = str(endTime) + endlist = endTime.split(":") + self.time.setHMS(int(starlist[0]), int(starlist[1]), int(starlist[2])) + self.proStartTime.setTime(self.time) + self.time.setHMS(int(endlist[0]), int(endlist[1]), int(endlist[2])) + self.proEndTime.setTime(self.time) + self.proDescription.clear() + self.proDescription.append(description) + + def refreshPUWindow(self, datatype, puObj): + + if datatype == 'Voltage': + opObj = puObj.getOperationObj(name='setRadarFrequency') + if opObj == None: + self.volOpRadarfrequency.clear() + self.volOpCebRadarfrequency.setCheckState(0) + else: + value = opObj.getParameterValue(parameterName='frequency') + value = str(value) + self.volOpRadarfrequency.setText(value) + self.volOpRadarfrequency.setEnabled(True) + self.volOpCebRadarfrequency.setCheckState(QtCore.Qt.Checked) + + + opObj = puObj.getOperationObj(name="selectChannels") + if opObj == None: + self.volOpChannel.clear() + self.volOpCebChannels.setCheckState(0) + + else: + value = opObj.getParameterValue(parameterName='channelList') + value = str(value)[1:-1] + self.volOpChannel.setText(value) + self.volOpChannel.setEnabled(True) + self.volOpCebChannels.setCheckState(QtCore.Qt.Checked) + + + opObj = puObj.getOperationObj(name="selectHeights") + if opObj == None: + self.volOpHeights.clear() + self.volOpCebHeights.setCheckState(0) + else: + value1 = int(opObj.getParameterValue(parameterName='minHei')) + value1 = str(value1) + value2 = int(opObj.getParameterValue(parameterName='maxHei')) + value2 = str(value2) + value = value1 + "," + value2 + self.volOpHeights.setText(value) + self.volOpHeights.setEnabled(True) + self.volOpCebHeights.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name="filterByHeights") + if opObj == None: + self.volOpFilter.clear() + self.volOpCebFilter.setCheckState(0) + else: + value = opObj.getParameterValue(parameterName='window') + value = str(value) + self.volOpFilter.setText(value) + self.volOpFilter.setEnabled(True) + self.volOpCebFilter.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name="ProfileSelector") + if opObj == None: + self.volOpProfile.clear() + self.volOpCebProfile.setCheckState(0) + else: + for parmObj in opObj.getParameterObjList(): + if parmObj.name == "profileRangeList": + value = opObj.getParameterValue(parameterName='profileRangeList') + value = str(value)[1:-1] + self.volOpProfile.setText(value) + self.volOpProfile.setEnabled(True) + self.volOpCebProfile.setCheckState(QtCore.Qt.Checked) + self.volOpComProfile.setCurrentIndex(1) + if parmObj.name == "profileList": + value = opObj.getParameterValue(parameterName='profileList') + value = str(value)[1:-1] + self.volOpProfile.setText(value) + self.volOpProfile.setEnabled(True) + self.volOpCebProfile.setCheckState(QtCore.Qt.Checked) + self.volOpComProfile.setCurrentIndex(0) + + + opObj = puObj.getOperationObj(name="Decoder") + if opObj == None: + self.volOpCebDecodification.setCheckState(0) + else: + try: + valueCode = opObj.getParameterValue(parameterName='nCode') + status = "on" + except: + status = "off" + if not status == "off": + if int(valueCode) == 1: + valueBaud = opObj.getParameterValue(parameterName='nBaud') + if int(valueBaud) == 3: + self.volOpComCode.setCurrentIndex(0) + if int(valueBaud) == 4: + self.volOpComCode.setCurrentIndex(1) + if int(valueBaud) == 5: + self.volOpComCode.setCurrentIndex(2) + if int(valueBaud) == 7: + self.volOpComCode.setCurrentIndex(3) + if int(valueBaud) == 11: + self.volOpComCode.setCurrentIndex(4) + if int(valueBaud) == 13: + self.volOpComCode.setCurrentIndex(5) + else: + valueBaud = opObj.getParameterValue(parameterName='nBaud') + if int(valueBaud) == 3: + self.volOpComCode.setCurrentIndex(6) + if int(valueBaud) == 4: + self.volOpComCode.setCurrentIndex(7) + if int(valueBaud) == 5: + self.volOpComCode.setCurrentIndex(8) + if int(valueBaud) == 7: + self.volOpComCode.setCurrentIndex(9) + if int(valueBaud) == 11: + self.volOpComCode.setCurrentIndex(10) + if int(valueBaud) == 13: + self.volOpComCode.setCurrentIndex(11) + + for parmObj in opObj.getParameterObjList(): + if parmObj.name == "nBaud": + value = opObj.getParameterValue(parameterName='nBaud') + if parmObj.name == "mode": + value = opObj.getParameterValue(parameterName='mode') + self.volOpComMode.setCurrentIndex(value) + else: + self.volOpComCode.setCurrentIndex(12) + self.volOpCebDecodification.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name="CohInt") + if opObj == None: + self.volOpCohInt.clear() + self.volOpCebCohInt.setCheckState(0) + else: + value = opObj.getParameterValue(parameterName='n') + self.volOpCohInt.setText(str(value)) + self.volOpCohInt.setEnabled(True) + self.volOpCebCohInt.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name='Plot') + if opObj == None: + self.volGraphCebshow.setCheckState(0) + else: + self.volGraphCebshow.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterObj(parameterName='channelList') + if value == None: + self.volGraphChannelList.clear() + else: + value = opObj.getParameterValue(parameterName='channelList') + value = str(value)[1:-1] + self.volGraphChannelList.setText(value) + self.volOpProfile.setEnabled(True) + + for parmObj in opObj.getParameterObjList(): + if parmObj.name == "xmin": + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.volGraphfreqrange.setText(value) + else: + self.volGraphfreqrange.clear() + for parmObj in opObj.getParameterObjList(): + if parmObj.name == "ymin": + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + value2 = str(value2) + self.volGraphHeightrange.setText(value) + else: + self.volGraphHeightrange.clear() + + + for parmObj in opObj.getParameterObjList(): + if parmObj.name == "save": + self.volGraphCebSave.setCheckState(QtCore.Qt.Checked) + else: + self.volGraphCebSave.setCheckState(QtCore.Qt.Unchecked) + + # outputVoltageWrite + opObj = puObj.getOperationObj(name='VoltageWriter') + if opObj == None: + self.volOutputPath.clear() + self.volOutputblocksperfile.clear() + self.volOutputprofilesperblock.clear() + else: + value = opObj.getParameterObj(parameterName='path') + if value == None: + self.volOutputPath.clear() + else: + value = opObj.getParameterValue(parameterName='path') + path = str(value) + self.volOutputPath.setText(path) + value = opObj.getParameterObj(parameterName='blocksPerFile') + if value == None: + self.volOutputblocksperfile.clear() + else: + value = opObj.getParameterValue(parameterName='blocksPerFile') + blocksperfile = str(value) + self.volOutputblocksperfile.setText(blocksperfile) + value = opObj.getParameterObj(parameterName='profilesPerBlock') + if value == None: + self.volOutputprofilesperblock.clear() + else: + value = opObj.getParameterValue(parameterName='profilesPerBlock') + profilesPerBlock = str(value) + self.volOutputprofilesperblock.setText(profilesPerBlock) + + if datatype == 'Spectra': + + opObj = puObj.getOperationObj(name='setRadarFrequency') + if opObj == None: + self.specOpRadarfrequency.clear() + self.specOpCebRadarfrequency.setCheckState(0) + else: + value = opObj.getParameterValue(parameterName='frequency') + value = str(value) + self.specOpRadarfrequency.setText(value) + self.specOpRadarfrequency.setEnabled(True) + self.specOpCebRadarfrequency.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name="init") + if opObj == None: + self.specOpnFFTpoints.clear() + self.specOpProfiles.clear() + self.specOpippFactor.clear() + else: + parmObj = opObj.getParameterObj(parameterName='nFFTPoints') + if parmObj == None: + self.specOpnFFTpoints.clear() + else: + self.specOpnFFTpoints.setEnabled(True) + value = opObj.getParameterValue(parameterName='nFFTPoints') + self.specOpnFFTpoints.setText(str(value)) + + parmObj = opObj.getParameterObj(parameterName='nProfiles') + if parmObj == None: + self.specOpProfiles.clear() + else: + self.specOpProfiles.setEnabled(True) + value = opObj.getParameterValue(parameterName='nProfiles') + self.specOpProfiles.setText(str(value)) + + parmObj = opObj.getParameterObj(parameterName='ippFactor') + if parmObj == None: + self.specOpippFactor.clear() + else: + self.specOpippFactor.setEnabled(True) + value = opObj.getParameterValue(parameterName='ippFactor') + self.specOpippFactor.setText(str(value)) + + opObj = puObj.getOperationObj(name="init") + if opObj == None: + self.specOppairsList.clear() + self.specOpCebCrossSpectra.setCheckState(0) + else: + parmObj = opObj.getParameterObj(parameterName='pairsList') + if parmObj == None: + self.specOppairsList.clear() + self.specOpCebCrossSpectra.setCheckState(0) + else: + value = opObj.getParameterValue(parameterName='pairsList') + value = str(value)[1:-1] + self.specOppairsList.setText(str(value)) + self.specOppairsList.setEnabled(True) + self.specOpCebCrossSpectra.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name="selectChannels") + if opObj == None: + self.specOpChannel.clear() + self.specOpCebChannel.setCheckState(0) + else: + value = opObj.getParameterValue(parameterName='channelList') + value = str(value)[1:-1] + self.specOpChannel.setText(value) + self.specOpChannel.setEnabled(True) + self.specOpCebChannel.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name="selectHeights") + if opObj == None: + self.specOpHeights.clear() + self.specOpCebHeights.setCheckState(0) + else: + value1 = int(opObj.getParameterValue(parameterName='minHei')) + value1 = str(value1) + value2 = int(opObj.getParameterValue(parameterName='maxHei')) + value2 = str(value2) + value = value1 + "," + value2 + self.specOpHeights.setText(value) + self.specOpHeights.setEnabled(True) + self.specOpCebHeights.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name="IncohInt") + if opObj == None: + self.specOpIncoherent.clear() + self.specOpCebIncoherent.setCheckState(0) + else: + for parmObj in opObj.getParameterObjList(): + if parmObj.name == 'timeInterval': + value = opObj.getParameterValue(parameterName='timeInterval') + value = float(value) + self.specOpIncoherent.setText(str(value)) + self.specOpIncoherent.setEnabled(True) + self.specOpCebIncoherent.setCheckState(QtCore.Qt.Checked) + self.specOpCobIncInt.setCurrentIndex(0) + + if parmObj.name == 'n': + value = opObj.getParameterValue(parameterName='n') + value = float(value) + self.specOpIncoherent.setText(str(value)) + self.specOpIncoherent.setEnabled(True) + self.specOpCebIncoherent.setCheckState(QtCore.Qt.Checked) + self.specOpCobIncInt.setCurrentIndex(1) + + opObj = puObj.getOperationObj(name="removeDC") + if opObj == None: + self.specOpCebRemoveDC.setCheckState(0) + else: + self.specOpCebRemoveDC.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='mode') + if value == 1: + self.specOpComRemoveDC.setCurrentIndex(0) + elif value == 2: + self.specOpComRemoveDC.setCurrentIndex(1) + + opObj = puObj.getOperationObj(name="removeInterference") + if opObj == None: + self.specOpCebRemoveInt.setCheckState(0) + else: + self.specOpCebRemoveInt.setCheckState(QtCore.Qt.Checked) + + opObj = puObj.getOperationObj(name='getNoise') + if opObj == None: + self.specOpCebgetNoise.setCheckState(0) + self.specOpgetNoise.clear() + else: + self.specOpCebgetNoise.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='minHei') + if parmObj == None: + self.specOpgetNoise.clear() + value1 = None + else: + value1 = opObj.getParameterValue(parameterName='minHei') + value1 = str(value1) + parmObj = opObj.getParameterObj(parameterName='maxHei') + if parmObj == None: + value2 = None + value = value1 + self.specOpgetNoise.setText(value) + self.specOpgetNoise.setEnabled(True) + else: + value2 = opObj.getParameterValue(parameterName='maxHei') + value2 = str(value2) + parmObj = opObj.getParameterObj(parameterName='minVel') + if parmObj == None: + value3 = None + value = value1 + "," + value2 + self.specOpgetNoise.setText(value) + self.specOpgetNoise.setEnabled(True) + else: + value3 = opObj.getParameterValue(parameterName='minVel') + value3 = str(value3) + parmObj = opObj.getParameterObj(parameterName='maxVel') + if parmObj == None: + value4 = None + value = value1 + "," + value2 + "," + value3 + self.specOpgetNoise.setText(value) + self.specOpgetNoise.setEnabled(True) + else: + value4 = opObj.getParameterValue(parameterName='maxVel') + value4 = str(value4) + value = value1 + "," + value2 + "," + value3 + ',' + value4 + self.specOpgetNoise.setText(value) + self.specOpgetNoise.setEnabled(True) + + opObj = puObj.getOperationObj(name='Plot') + opObj = puObj.getOpObjfromParamValue(value="SpectraPlot") + if opObj == None: + self.specGraphCebSpectraplot.setCheckState(0) + self.specGraphSaveSpectra.setCheckState(0) + self.specGraphftpSpectra.setCheckState(0) + + else: + operationSpectraPlot = "Enable" + self.specGraphCebSpectraplot.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + self.specGgraphChannelList.clear() + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListSpectraPlot = str(value)[1:-1] + self.specGgraphChannelList.setText(channelListSpectraPlot) + self.specGgraphChannelList.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='xmin') + if parmObj == None: + self.specGgraphFreq.clear() + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphFreq.setText(value) + self.specGgraphFreq.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='ymin') + if parmObj == None: + self.specGgraphHeight.clear() + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphHeight.setText(value) + self.specGgraphHeight.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='zmin') + if parmObj == None: + self.specGgraphDbsrange.clear() + else: + value1 = opObj.getParameterValue(parameterName='zmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='zmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphDbsrange.setText(value) + self.specGgraphDbsrange.setEnabled(True) + + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.specGraphSaveSpectra.setCheckState(0) + else: + self.specGraphSaveSpectra.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + self.specGraphPath.setText(value) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + self.specGraphftpSpectra.setCheckState(0) + else: + self.specGraphftpSpectra.setCheckState(QtCore.Qt.Checked) + try: + value = opObj.getParameterValue(parameterName='wr_period') + except: + value = " " + self.specGgraphftpratio.setText(str(value)) + + opObj = puObj.getOpObjfromParamValue(value="CrossSpectraPlot") + if opObj == None: + self.specGraphCebCrossSpectraplot.setCheckState(0) + self.specGraphSaveCross.setCheckState(0) + + else: + operationCrossSpectraPlot = "Enable" + self.specGraphCebCrossSpectraplot.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='xmin') + if parmObj == None: + self.specGgraphFreq.clear() + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphFreq.setText(value) + self.specGgraphFreq.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='ymin') + if parmObj == None: + self.specGgraphHeight.clear() + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphHeight.setText(value) + self.specGgraphHeight.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='zmin') + if parmObj == None: + self.specGgraphDbsrange.clear() + else: + value1 = opObj.getParameterValue(parameterName='zmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='zmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphDbsrange.setText(value) + self.specGgraphDbsrange.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.specGraphSaveCross.setCheckState(0) + + else: + self.specGraphSaveCross.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + self.specGraphPath.setText(value) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + self.specGraphftpCross.setCheckState(0) + else: + self.specGraphftpCross.setCheckState(QtCore.Qt.Checked) + try: + value = opObj.getParameterValue(parameterName='wr_period') + except: + value = " " + self.specGgraphftpratio.setText(str(value)) + + opObj = puObj.getOpObjfromParamValue(value="RTIPlot") + if opObj == None: + self.specGraphCebRTIplot.setCheckState(0) + self.specGraphSaveRTIplot.setCheckState(0) + self.specGraphftpRTIplot.setCheckState(0) + else: + self.specGraphCebRTIplot.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + self.specGgraphChannelList.clear() + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListRTIPlot = str(value)[1:-1] + self.specGgraphChannelList.setText(channelListRTIPlot) + self.specGgraphChannelList.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='xmin') + if parmObj == None: + self.specGgraphTminTmax.clear() + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphTminTmax.setText(value) + self.specGgraphTminTmax.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='timerange') + if parmObj == None: + self.specGgraphTimeRange.clear() + else: + value1 = opObj.getParameterValue(parameterName='timerange') + value1 = str(value1) + self.specGgraphTimeRange.setText(value1) + self.specGgraphTimeRange.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='ymin') + if parmObj == None: + self.specGgraphHeight.clear() + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphHeight.setText(value) + self.specGgraphHeight.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='zmin') + if parmObj == None: + self.specGgraphDbsrange.clear() + else: + value1 = opObj.getParameterValue(parameterName='zmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='zmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphDbsrange.setText(value) + self.specGgraphDbsrange.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.specGraphSaveRTIplot.setCheckState(0) + else: + self.specGraphSaveRTIplot.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + self.specGraphPath.setText(value) + #---------add----# + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + self.specGraphftpRTIplot.setCheckState(0) + else: + self.specGraphftpRTIplot.setCheckState(QtCore.Qt.Checked) + try: + value = opObj.getParameterValue(parameterName='wr_period') + except: + value = " " + self.specGgraphftpratio.setText(str(value)) + + + opObj = puObj.getOpObjfromParamValue(value="CoherenceMap") + if opObj == None: + self.specGraphCebCoherencmap.setCheckState(0) + self.specGraphSaveCoherencemap.setCheckState(0) + self.specGraphftpCoherencemap.setCheckState(0) + + else: + operationCoherenceMap = "Enable" + self.specGraphCebCoherencmap.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='xmin') + if parmObj == None: + self.specGgraphTminTmax.clear() + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphTminTmax.setText(value) + self.specGgraphTminTmax.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='timerange') + if parmObj == None: + self.specGgraphTimeRange.clear() + else: + value1 = opObj.getParameterValue(parameterName='timerange') + value1 = str(value1) + self.specGgraphTimeRange.setText(value1) + self.specGgraphTimeRange.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='ymin') + if parmObj == None: + self.specGgraphHeight.clear() + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphHeight.setText(value) + self.specGgraphHeight.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='zmin') + if parmObj == None: + self.specGgraphmagnitud.clear() + else: + value1 = opObj.getParameterValue(parameterName='zmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='zmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphmagnitud.setText(value) + self.specGgraphmagnitud.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.specGraphSaveCoherencemap.setCheckState(0) + else: + self.specGraphSaveCoherencemap.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + self.specGraphPath.setText(value) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + self.specGraphftpCoherencemap.setCheckState(0) + else: + self.specGraphftpCoherencemap.setCheckState(QtCore.Qt.Checked) + try: + value = opObj.getParameterValue(parameterName='wr_period') + except: + value = " " + self.specGgraphftpratio.setText(str(value)) + + + opObj = puObj.getOpObjfromParamValue(value="PowerProfilePlot") + if opObj == None: + self.specGraphPowerprofile.setCheckState(0) + self.specGraphSavePowerprofile.setCheckState(0) + operationPowerProfilePlot = "Disabled" + channelList = None + freq_vel = None + heightsrange = None + else: + operationPowerProfilePlot = "Enable" + self.specGraphPowerprofile.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='xmin') + if parmObj == None: + self.specGgraphDbsrange.clear() + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphDbsrange.setText(value) + self.specGgraphDbsrange.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='ymin') + if parmObj == None: + self.specGgraphHeight.clear() + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphHeight.setText(value) + self.specGgraphHeight.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.specGraphSavePowerprofile.setCheckState(0) + else: + self.specGraphSavePowerprofile.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + self.specGraphPath.setText(value) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + self.specGraphftpPowerprofile.setCheckState(0) + else: + self.specGraphftpPowerprofile.setCheckState(QtCore.Qt.Checked) + try: + value = opObj.getParameterValue(parameterName='wr_period') + except: + value = " " + self.specGgraphftpratio.setText(str(value)) + # -noise + opObj = puObj.getOpObjfromParamValue(value="Noise") + if opObj == None: + self.specGraphCebRTInoise.setCheckState(0) + self.specGraphSaveRTInoise.setCheckState(0) + self.specGraphftpRTInoise.setCheckState(0) + else: + self.specGraphCebRTInoise.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + self.specGgraphChannelList.clear() + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListRTINoise = str(value)[1:-1] + self.specGgraphChannelList.setText(channelListRTINoise) + self.specGgraphChannelList.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='xmin') + if parmObj == None: + self.specGgraphTminTmax.clear() + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphTminTmax.setText(value) + self.specGgraphTminTmax.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='timerange') + if parmObj == None: + self.specGgraphTimeRange.clear() + else: + value1 = opObj.getParameterValue(parameterName='timerange') + value1 = str(value1) + self.specGgraphTimeRange.setText(value1) + self.specGgraphTimeRange.setEnabled(True) + + + parmObj = opObj.getParameterObj(parameterName='ymin') + if parmObj == None: + self.specGgraphDbsrange.clear() + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + self.specGgraphDbsrange.setText(value) + self.specGgraphDbsrange.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.specGraphSaveRTInoise.setCheckState(0) + else: + self.specGraphSaveRTInoise.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + self.specGraphPath.setText(value) + #---------add----# + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + self.specGraphftpRTInoise.setCheckState(0) + else: + self.specGraphftpRTInoise.setCheckState(QtCore.Qt.Checked) + try: + value = opObj.getParameterValue(parameterName='wr_period') + except: + value = " " + self.specGgraphftpratio.setText(str(value)) + + # outputSpectraWrite + opObj = puObj.getOperationObj(name='SpectraWriter') + if opObj == None: + self.specOutputPath.clear() + self.specOutputblocksperfile.clear() + self.specOutputprofileperblock.clear() + else: + value = opObj.getParameterObj(parameterName='path') + if value == None: + self.specOutputPath.clear() + else: + value = opObj.getParameterValue(parameterName='path') + path = str(value) + self.specOutputPath.setText(path) + value = opObj.getParameterObj(parameterName='blocksPerFile') + if value == None: + self.specOutputblocksperfile.clear() + else: + value = opObj.getParameterValue(parameterName='blocksPerFile') + blocksperfile = str(value) + self.specOutputblocksperfile.setText(blocksperfile) + value = opObj.getParameterObj(parameterName='profilesPerBlock') + if value == None: + self.specOutputprofileperblock.clear() + else: + value = opObj.getParameterValue(parameterName='profilesPerBlock') + profilesPerBlock = str(value) + self.specOutputprofileperblock.setText(profilesPerBlock) + + if datatype == 'SpectraHeis': + opObj = puObj.getOperationObj(name="IncohInt4SpectraHeis") + if opObj == None: + self.specHeisOpIncoherent.clear() + self.specHeisOpCebIncoherent.setCheckState(0) + else: + for parmObj in opObj.getParameterObjList(): + if parmObj.name == 'timeInterval': + value = opObj.getParameterValue(parameterName='timeInterval') + value = float(value) + self.specHeisOpIncoherent.setText(str(value)) + self.specHeisOpIncoherent.setEnabled(True) + self.specHeisOpCebIncoherent.setCheckState(QtCore.Qt.Checked) + self.specHeisOpCobIncInt.setCurrentIndex(0) + # SpectraHeis Graph + opObj = puObj.getOperationObj(name='Plot') + opObj = puObj.getOpObjfromParamValue(value="SpectraHeisScope") + if opObj == None: + self.specHeisGraphCebSpectraplot.setCheckState(0) + self.specHeisGraphSaveSpectra.setCheckState(0) + self.specHeisGraphftpSpectra.setCheckState(0) + + else: + operationSpectraHeisScope = "Enable" + self.specHeisGraphCebSpectraplot.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + self.specHeisGgraphChannelList.clear() + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListSpectraHeisScope = str(value)[1:-1] + self.specHeisGgraphChannelList.setText(channelListSpectraHeisScope) + self.specHeisGgraphChannelList.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='xmin') + if parmObj == None: + self.specHeisGgraphXminXmax.clear() + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specHeisGgraphXminXmax.setText(value) + self.specHeisGgraphXminXmax.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='ymin') + if parmObj == None: + self.specHeisGgraphYminYmax.clear() + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + self.specHeisGgraphYminYmax.setText(value) + self.specHeisGgraphYminYmax.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.specHeisGraphSaveSpectra.setCheckState(0) + else: + self.specHeisGraphSaveSpectra.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + self.specHeisGraphPath.setText(value) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + self.specHeisGraphftpSpectra.setCheckState(0) + else: + self.specHeisGraphftpSpectra.setCheckState(QtCore.Qt.Checked) + try: + value = opObj.getParameterValue(parameterName='wr_period') + except: + value = " " + self.specHeisGgraphftpratio.setText(str(value)) + + + opObj = puObj.getOpObjfromParamValue(value="RTIfromSpectraHeis") + if opObj == None: + self.specHeisGraphCebRTIplot.setCheckState(0) + self.specHeisGraphSaveRTIplot.setCheckState(0) + self.specHeisGraphftpRTIplot.setCheckState(0) + else: + self.specHeisGraphCebRTIplot.setCheckState(QtCore.Qt.Checked) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + self.specHeisGgraphChannelList.clear() + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListRTIPlot = str(value)[1:-1] + self.specGgraphChannelList.setText(channelListRTIPlot) + self.specGgraphChannelList.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='xmin') + if parmObj == None: + self.specHeisGgraphTminTmax.clear() + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + self.specHeisGgraphTminTmax.setText(value) + self.specHeisGgraphTminTmax.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='timerange') + if parmObj == None: + self.specGgraphTimeRange.clear() + else: + value1 = opObj.getParameterValue(parameterName='timerange') + value1 = str(value1) + self.specHeisGgraphTimeRange.setText(value1) + self.specHeisGgraphTimeRange.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName='ymin') + if parmObj == None: + self.specHeisGgraphYminYmax.clear() + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + self.specHeisGgraphYminYmax.setText(value) + self.specHeisGgraphYminYmax.setEnabled(True) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.specHeisGraphSaveRTIplot.setCheckState(0) + else: + self.specHeisGraphSaveRTIplot.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + self.specHeisGraphPath.setText(value) + #---------add----# + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + self.specHeisGraphftpRTIplot.setCheckState(0) + else: + self.specHeisGraphftpRTIplot.setCheckState(QtCore.Qt.Checked) + try: + value = opObj.getParameterValue(parameterName='wr_period') + except: + value = " " + self.specHeisGgraphftpratio.setText(str(value)) + + + + # outputSpectraHeisWrite + opObj = puObj.getOperationObj(name='FitsWriter') + if opObj == None: + self.specHeisOutputPath.clear() + self.specHeisOutputblocksperfile.clear() + self.specHeisOutputMetada.clear() + else: + value = opObj.getParameterObj(parameterName='path') + if value == None: + self.specHeisOutputPath.clear() + else: + value = opObj.getParameterValue(parameterName='path') + path = str(value) + self.specHeisOutputPath.setText(path) + value = opObj.getParameterObj(parameterName='dataBlocksPerFile') + if value == None: + self.specHeisOutputblocksperfile.clear() + else: + value = opObj.getParameterValue(parameterName='dataBlocksPerFile') + blocksperfile = str(value) + self.specHeisOutputblocksperfile.setText(blocksperfile) + value = opObj.getParameterObj(parameterName='metadatafile') + if value == None: + self.specHeisOutputMetada.clear() + else: + value = opObj.getParameterValue(parameterName='metadatafile') + metada = str(value) + self.specHeisOutputMetada.setText(metada) + + + + def setspecGraph(self): + + self.specGgraphChannelList.setEnabled(True) + + def clearspecGraph(self): + + self.specGgraphChannelList.clear() + + def create_comm(self): + self.commCtrlPThread = CommCtrlProcessThread() + self.commCtrlPThread.start() + + def create_timers(self): + self.comm_data_timer = QtCore.QTimer(self) + self.comm_data_timer.timeout.connect(self.on_comm_data_timer) + self.comm_data_timer.start(10) + + def create_figure(self): + self.queue_plot = Queue.Queue() + self.plotmanager = PlotManager(self.queue_plot) + self.plot_timer = QtCore.QTimer() + QtCore.QObject.connect(self.plot_timer, QtCore.SIGNAL("timeout()"), self.periodicCall) + self.plot_timer.start(100) + self.running = 1 + + def periodicCall(self): + """ + Check every 100 ms if there is something new in the queue. + """ + self.plotmanager.processIncoming() + if not self.running: + app.quit() + + def on_comm_data_timer(self): + # lee el data_queue y la coloca en el queue de ploteo + try: + reply = self.commCtrlPThread.data_q.get(block=False) + self.queue_plot.put(reply.data) + + except Queue.Empty: + pass + + def createProjectView(self, id): + + self.create = False + project_name, description, datatype, data_path, starDate, endDate, startTime, endTime, online, delay, walk, set = self.getParmsFromProjectWindow() + + projectObjView = Project() + projectObjView.setup(id=id, name=project_name, description=description) + + self.__projectObjDict[id] = projectObjView + + return projectObjView + + def updateProjectView(self): + + project_name, description, datatype, data_path, starDate, endDate, startTime, endTime, online, delay, walk, set = self.getParmsFromProjectWindow() + + projectObjView = self.getSelectedProjectObj() + projectObjView.update(name=project_name, description=description) + + return projectObjView + + def createReadUnitView(self, projectObjView): + + project_name, description, datatype, data_path, startDate, endDate, startTime, endTime, online, delay, walk , set = self.getParmsFromProjectWindow() + if set == None: + readUnitConfObj = projectObjView.addReadUnit(datatype=datatype, + path=data_path, + startDate=startDate, + endDate=endDate, + startTime=startTime, + endTime=endTime, + online=online, + delay=delay, + walk=walk) + else: + readUnitConfObj = projectObjView.addReadUnit(datatype=datatype, + path=data_path, + startDate=startDate, + endDate=endDate, + startTime=startTime, + endTime=endTime, + online=online, + delay=delay, + walk=walk, + set=set) + + return readUnitConfObj + + def updateReadUnitView(self, projectObjView, idReadUnit): + + project_name, description, datatype, data_path, startDate, endDate, startTime, endTime, online, delay, walk , set = self.getParmsFromProjectWindow() + + readUnitConfObj = projectObjView.getProcUnitObj(idReadUnit) + + if set == None: + + readUnitConfObj.update(datatype=datatype, + path=data_path, + startDate=startDate, + endDate=endDate, + startTime=startTime, + endTime=endTime, + online=online, + delay=delay, + walk=walk) + + else: + readUnitConfObj.update(datatype=datatype, + path=data_path, + startDate=startDate, + endDate=endDate, + startTime=startTime, + endTime=endTime, + online=online, + delay=delay, + walk=walk, + set=set) + + + + return readUnitConfObj + + def createProcUnitView(self, projectObjView, datatype, inputId): + + procUnitConfObj = projectObjView.addProcUnit(datatype=datatype, inputId=inputId) + + self.__puObjDict[procUnitConfObj.getId()] = procUnitConfObj + + return procUnitConfObj + + def updateProcUnitView(self, id): + + procUnitConfObj = projectObjView.getProcUnitObj(id) + procUnitConfObj.removeOperations() + + return procUnitConfObj + + def addPUWindow(self): + + self.configUPWindowObj = UnitProcessWindow(self) + fatherObj = self.getSelectedPUObj() + try: + fatherObj.getElementName() + except: + self.console.append("First left click on Project or Processing Unit") + return 0 + + if fatherObj.getElementName() == 'Project': + readUnitConfObj = fatherObj.getReadUnitObj() + self.configUPWindowObj.dataTypeProject = str(readUnitConfObj.datatype) + + self.configUPWindowObj.getfromWindowList.append(fatherObj) + self.configUPWindowObj.loadTotalList() + self.configUPWindowObj.show() + self.configUPWindowObj.closed.connect(self.createPUWindow) + + def createPUWindow(self): + + self.console.clear() + + if not self.configUPWindowObj.create: + return + + fatherObj = self.configUPWindowObj.getFromWindow + datatype = self.configUPWindowObj.typeofUP + + if fatherObj.getElementName() == 'Project': + inputId = fatherObj.getReadUnitId() + projectObjView = fatherObj + else: + inputId = fatherObj.getId() + projectObjView = self.getSelectedProjectObj() + + #---------------------------- + puObj = self.createProcUnitView(projectObjView, datatype, inputId) + #---------------------------- + self.addPU2ProjectExplorer(id=puObj.getId(), name=datatype) + + self.showtabPUCreated(datatype) + + self.setInputsPU_View(datatype) + + self.showPUinitView() + + def addFTPparmXML(self, obj, server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos): + obj.addParameter(name='server', value=server, format='str') + obj.addParameter(name='folder', value=folder, format='str') + obj.addParameter(name='username', value=username, format='str') + obj.addParameter(name='password', value=password, format='str') + if ftp_wei == None: + pass + else: + obj.addParameter(name='ftp_wei', value=int(ftp_wei), format='int') + if exp_code == None: + pass + else: + obj.addParameter(name='exp_code', value=int(exp_code), format='int') + if sub_exp_code == None: + pass + else: + obj.addParameter(name='sub_exp_code', value=int(sub_exp_code), format='int') + if plot_pos == None: + pass + else: + obj.addParameter(name='plot_pos', value=int(plot_pos), format='int') + + def addFTPConfiguration(self, puObj, opObj): + if self.temporalFTP.create: + server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos = self.temporalFTP.recover() + self.addFTPparmXML(opObj, server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos) + else: + self.temporalFTP.setwithoutconfiguration() + server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos = self.temporalFTP.recover() + self.addFTPparmXML(opObj, server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos) + + if puObj.datatype == "Spectra": + value = self.specGgraphftpratio.text() + if puObj.datatype == "SpectraHeis": + value = self.specHeisGgraphftpratio.text() + if not value == "": + try: + if puObj.datatype == "Spectra": + value = int(self.specGgraphftpratio.text()) + if puObj.datatype == "SpectraHeis": + value = int(self.specHeisGgraphftpratio.text()) + except: + self.console.clear() + self.console.append("Please Write the Ratio") + return 0 + opObj.addParameter(name='wr_period', value=value, format='int') + + def bufferProject(self, caracteristica, principal, description): + self.projectProperCaracteristica.append(caracteristica) + self.projectProperPrincipal.append(principal) + self.projectProperDescripcion.append(description) + return self.projectProperCaracteristica, self.projectProperPrincipal, self.projectProperDescripcion + + + def showProjectProperties(self, projectObjView): + + project_name, description = projectObjView.name, projectObjView.description + + id = projectObjView.id + readUnitId = projectObjView.getReadUnitId() + readUnitObj = projectObjView.getProcUnitObj(readUnitId) + operationObj = readUnitObj.getOperationObj(name='run') + + + datatype = operationObj.getParameterValue(parameterName='datatype') + dpath = operationObj.getParameterValue(parameterName='path') + startDate = operationObj.getParameterValue(parameterName='startDate') + endDate = operationObj.getParameterValue(parameterName='endDate') + startDate = str(startDate) + endDate = str(endDate) + startDateList = startDate.split('-') + endDateList = endDate.split('-') + startDate = startDateList[0] + "/" + startDateList[1] + "/" + startDateList[2] + endDate = endDateList[0] + "/" + endDateList[1] + "/" + endDateList[2] + + startTime = operationObj.getParameterValue(parameterName='startTime') + endTime = operationObj.getParameterValue(parameterName='endTime') + online = operationObj.getParameterValue(parameterName='online') + walk = operationObj.getParameterValue(parameterName='walk') + delay = operationObj.getParameterValue(parameterName='delay') + try: + set = operationObj.getParameterValue(parameterName='set') + except: + set = " " + + if online == 0: + remode = "offline" + else: + remode = "online" + + if walk == 0: + walk_str = 'On Files' + else: + walk_str = 'On Folder' + + self.bufferProject("Properties", "Name", project_name), + self.bufferProject("Properties", "Data Path", dpath) + self.bufferProject("Properties", "Workspace", self.pathWorkSpace) + self.bufferProject("Parameters", "Read Mode ", remode) + self.bufferProject("Parameters", "DataType ", datatype) + self.bufferProject("Parameters", "Start Date", str(startDate)) + self.bufferProject("Parameters", "End Date ", str(endDate)) + self.bufferProject("Parameters", "Start Time", str(startTime)) + self.bufferProject("Parameters", "End Time ", str(endTime)) + self.bufferProject("Parameters", "Delay ", str(delay)) + try: + set = operationObj.getParameterValue(parameterName='set') + self.bufferProject("Parameters", "Set ", set) + except: + set = " " + self.bufferProject("Parameters", "Walk ", str(walk_str)) + self.bufferProject("Parameters", "Time zone", "Local") + self.bufferProject("Description", "Summary ", description) + + self.propertiesModel = treeModel() + self.propertiesModel.showProjectParms(self.projectProperCaracteristica, self.projectProperPrincipal, self.projectProperDescripcion) + self.treeProjectProperties.setModel(self.propertiesModel) + self.treeProjectProperties.expandAll() + self.treeProjectProperties.resizeColumnToContents(0) + self.treeProjectProperties.resizeColumnToContents(1) + + self.projectProperCaracteristica = [] + self.projectProperPrincipal = [] + self.projectProperDescripcion = [] + + return datatype , dpath , startDate , endDate, startTime, endTime, online, delay, walk, set + + def showPUinitView(self): + self.propertiesModel = treeModel() + self.propertiesModel.initPUVoltageView() + self.treeProjectProperties.setModel(self.propertiesModel) + self.treeProjectProperties.expandAll() + self.treeProjectProperties.allColumnsShowFocus() + self.treeProjectProperties.resizeColumnToContents(1) + + def bufferVoltage(self, caracteristica, principal, description): + self.volProperCaracteristica.append(caracteristica) + self.volProperPrincipal.append(principal) + self.volProperDescripcion.append(description) + return self.volProperCaracteristica, self.volProperPrincipal, self.volProperDescripcion + + def showPUVoltageProperties(self, puObj): + + + type = puObj.name + self.bufferVoltage("Processing Unit", "Type", type) + + opObj = puObj.getOperationObj(name="setRadarFrequency") + if opObj == None: + radarfrequency = None + else: + value = opObj.getParameterValue(parameterName='frequency') + value = str(value) + radarfrequency = value + self.bufferVoltage("Processing Unit", "Radar Frequency", radarfrequency) + + opObj = puObj.getOperationObj(name="selectChannels") + if opObj == None: + channel = None + else: + value = opObj.getParameterValue(parameterName='channelList') + value = str(value)[1:-1] + channel = value + self.bufferVoltage("Processing Unit", "Select Channel", channel) + + + + opObj = puObj.getOperationObj(name="selectHeights") + if opObj == None: + heights = None + else: + value1 = int(opObj.getParameterValue(parameterName='minHei')) + value1 = str(value1) + value2 = int(opObj.getParameterValue(parameterName='maxHei')) + value2 = str(value2) + value = value1 + "," + value2 + heights = value + self.bufferVoltage("Processing Unit", "Select Heights", heights) + + + opObj = puObj.getOperationObj(name="filterByHeights") + if opObj == None: + filter = None + else: + value = opObj.getParameterValue(parameterName='window') + value = str(value) + filter = value + self.bufferVoltage("Processing Unit", "Filter", filter) + + + opObj = puObj.getOperationObj(name="ProfileSelector") + if opObj == None: + profile = None + else: + for parmObj in opObj.getParameterObjList(): + if parmObj.name == "profileRangeList": + value = opObj.getParameterValue(parameterName='profileRangeList') + value = str(value)[1:-1] + profile = value + self.bufferVoltage("Processing Unit", "Select Profile", profile) + + if parmObj.name == "profileList": + value = opObj.getParameterValue(parameterName='profileList') + value = str(value)[1:-1] + profile = value + self.bufferVoltage("Processing Unit", "Select Profile", profile) + + opObj = puObj.getOperationObj(name="CohInt") + if opObj == None: + coherentintegration = None + else: + value = opObj.getParameterValue(parameterName='n') + coherentintegration = value + self.bufferVoltage("Processing Unit", "Coherente Integration", coherentintegration) + + + + opObj = puObj.getOperationObj(name="Decoder") + if opObj == None: + self.volOpCebDecodification.setCheckState(0) + code = None + mode = None + else: + self.volOpCebDecodification.setCheckState(QtCore.Qt.Checked) + try: + valueBaud = opObj.getParameterValue(parameterName='nBaud') + except: + status = "off" + try: + valueCode = opObj.getParameterValue(parameterName='nCode') + status = "on" + except: + status = "off" + + if not status == "off": + if int(valueCode) == 1: + Comp = "" + else: + Comp = "+" + "Comp." + code = "Barker" + str(valueBaud) + str(Comp) + else: + code = "Default" + self.bufferVoltage("Decodification", "Code", code) + + try: + value = opObj.getParameterValue(parameterName='mode') + status = "on" + except: + status = "off" + + if not status == "off": + self.volOpComMode.setCurrentIndex(value) + if int(value) == 0: + mode = "Time" + else: + mode = "freq" + str(value) + else: + mode = "Default" + self.bufferVoltage("Decodification", "Mode", mode) + + # graph + opObj = puObj.getOperationObj(name='Plot') + if opObj == None: + self.volGraphCebshow.setCheckState(0) + operation = "Disabled" + channelList = None + freq_vel = None + heightsrange = None + else: + operation = 'Enabled' + self.bufferVoltage("Scope", "Operation", operation), + self.volGraphCebshow.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterObj(parameterName='channelList') + if value == None: + channelList = None + else: + value = opObj.getParameterValue(parameterName='channelList') + value = str(value)[1:-1] + channelList = value + self.bufferVoltage("Scope", "Channel List", channelList) + + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + freq_vel = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + freq_vel = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + freq_vel = value + self.bufferVoltage("Scope", "Freq/Vel", freq_vel) + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + heightsrange = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + fheightsrange = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + heightsrange = value + self.bufferVoltage("Scope", "Height Range", heightsrange) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + self.volGraphCebSave.setCheckState(QtCore.Qt.Unchecked) + figpath = None + else: + self.volGraphCebSave.setCheckState(QtCore.Qt.Checked) + value = opObj.getParameterValue(parameterName='figpath') + figpath = value + self.bufferVoltage("Scope", "Path", figpath) + # outputVoltageWrite + opObj = puObj.getOperationObj(name='VoltageWriter') + if opObj == None: + pass + else: + operation = 'Enabled' + self.bufferVoltage("Output", "Operation", operation) + value = opObj.getParameterObj(parameterName='path') + if value == None: + path = None + else: + value = opObj.getParameterValue(parameterName='path') + path = str(value) + self.bufferVoltage("Output", "Path", path) + value = opObj.getParameterObj(parameterName='blocksPerFile') + if value == None: + blocksperfile = None + else: + value = opObj.getParameterValue(parameterName='blocksPerFile') + blocksperfile = str(value) + self.bufferVoltage("Output", "BlocksPerFile", blocksperfile) + value = opObj.getParameterObj(parameterName='profilesPerBlock') + if value == None: + profilesPerBlock = None + else: + value = opObj.getParameterValue(parameterName='profilesPerBlock') + profilesPerBlock = str(value) + self.bufferVoltage("Output", "ProfilesPerBlock", profilesPerBlock) + + + # set model PU Properties + + self.propertiesModel = treeModel() + self.propertiesModel.showPUVoltageParms(self.volProperCaracteristica, self.volProperPrincipal, self.volProperDescripcion) + self.volProperCaracteristica = [] + self.volProperPrincipal = [] + self.volProperDescripcion = [] + self.treeProjectProperties.setModel(self.propertiesModel) + self.treeProjectProperties.expandAll() + self.treeProjectProperties.allColumnsShowFocus() + self.treeProjectProperties.resizeColumnToContents(0) + self.treeProjectProperties.resizeColumnToContents(1) + + def bufferSpectra(self, caracteristica, principal, description): + self.specProperCaracteristica.append(caracteristica) + self.specProperPrincipal.append(principal) + self.specProperDescripcion.append(description) + return self.specProperCaracteristica, self.specProperPrincipal, self.specProperDescripcion + + def showPUSpectraProperties(self, puObj): + type = puObj.name + self.bufferSpectra("Processing Unit", "Type", type) + + opObj = puObj.getOperationObj(name="setRadarFrequency") + if opObj == None: + radarfrequency = None + else: + value = opObj.getParameterValue(parameterName='frequency') + value = str(value) + radarfrequency = value + self.bufferSpectra("Processing Unit", "Radar Frequency", radarfrequency) + + + opObj = puObj.getOperationObj(name="init") + if opObj == None: + self.specOpnFFTpoints.clear() + self.specOpProfiles.clear() + self.specOpippFactor.clear() + else: + parmObj = opObj.getParameterObj(parameterName='nProfiles') + if parmObj == None: + nProfiles = None + else: + value = opObj.getParameterValue(parameterName='nProfiles') + nProfiles = value + self.bufferSpectra("Processing Unit", "nProfiles", nProfiles) + + parmObj = opObj.getParameterObj(parameterName='nFFTPoints') + if parmObj == None: + nFFTPoints = None + else: + value = opObj.getParameterValue(parameterName='nFFTPoints') + nFFTPoints = value + self.bufferSpectra("Processing Unit", "nFFTpoints", nFFTPoints) + + parmObj = opObj.getParameterObj(parameterName='ippFactor') + if parmObj == None: + ippFactor = None + else: + value = opObj.getParameterValue(parameterName='ippFactor') + ippFactor = value + self.bufferSpectra("Processing Unit", "Ipp Factor", ippFactor) + + + opObj = puObj.getOperationObj(name="init") + if opObj == None: + pairsList = None + else: + parm = opObj.getParameterObj(parameterName='pairsList') + if parm == None: + pairsList = None + else: + value = opObj.getParameterValue(parameterName='pairsList') + value = str(value)[1:-1] + pairsList = value + self.bufferSpectra("Processing Unit", "PairsList", pairsList) + + + opObj = puObj.getOperationObj(name="selectChannels") + if opObj == None: + channel = None + else: + value = opObj.getParameterValue(parameterName='channelList') + value = str(value)[1:-1] + channel = value + self.bufferSpectra("Processing Unit", "Channel", channel) + + opObj = puObj.getOperationObj(name="selectHeights") + if opObj == None: + heights = None + else: + value1 = int(opObj.getParameterValue(parameterName='minHei')) + value1 = str(value1) + value2 = int(opObj.getParameterValue(parameterName='maxHei')) + value2 = str(value2) + value = value1 + "," + value2 + heights = value + self.bufferSpectra("Processing Unit", "Heights", heights) + + opObj = puObj.getOperationObj(name="IncohInt") + if opObj == None: + incoherentintegration = None + else: + try: + value = opObj.getParameterValue(parameterName='timeInterval') + except: + value = opObj.getParameterValue(parameterName='n') + + value = float(value) + incoherentintegration = str(value) + self.bufferSpectra("Processing Unit", "Incoherent Integration", incoherentintegration) + + + opObj = puObj.getOperationObj(name="removeDC") + if opObj == None: + removeDC = None + else: + value = opObj.getParameterValue(parameterName='mode') + self.bufferSpectra("Processing Unit", "Remove DC", value) + + opObj = puObj.getOperationObj(name="removeInterference") + if opObj == None: + removeInterference = None + else: + self.bufferSpectra("Processing Unit", "Remove Interference", "1") + + opObj = puObj.getOperationObj(name="getNoise") + if opObj == None: + getNoise = None + else: + value1 = opObj.getParameterObj(parameterName='minHei') + if value1 == None: + getNoise = None + getNoise = "Default" + self.bufferSpectra("Processing Unit", "Get Noise", getNoise) + + else: + value1 = opObj.getParameterValue(parameterName='minHei') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='maxHei') + if value2 == None: + getNoise = None + value = value1 + getNoise = value + self.bufferSpectra("Processing Unit", "Get Noise", getNoise) + else: + value2 = opObj.getParameterValue(parameterName='maxHei') + value2 = str(value2) + value3 = opObj.getParameterObj(parameterName='minVel') + if value3 == None: + getNoise = None + value = value1 + "," + value2 + getNoise = value + self.bufferSpectra("Processing Unit", "Get Noise", getNoise) + else: + value3 = opObj.getParameterValue(parameterName='minVel') + value3 = str(value3) + value4 = opObj.getParameterObj(parameterName='maxVel') + if value4 == None: + getNoise = None + value = value1 + "," + value2 + ',' + value3 + getNoise = value + self.bufferSpectra("Processing Unit", "Get Noise", getNoise) + else: + value4 = opObj.getParameterValue(parameterName='maxVel') + value4 = str(value4) + value = value1 + "," + value2 + ',' + value3 + ',' + value4 + getNoise = value + self.bufferSpectra("Processing Unit", "Get Noise", getNoise) + + + opObj = puObj.getOpObjfromParamValue(value="SpectraPlot") + if opObj == None: + operationSpectraPlot = "Disabled" + freq_vel = None + heightsrange = None + channelListSpectraPlot = None + else: + operationSpectraPlot = "Enable" + self.bufferSpectra("Spectra Plot", "Operation", operationSpectraPlot) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + channelListSpectraPlot = None + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListSpectraPlot = str(value)[1:-1] + self.bufferSpectra("Spectra Plot", "Channel List", channelListSpectraPlot) + + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + freq_vel = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + freq_vel = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + freq_vel = value + self.bufferSpectra("Spectra Plot", "Freq/Vel", freq_vel) + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + heightsrange = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + fheightsrange = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + heightsrange = value + self.bufferSpectra("Spectra Plot", "Height Range", heightsrange) + + value1 = opObj.getParameterObj(parameterName='zmin') + if value1 == None: + dBrange = None + else: + value1 = opObj.getParameterValue(parameterName='zmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='zmax') + if value2 == None: + fdBrange = None + else: + value2 = opObj.getParameterValue(parameterName='zmax') + value2 = str(value2) + value = value1 + "," + value2 + dbrange = value + self.bufferSpectra("Spectra Plot", "dB Range", dbrange) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + path = None + else: + path = opObj.getParameterValue(parameterName='figpath') + self.bufferSpectra("Spectra Plot", "Save Path", path) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + status = 'disable' + else: + status = 'enable' + self.bufferSpectra("Spectra Plot", "FTP", status) + self.showWr_Period(puObj, opObj, nameplotop="Spectra Plot") + self.saveFTPvalues(opObj) + + opObj = puObj.getOpObjfromParamValue(value="CrossSpectraPlot") + if opObj == None: + self.specGraphCebCrossSpectraplot.setCheckState(0) + operationCrossSpectraPlot = "Disabled" + channelList = None + freq_vel = None + heightsrange = None + else: + operationCrossSpectraPlot = "Enable" + self.specGraphCebCrossSpectraplot.setCheckState(QtCore.Qt.Checked) + self.bufferSpectra("Cross Spectra Plot", "Operation", operationCrossSpectraPlot) + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + freq_vel = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + freq_vel = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + freq_vel = value + self.bufferSpectra("Cross Spectra Plot", "Freq/Vel", freq_vel) + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + heightsrange = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + fheightsrange = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + heightsrange = value + self.bufferSpectra("Cross Spectra Plot", "Height Range", heightsrange) + + value1 = opObj.getParameterObj(parameterName='zmin') + if value1 == None: + dBrange = None + else: + value1 = opObj.getParameterValue(parameterName='zmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='zmax') + if value2 == None: + fdBrange = None + else: + value2 = opObj.getParameterValue(parameterName='zmax') + value2 = str(value2) + value = value1 + "," + value2 + dbrange = value + self.bufferSpectra("Cross Spectra Plot", "dB Range", dbrange) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + path = None + else: + path = opObj.getParameterValue(parameterName='figpath') + self.bufferSpectra("Cross Spectra Plot", "Save Path", path) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + status = 'disable' + else: + status = 'enable' + self.bufferSpectra("Cross Spectra Plot", "FTP", status) + self.showWr_Period(puObj, opObj, nameplotop="Cross Spectra Plot") + self.saveFTPvalues(opObj) + + + opObj = puObj.getOpObjfromParamValue(value="RTIPlot") + if opObj == None: + self.specGraphCebRTIplot.setCheckState(0) + operationRTIPlot = "Disabled" + channelList = None + freq_vel = None + heightsrange = None + else: + operationRTIPlot = "Enable" + self.specGraphCebRTIplot.setCheckState(QtCore.Qt.Checked) + self.bufferSpectra("RTI Plot", "Operation", operationRTIPlot) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + channelListRTIPlot = None + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListRTIPlot = str(value)[1:-1] + self.bufferSpectra("RTI Plot", "Channel List", channelListRTIPlot) + + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + freq_vel = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + freq_vel = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + tmintmax = value + self.bufferSpectra("RTI Plot", "Tmin,Tmax", tmintmax) + + parmObj = opObj.getParameterObj(parameterName='timerange') + if parmObj == None: + timerange = None + else: + value = opObj.getParameterValue(parameterName='timerange') + timerange = str(value) + self.bufferSpectra("RTI Plot", "Time Range", timerange) + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + heightsrange = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + fheightsrange = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + heightsrange = value + self.bufferSpectra("RTI Plot", "Height Range", heightsrange) + + value1 = opObj.getParameterObj(parameterName='zmin') + if value1 == None: + dBrange = None + else: + value1 = opObj.getParameterValue(parameterName='zmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='zmax') + if value2 == None: + fdBrange = None + else: + value2 = opObj.getParameterValue(parameterName='zmax') + value2 = str(value2) + value = value1 + "," + value2 + dbrange = value + self.bufferSpectra("RTI Plot", "dB Range", dbrange) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + path = None + else: + path = opObj.getParameterValue(parameterName='figpath') + self.bufferSpectra("RTI Plot", "Save Path", path) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + status = 'disable' + else: + status = 'enable' + self.bufferSpectra("RTI Plot", "FTP", status) + self.showWr_Period(puObj, opObj, nameplotop="RTI Plot") + self.saveFTPvalues(opObj) + + + opObj = puObj.getOpObjfromParamValue(value="CoherenceMap") + if opObj == None: + self.specGraphCebCoherencmap.setCheckState(0) + operationCoherenceMap = "Disabled" + channelList = None + freq_vel = None + heightsrange = None + else: + operationCoherenceMap = "Enable" + self.specGraphCebCoherencmap.setCheckState(QtCore.Qt.Checked) + self.bufferSpectra("Coherence Map Plot", "Operation", operationCoherenceMap) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + channelListRTIPlot = None + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListRTIPlot = str(value)[1:-1] + self.bufferSpectra("Coherence Map Plot", "Channel List", channelListRTIPlot) + + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + freq_vel = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + freq_vel = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + tmintmax = value + self.bufferSpectra("Coherence Map Plot", "Tmin,Tmax", tmintmax) + + parmObj = opObj.getParameterObj(parameterName='timerange') + if parmObj == None: + timerange = None + else: + value = opObj.getParameterValue(parameterName='timerange') + timerange = str(value) + self.bufferSpectra("Coherence Map Plot", "Time Range", timerange) + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + heightsrange = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + fheightsrange = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + heightsrange = value + self.bufferSpectra("Coherence Map Plot", "Height Range", heightsrange) + + value1 = opObj.getParameterObj(parameterName='zmin') + if value1 == None: + dBrange = None + else: + value1 = opObj.getParameterValue(parameterName='zmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='zmax') + if value2 == None: + fdBrange = None + else: + value2 = opObj.getParameterValue(parameterName='zmax') + value2 = str(value2) + value = value1 + "," + value2 + dbrange = value + self.bufferSpectra("Coherence Map Plot", "Magnitud", dbrange) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + path = None + else: + path = opObj.getParameterValue(parameterName='figpath') + self.bufferSpectra("Coherence Map Plot", "Save Path", path) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + status = 'disable' + else: + status = 'enable' + self.bufferSpectra("Coherence Map Plot", "FTP", status) + self.showWr_Period(puObj, opObj, nameplotop="Coherence Map Plot") + self.saveFTPvalues(opObj) + + + + opObj = puObj.getOpObjfromParamValue(value="PowerProfilePlot") + if opObj == None: + self.specGraphPowerprofile.setCheckState(0) + operationPowerProfilePlot = "Disabled" + channelList = None + freq_vel = None + heightsrange = None + else: + operationPowerProfilePlot = "Enable" + self.specGraphPowerprofile.setCheckState(QtCore.Qt.Checked) + self.bufferSpectra("PowerProfile Plot", "Operation", operationPowerProfilePlot) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + channelListSpectraPlot = None + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListSpectraPlot = str(value)[1:-1] + self.bufferSpectra("PowerProfile Plot", "Channel List", channelListSpectraPlot) + + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + freq_vel = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + freq_vel = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + dbrange = value + self.bufferSpectra("PowerProfile Plot", "dbRange", dbrange) + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + heightsrange = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + fheightsrange = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + heightsrange = value + self.bufferSpectra("PowerProfile Plot", "Height Range", heightsrange) + + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + path = None + else: + path = opObj.getParameterValue(parameterName='figpath') + self.bufferSpectra("PowerProfile Plot", "Save Path", path) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + status = 'disable' + else: + status = 'enable' + self.bufferSpectra("PowerProfile Plot", "FTP", status) + self.showWr_Period(puObj, opObj, nameplotop="PowerProfile Plot") + self.saveFTPvalues(opObj) + + # noise + opObj = puObj.getOpObjfromParamValue(value="Noise") + if opObj == None: + self.specGraphCebRTInoise.setCheckState(0) + operationRTINoise = "Disabled" + channelList = None + freq_vel = None + dbRange = None + else: + operationRTINoise = "Enable" + self.specGraphCebRTInoise.setCheckState(QtCore.Qt.Checked) + self.bufferSpectra("Noise Plot", "Operation", operationRTINoise) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + channelListRTINoise = None + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListRTINoise = str(value)[1:-1] + self.bufferSpectra("Noise Plot", "Channel List", channelListRTINoise) + + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + freq_vel = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + freq_vel = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + tmintmax = value + self.bufferSpectra("Noise Plot", "Tmin,Tmax", tmintmax) + + parmObj = opObj.getParameterObj(parameterName='timerange') + if parmObj == None: + timerange = None + else: + value = opObj.getParameterValue(parameterName='timerange') + timerange = str(value) + self.bufferSpectra("Noise Plot", "Time Range", timerange) + + + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + DBrange = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + fdBrange = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + dBrange = value + self.bufferSpectra("Noise Plot", "dB Range", dBrange) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + path = None + else: + path = opObj.getParameterValue(parameterName='figpath') + self.bufferSpectra("Noise Plot", "Save Path", path) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + status = 'disable' + else: + status = 'enable' + self.bufferSpectra("Noise Plot", "FTP", status) + self.showWr_Period(puObj, opObj, nameplotop="Noise Plot") + self.saveFTPvalues(opObj) + + if self.temporalFTP.create: + self.bufferSpectra("FTP", "Server", self.temporalFTP.server) + self.bufferSpectra("FTP", "Folder", self.temporalFTP.folder) + self.bufferSpectra("FTP", "Username", self.temporalFTP.username) + self.bufferSpectra("FTP", "Password", self.temporalFTP.password) + self.bufferSpectra("FTP", "Ftp_wei", self.temporalFTP.ftp_wei) + self.bufferSpectra("FTP", "Exp_code", self.temporalFTP.exp_code) + self.bufferSpectra("FTP", "Sub_exp_code", self.temporalFTP.sub_exp_code) + self.bufferSpectra("FTP", "Plot_pos", self.temporalFTP.plot_pos) + # self.temporalFTP.create=False + self.temporalFTP.withoutconfig = False + + if self.temporalFTP.withoutconfig: + self.bufferSpectra("FTP", "Server", self.temporalFTP.server) + self.bufferSpectra("FTP", "Folder", self.temporalFTP.folder) + self.bufferSpectra("FTP", "Username", self.temporalFTP.username) + self.bufferSpectra("FTP", "Password", self.temporalFTP.password) + self.bufferSpectra("FTP", "Ftp_wei", self.temporalFTP.ftp_wei) + self.bufferSpectra("FTP", "Exp_code", self.temporalFTP.exp_code) + self.bufferSpectra("FTP", "Sub_exp_code", self.temporalFTP.sub_exp_code) + self.bufferSpectra("FTP", "Plot_pos", self.temporalFTP.plot_pos) + self.temporalFTP.withoutconfig = False + + #### + self.temporalFTP.create = False + + # outputSpectraWrite + opObj = puObj.getOperationObj(name='SpectraWriter') + if opObj == None: + pass + else: + operation = 'Enabled' + self.bufferSpectra("Output", "Operation", operation) + value = opObj.getParameterObj(parameterName='path') + if value == None: + path = None + else: + value = opObj.getParameterValue(parameterName='path') + path = str(value) + self.bufferSpectra("Output", "Path", path) + value = opObj.getParameterObj(parameterName='blocksPerFile') + if value == None: + blocksperfile = None + else: + value = opObj.getParameterValue(parameterName='blocksPerFile') + blocksperfile = str(value) + self.bufferSpectra("Output", "BlocksPerFile", blocksperfile) + value = opObj.getParameterObj(parameterName='profilesPerBlock') + if value == None: + profilesPerBlock = None + else: + value = opObj.getParameterValue(parameterName='profilesPerBlock') + profilesPerBlock = str(value) + self.bufferSpectra("Output", "ProfilesPerBlock", profilesPerBlock) + +# set model PU Properties + + self.propertiesModel = treeModel() + self.propertiesModel.showPUSpectraParms(self.specProperCaracteristica, self.specProperPrincipal, self.specProperDescripcion) + + self.treeProjectProperties.setModel(self.propertiesModel) + self.treeProjectProperties.expandAll() + self.treeProjectProperties.allColumnsShowFocus() + self.treeProjectProperties.resizeColumnToContents(0) + self.treeProjectProperties.resizeColumnToContents(1) + + self.specProperCaracteristica = [] + self.specProperDescripcion = [] + self.specProperPrincipal = [] + + + def bufferSpectraHeis(self, caracteristica, principal, description): + self.specHeisProperCaracteristica.append(caracteristica) + self.specHeisProperPrincipal.append(principal) + self.specHeisProperDescripcion.append(description) + return self.specHeisProperCaracteristica, self.specHeisProperPrincipal, self.specHeisProperDescripcion + + + def showPUSpectraHeisProperties(self, puObj): + type = puObj.name + self.bufferSpectraHeis("Processing Unit", "Type", type) + + opObj = puObj.getOperationObj(name="IncohInt4SpectraHeis") + if opObj == None: + incoherentintegration = None + else: + value = opObj.getParameterValue(parameterName='timeInterval') + value = float(value) + incoherentintegration = str(value) + self.bufferSpectraHeis("Processing Unit", "Incoherent Integration", incoherentintegration) + # spectraheis graph + opObj = puObj.getOpObjfromParamValue(value="SpectraHeisScope") + if opObj == None: + self.specHeisGraphCebSpectraplot.setCheckState(0) + operationSpectraHeisPlot = "Disabled" + xmin_xmax = None + ymin_ymax = None + channelListSpectraPlot = None + else: + operationSpectraHeisPlot = "Enable" + self.specHeisGraphCebSpectraplot.setCheckState(QtCore.Qt.Checked) + self.bufferSpectraHeis("SpectraHeis Plot", "Operation", operationSpectraHeisPlot) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + channelListSpectraPlot = None + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListSpectraPlot = str(value)[1:-1] + self.bufferSpectraHeis("SpectraHeis Plot", "Channel List", channelListSpectraPlot) + + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + xmin_xmax = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + xmin_xmax = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + xmin_xmax = value + self.bufferSpectraHeis("SpectraHeis Plot", "Xmin-Xmax", xmin_xmax) + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + ymin_ymax = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + ymin_ymax = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + ymin_ymax = value + self.bufferSpectraHeis("SpectraHeis Plot", "Ymin-Ymax", ymin_ymax) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + path = None + else: + path = opObj.getParameterValue(parameterName='figpath') + self.bufferSpectraHeis("SpectraHeis Plot", "Save Path", path) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + status = 'disable' + else: + status = 'enable' + self.bufferSpectraHeis("SpectraHeis Plot", "FTP", status) + self.showWr_Period(puObj, opObj, nameplotop="SpectraHeis Plot") + self.saveFTPvalues(opObj) + + opObj = puObj.getOpObjfromParamValue(value="RTIfromSpectraHeis") + if opObj == None: + self.specHeisGraphCebRTIplot.setCheckState(0) + operationRTIPlot = "Disabled" + channelList = None + freq_vel = None + heightsrange = None + else: + operationRTIPlot = "Enable" + self.specHeisGraphCebRTIplot.setCheckState(QtCore.Qt.Checked) + self.bufferSpectraHeis("RTIHeis Plot", "Operation", operationRTIPlot) + parmObj = opObj.getParameterObj(parameterName='channelList') + if parmObj == None: + channelListRTIPlot = None + else: + value = opObj.getParameterValue(parameterName='channelList') + channelListRTIPlot = str(value)[1:-1] + self.bufferSpectraHeis("RTIHeis Plot", "Channel List", channelListRTIPlot) + + + value1 = opObj.getParameterObj(parameterName='xmin') + if value1 == None: + freq_vel = None + else: + value1 = opObj.getParameterValue(parameterName='xmin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='xmax') + if value2 == None: + freq_vel = None + else: + value2 = opObj.getParameterValue(parameterName='xmax') + value2 = str(value2) + value = value1 + "," + value2 + tmintmax = value + self.bufferSpectraHeis("RTIHeis Plot", "Tmin,Tmax", tmintmax) + + parmObj = opObj.getParameterObj(parameterName='timerange') + if parmObj == None: + timerange = None + else: + value = opObj.getParameterValue(parameterName='timerange') + timerange = str(value) + self.bufferSpectraHeis("RTIHeis Plot", "Time Range", timerange) + + value1 = opObj.getParameterObj(parameterName='ymin') + if value1 == None: + heightsrange = None + else: + value1 = opObj.getParameterValue(parameterName='ymin') + value1 = str(value1) + value2 = opObj.getParameterObj(parameterName='ymax') + if value2 == None: + fheightsrange = None + else: + value2 = opObj.getParameterValue(parameterName='ymax') + value2 = str(value2) + value = value1 + "," + value2 + heightsrange = value + self.bufferSpectraHeis("RTIHeis Plot", "Ymin-Ymax", heightsrange) + + parmObj = opObj.getParameterObj(parameterName="figpath") + if parmObj == None: + path = None + else: + path = opObj.getParameterValue(parameterName='figpath') + self.bufferSpectraHeis("RTIHeis Plot", "Save Path", path) + + parmObj = opObj.getParameterObj(parameterName="ftp") + if parmObj == None: + status = 'disable' + else: + status = 'enable' + self.bufferSpectraHeis("RTIHeis Plot", "FTP", status) + self.showWr_Period(puObj, opObj, nameplotop="RTIHeis Plot") + self.saveFTPvalues(opObj) + + if self.temporalFTP.create: + self.bufferSpectraHeis("FTP", "Server", self.temporalFTP.server) + self.bufferSpectraHeis("FTP", "Folder", self.temporalFTP.folder) + self.bufferSpectraHeis("FTP", "Username", self.temporalFTP.username) + self.bufferSpectraHeis("FTP", "Password", self.temporalFTP.password) + self.bufferSpectraHeis("FTP", "Ftp_wei", self.temporalFTP.ftp_wei) + self.bufferSpectraHeis("FTP", "Exp_code", self.temporalFTP.exp_code) + self.bufferSpectraHeis("FTP", "Sub_exp_code", self.temporalFTP.sub_exp_code) + self.bufferSpectraHeis("FTP", "Plot_pos", self.temporalFTP.plot_pos) + # self.temporalFTP.create=False + self.temporalFTP.withoutconfig = False + + if self.temporalFTP.withoutconfig: + self.bufferSpectraHeis("FTP", "Server", self.temporalFTP.server) + self.bufferSpectraHeis("FTP", "Folder", self.temporalFTP.folder) + self.bufferSpectraHeis("FTP", "Username", self.temporalFTP.username) + self.bufferSpectraHeis("FTP", "Password", self.temporalFTP.password) + self.bufferSpectraHeis("FTP", "Ftp_wei", self.temporalFTP.ftp_wei) + self.bufferSpectraHeis("FTP", "Exp_code", self.temporalFTP.exp_code) + self.bufferSpectraHeis("FTP", "Sub_exp_code", self.temporalFTP.sub_exp_code) + self.bufferSpectraHeis("FTP", "Plot_pos", self.temporalFTP.plot_pos) + self.temporalFTP.withoutconfig = False + + #### + self.temporalFTP.create = False + + # outputSpectraHeisWrite + opObj = puObj.getOperationObj(name='FitsWriter') + if opObj == None: + pass + else: + operation = 'Enabled' + self.bufferSpectraHeis("Output", "Operation", operation) + value = opObj.getParameterObj(parameterName='path') + if value == None: + path = None + else: + value = opObj.getParameterValue(parameterName='path') + path = str(value) + self.bufferSpectraHeis("Output", "Path", path) + value = opObj.getParameterObj(parameterName='dataBlocksPerFile') + if value == None: + blocksperfile = None + else: + value = opObj.getParameterValue(parameterName='dataBlocksPerFile') + blocksperfile = str(value) + self.bufferSpectraHeis("Output", "BlocksPerFile", blocksperfile) + value = opObj.getParameterObj(parameterName='metadatafile') + if value == None: + metadata = None + else: + value = opObj.getParameterValue(parameterName='metadatafile') + metadata = str(value) + self.bufferSpectraHeis("Output", "Metadata", metadata) + +# set model PU Properties + + self.propertiesModel = treeModel() + self.propertiesModel.showPUSpectraHeisParms(self.specHeisProperCaracteristica, self.specHeisProperPrincipal, self.specHeisProperDescripcion) + + self.treeProjectProperties.setModel(self.propertiesModel) + self.treeProjectProperties.expandAll() + self.treeProjectProperties.allColumnsShowFocus() + self.treeProjectProperties.resizeColumnToContents(0) + self.treeProjectProperties.resizeColumnToContents(1) + + self.specHeisProperCaracteristica = [] + self.specHeisProperDescripcion = [] + self.specHeisProperPrincipal = [] + + + def showWr_Period(self, puObj, opObj, nameplotop): + parmObj = opObj.getParameterObj(parameterName='wr_period') + if parmObj == None: + wr_period = None + else: + value = opObj.getParameterValue(parameterName='wr_period') + wr_period = str(value) + if puObj.datatype == "Spectra": + self.bufferSpectra(nameplotop, "wr_period", wr_period) + if puObj.datatype == "SpectraHeis": + self.bufferSpectraHeis(nameplotop, "wr_period", wr_period) + + def saveFTPvalues(self, opObj): + parmObj = opObj.getParameterObj(parameterName="server") + if parmObj == None: + server = 'jro-app.igp.gob.pe' + else: + server = opObj.getParameterValue(parameterName='server') + + parmObj = opObj.getParameterObj(parameterName="folder") + if parmObj == None: + folder = '/home/wmaster/graficos' + else: + folder = opObj.getParameterValue(parameterName='folder') + + parmObj = opObj.getParameterObj(parameterName="username") + if parmObj == None: + username = 'wmaster' + else: + username = opObj.getParameterValue(parameterName='username') + + parmObj = opObj.getParameterObj(parameterName="password") + if parmObj == None: + password = 'mst2010vhf' + else: + password = opObj.getParameterValue(parameterName='password') + + parmObj = opObj.getParameterObj(parameterName="ftp_wei") + if parmObj == None: + ftp_wei = '0' + else: + ftp_wei = opObj.getParameterValue(parameterName='ftp_wei') + + parmObj = opObj.getParameterObj(parameterName="exp_code") + if parmObj == None: + exp_code = '0' + else: + exp_code = opObj.getParameterValue(parameterName='exp_code') + + parmObj = opObj.getParameterObj(parameterName="sub_exp_code") + if parmObj == None: + sub_exp_code = '0' + else: + sub_exp_code = opObj.getParameterValue(parameterName='sub_exp_code') + + parmObj = opObj.getParameterObj(parameterName="plot_pos") + if parmObj == None: + plot_pos = '0' + self.temporalFTP.setwithoutconfiguration() + else: + plot_pos = opObj.getParameterValue(parameterName='plot_pos') + self.temporalFTP.save(server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos) + + def addProject2ProjectExplorer(self, id, name): + + itemTree = QtGui.QStandardItem(QtCore.QString(str(name))) + self.parentItem = self.projectExplorerModel.invisibleRootItem() + self.parentItem.appendRow(itemTree) + self.parentItem = itemTree + self.projectExplorerTree.setCurrentIndex(self.parentItem.index()) + + self.selectedItemTree = itemTree + + self.__itemTreeDict[id] = itemTree + + def addPU2ProjectExplorer(self, id, name): +# id1= round(int(id)/10.)*10 +# id= int(id) +# id=id-id1 + itemTree = QtGui.QStandardItem(QtCore.QString(str(name))) + + self.parentItem = self.selectedItemTree + self.parentItem.appendRow(itemTree) + self.projectExplorerTree.expandAll() + self.parentItem = itemTree + self.projectExplorerTree.setCurrentIndex(self.parentItem.index()) + + self.selectedItemTree = itemTree + + self.__itemTreeDict[id] = itemTree + + def addPU2PELoadXML(self, id, name, idParent): + + itemTree = QtGui.QStandardItem(QtCore.QString(str(name))) + if self.__itemTreeDict.has_key(idParent): + self.parentItem = self.__itemTreeDict[idParent] + else: + self.parentItem = self.selectedItemTree + self.parentItem.appendRow(itemTree) + self.projectExplorerTree.expandAll() + self.parentItem = itemTree + self.projectExplorerTree.setCurrentIndex(self.parentItem.index()) + + self.selectedItemTree = itemTree + + self.__itemTreeDict[id] = itemTree + # print "stop" + + def getSelectedProjectObj(self): + + for key in self.__itemTreeDict.keys(): + if self.__itemTreeDict[key] != self.selectedItemTree: + continue + + if self.__projectObjDict.has_key(key): + projectObj = self.__projectObjDict[key] + else: + puObj = self.__puObjDict[key] + if puObj.parentId == None: + id = puObj.getId()[0] + else: + id = puObj.parentId + projectObj = self.__projectObjDict[id] + + return projectObj + + self.showWarning() + + return None + + def getSelectedPUObj(self): + + for key in self.__itemTreeDict.keys(): + if self.__itemTreeDict[key] != self.selectedItemTree: + continue + + if self.__projectObjDict.has_key(key) == True: + fatherObj = self.__projectObjDict[key] + else: + fatherObj = self.__puObjDict[key] + + return fatherObj + + self.showWarning() + + return None + + def playProject(self, ext=".xml"): + + projectObj = self.getSelectedProjectObj() + + filename = os.path.join(str(self.pathWorkSpace), + "%s_%s%s" %(str(projectObj.name), str(projectObj.id), ext) + ) + + self.console.clear() + projectObj.writeXml(filename) + self.console.append("Please Wait...") +# try: + self.commCtrlPThread.cmd_q.put(ProcessCommand(ProcessCommand.PROCESS, filename)) +# # +# except: +# self.console.append("Error............................................!") +# self.actionStarToolbar.setEnabled(True) +# self.actionPauseToolbar.setEnabled(False) +# self.actionStopToolbar.setEnabled(False) + +# filename = '/home/dsuarez/workspace_signalchain/schain_guiJune04/test/ewdrifts3.xml' +# data = filename +# self.commCtrlPThread.cmd_q.put(ProcessCommand(ProcessCommand.PROCESS, data)) + + def stopProject(self): + stop = True + self.commCtrlPThread.cmd_q.put(ProcessCommand(ProcessCommand.STOP, stop)) + + def pauseProject(self): + self.commCtrlPThread.cmd_q.put(ProcessCommand(ProcessCommand.PAUSE, data=True)) + + + def saveProject(self): + + puObj = self.getSelectedPUObj() + if puObj.name == 'VoltageProc': + self.on_volOpOk_clicked() + if puObj.name == 'SpectraProc': + self.on_specOpOk_clicked() + if puObj.name == 'SpectraHeisProc': + self.on_specHeisOpOk_clicked() + projectObj = self.getSelectedProjectObj() + puObjorderList = OrderedDict(sorted(projectObj.procUnitConfObjDict.items(), key=lambda x: x[0])) + + for inputId, puObj in puObjorderList.items(): + # print puObj.datatype, puObj.inputId,puObj.getId(),puObj.parentId + + if puObj.name == "VoltageProc": + self.refreshID(puObj) + + if puObj.name == "SpectraProc": + self.refreshID(puObj) + if puObj.name == "SpectraHeisProc": + self.refreshID(puObj) + + filename = self.pathWorkSpace + "/" + str(projectObj.name) + str(projectObj.id) + ".xml" + projectObj.writeXml(filename) + self.console.append("Now, you can push the icon Start in the toolbar or push start in menu run") + + + def deleteProjectorPU(self): + """ + Metodo para eliminar el proyecto en el dictionario de proyectos y en el dictionario de vista de arbol + """ + for key in self.__itemTreeDict.keys(): + if self.__itemTreeDict[key] != self.selectedItemTree: + continue + + if self.__projectObjDict.has_key(key) == True: + + del self.__projectObjDict[key] + del self.__itemTreeDict[key] + + else: + puObj = self.__puObjDict[key] + if puObj.parentId == None: + id = puObj.getId()[0] + else: + id = puObj.parentId + projectObj = self.__projectObjDict[id] + del self.__puObjDict[key] + del self.__itemTreeDict[key] + del projectObj.procUnitConfObjDict[key] + for key in projectObj.procUnitConfObjDict.keys(): + if projectObj.procUnitConfObjDict[key].inputId != puObj.getId(): + continue + del self.__puObjDict[projectObj.procUnitConfObjDict[key].getId()] + del self.__itemTreeDict[projectObj.procUnitConfObjDict[key].getId()] + del projectObj.procUnitConfObjDict[key] + # print projectObj.procUnitConfObjDict + # print self.__itemTreeDict,self.__projectObjDict,self.__puObjDict + self.showWarning() + + def showWarning(self): + pass + + def getParmsFromProjectWindow(self): + """ + Return Inputs Project: + - id + - project_name + - datatype + - ext + - data_path + - readmode + - delay + - set + - walk + """ + project_name = str(self.proName.text()) + try: + name = str(self.proName.text()) + except: + self.console.clear() + self.console.append("Please Write a name") + return 0 + + desc = str(self.proDescription.toPlainText()) + datatype = str(self.proComDataType.currentText()) + data_path = str(self.proDataPath.text()) + if not os.path.exists(path): + self.proOk.setEnabled(False) + self.console.clear() + self.console.append("Write a correct a path") + return + + online = int(self.online) + if online == 0: + delay = 0 + set = 0 + else: + delay = self.proDelay.text() + try: + delay = int(self.proDelay.text()) + except: + self.console.clear() + self.console.append("Please Write a number for delay") + return 0 + + set = self.proSet.text() + try: + set = int(self.proSet.text()) + except: + self.console.clear() + set = None + + + walk = int(self.walk) + starDate = str(self.proComStartDate.currentText()) + endDate = str(self.proComEndDate.currentText()) + reloj1 = self.proStartTime.time() + reloj2 = self.proEndTime.time() + startTime = str(reloj1.hour()) + ":" + str(reloj1.minute()) + ":" + str(reloj1.second()) + endTime = str(reloj2.hour()) + ":" + str(reloj2.minute()) + ":" + str(reloj2.second()) + + return project_name, desc, datatype, data_path, starDate, endDate, startTime, endTime, online, delay, walk , set + + def removefromtree(self, row): + self.parentItem.removeRow(row) + + + def setInputsProject_View(self): + self.tabWidgetProject.setEnabled(True) + self.tabWidgetProject.setCurrentWidget(self.tabProject) + self.tabProject.setEnabled(True) + self.frame_2.setEnabled(False) + self.proName.clear() + self.proName.setFocus() + self.proName.setSelection(0, 0) + self.proName.setCursorPosition(0) + self.proDataType.setText('.r') + self.proDataPath.clear() + self.proComDataType.clear() + self.proComDataType.addItem("Voltage") + self.proComDataType.addItem("Spectra") + self.proComDataType.addItem("Fits") + + self.proComStartDate.clear() + self.proComEndDate.clear() + + startTime = "00:00:00" + endTime = "23:59:59" + starlist = startTime.split(":") + endlist = endTime.split(":") + self.proDelay.setText("0") + self.proSet.setText("0") + self.time.setHMS(int(starlist[0]), int(starlist[1]), int(starlist[2])) + self.proStartTime.setTime(self.time) + self.time.setHMS(int(endlist[0]), int(endlist[1]), int(endlist[2])) + self.proEndTime.setTime(self.time) + self.proDescription.clear() + self.proOk.setEnabled(False) + self.console.clear() +# self.console.append("Please, Write a name Project") +# self.console.append("Introduce Project Parameters")DC +# self.console.append("Select data type Voltage( .rawdata) or Spectra(.pdata)") + + def setInputsPU_View(self, datatype): + projectObjView = self.getSelectedProjectObj() + idReadUnit = projectObjView.getReadUnitId() + readUnitObj = projectObjView.getProcUnitObj(idReadUnit) + + if datatype == 'Voltage': + self.volOpComChannels.setEnabled(False) + self.volOpComHeights.setEnabled(False) + self.volOpFilter.setEnabled(False) + self.volOpComProfile.setEnabled(False) + self.volOpComCode.setEnabled(False) + self.volOpCohInt.setEnabled(False) + self.volOpChannel.setEnabled(False) + self.volOpHeights.setEnabled(False) + self.volOpProfile.setEnabled(False) + self.volOpRadarfrequency.setEnabled(False) + self.volOpCebChannels.setCheckState(0) + self.volOpCebRadarfrequency.setCheckState(0) + self.volOpCebHeights.setCheckState(0) + self.volOpCebFilter.setCheckState(0) + self.volOpCebProfile.setCheckState(0) + self.volOpCebDecodification.setCheckState(0) + self.volOpCebCohInt.setCheckState(0) + + self.volOpChannel.clear() + self.volOpHeights.clear() + self.volOpProfile.clear() + self.volOpFilter.clear() + self.volOpCohInt.clear() + self.volOpRadarfrequency.clear() + + if datatype == 'Spectra': + + if readUnitObj.datatype == 'Spectra': + self.specOpnFFTpoints.setEnabled(False) + self.specOpProfiles.setEnabled(False) + self.specOpippFactor.setEnabled(False) + else: + self.specOpnFFTpoints.setEnabled(True) + self.specOpProfiles.setEnabled(True) + self.specOpippFactor.setEnabled(True) + + self.specOpCebCrossSpectra.setCheckState(0) + self.specOpCebChannel.setCheckState(0) + self.specOpCebHeights.setCheckState(0) + self.specOpCebIncoherent.setCheckState(0) + self.specOpCebRemoveDC.setCheckState(0) + self.specOpCebRemoveInt.setCheckState(0) + self.specOpCebgetNoise.setCheckState(0) + self.specOpCebRadarfrequency.setCheckState(0) + + self.specOpRadarfrequency.setEnabled(False) + self.specOppairsList.setEnabled(False) + self.specOpChannel.setEnabled(False) + self.specOpHeights.setEnabled(False) + self.specOpIncoherent.setEnabled(False) + self.specOpgetNoise.setEnabled(False) + + self.specOpRadarfrequency.clear() + self.specOpnFFTpoints.clear() + self.specOpProfiles.clear() + self.specOpippFactor.clear + self.specOppairsList.clear() + self.specOpChannel.clear() + self.specOpHeights.clear() + self.specOpIncoherent.clear() + self.specOpgetNoise.clear() + + self.specGraphCebSpectraplot.setCheckState(0) + self.specGraphCebCrossSpectraplot.setCheckState(0) + self.specGraphCebRTIplot.setCheckState(0) + self.specGraphCebRTInoise.setCheckState(0) + self.specGraphCebCoherencmap.setCheckState(0) + self.specGraphPowerprofile.setCheckState(0) + + self.specGraphSaveSpectra.setCheckState(0) + self.specGraphSaveCross.setCheckState(0) + self.specGraphSaveRTIplot.setCheckState(0) + self.specGraphSaveRTInoise.setCheckState(0) + self.specGraphSaveCoherencemap.setCheckState(0) + self.specGraphSavePowerprofile.setCheckState(0) + + self.specGraphftpRTIplot.setCheckState(0) + self.specGraphftpRTInoise.setCheckState(0) + self.specGraphftpCoherencemap.setCheckState(0) + + self.specGraphPath.clear() + self.specGraphPrefix.clear() + + self.specGgraphftpratio.clear() + + self.specGgraphChannelList.clear() + self.specGgraphFreq.clear() + self.specGgraphHeight.clear() + self.specGgraphDbsrange.clear() + self.specGgraphmagnitud.clear() + self.specGgraphTminTmax.clear() + self.specGgraphTimeRange.clear() + + if datatype == 'SpectraHeis': + self.specHeisOpCebIncoherent.setCheckState(0) + self.specHeisOpIncoherent.setEnabled(False) + self.specHeisOpIncoherent.clear() + + self.specHeisGraphCebSpectraplot.setCheckState(0) + self.specHeisGraphCebRTIplot.setCheckState(0) + + self.specHeisGraphSaveSpectra.setCheckState(0) + self.specHeisGraphSaveRTIplot.setCheckState(0) + + self.specHeisGraphftpSpectra.setCheckState(0) + self.specHeisGraphftpRTIplot.setCheckState(0) + + self.specHeisGraphPath.clear() + self.specHeisGraphPrefix.clear() + self.specHeisGgraphChannelList.clear() + self.specHeisGgraphXminXmax.clear() + self.specHeisGgraphYminYmax.clear() + self.specHeisGgraphTminTmax.clear() + self.specHeisGgraphTimeRange.clear() + self.specHeisGgraphftpratio.clear() + + + + + + def showtabPUCreated(self, datatype): + if datatype == "Voltage": + self.tabVoltage.setEnabled(True) + self.tabProject.setEnabled(False) + self.tabSpectra.setEnabled(False) + self.tabCorrelation.setEnabled(False) + self.tabSpectraHeis.setEnabled(False) + self.tabWidgetProject.setCurrentWidget(self.tabVoltage) + + if datatype == "Spectra": + self.tabVoltage.setEnabled(False) + self.tabProject.setEnabled(False) + self.tabSpectra.setEnabled(True) + self.tabCorrelation.setEnabled(False) + self.tabSpectraHeis.setEnabled(False) + self.tabWidgetProject.setCurrentWidget(self.tabSpectra) + if datatype == "SpectraHeis": + self.tabVoltage.setEnabled(False) + self.tabProject.setEnabled(False) + self.tabSpectra.setEnabled(False) + self.tabCorrelation.setEnabled(False) + self.tabSpectraHeis.setEnabled(True) + self.tabWidgetProject.setCurrentWidget(self.tabSpectraHeis) + + + def searchData(self, data_path, ext, walk, expLabel=''): + dateList = [] + fileList = [] + + if walk == 0: + files = os.listdir(data_path) + for thisFile in files: + thisExt = os.path.splitext(thisFile)[-1] + if thisExt == ext: + fileList.append(thisFile) + + for thisFile in fileList: + try: + year = int(thisFile[1:5]) + doy = int(thisFile[5:8]) + + date = datetime.date(year, 1, 1) + datetime.timedelta(doy - 1) + dateformat = date.strftime("%Y/%m/%d") + + if dateformat not in dateList: + dateList.append(dateformat) + except: + continue + # REVISION---------------------------------1 + if walk == 1: + + dirList = os.listdir(data_path) + + dirList.sort() + + dateList = [] + + for thisDir in dirList: + + if not isRadarPath(thisDir): + self.console.clear() + self.console.append("Please, Choose the Correct Path") + self.proOk.setEnabled(False) + continue + + doypath = os.path.join(data_path, thisDir, expLabel) + if not os.path.exists(doypath): + self.console.clear() + self.console.append("Please, Choose the Correct Path") + return + files = os.listdir(doypath) + fileList = [] + + for thisFile in files: + thisExt = os.path.splitext(thisFile)[-1] + if thisExt != ext: + self.console.clear() + self.console.append("There is no datatype selected in the Path Directory") + self.proOk.setEnabled(False) + continue + + if not isRadarFile(thisFile): + self.proOk.setEnabled(False) + self.console.clear() + self.console.append("Please, Choose the Correct Path") + continue + + fileList.append(thisFile) + break + + if fileList == []: + continue + + year = int(thisDir[1:5]) + doy = int(thisDir[5:8]) + + date = datetime.date(year, 1, 1) + datetime.timedelta(doy - 1) + dateformat = date.strftime("%Y/%m/%d") + dateList.append(dateformat) + + if len(dateList) > 0: + self.proOk.setEnabled(True) + return dateList + + +# self.proOk.setEnabled(False) + return None + + def checkInputsProject(self): + """ + Check Inputs Project: + - project_name + - datatype + - ext + - data_path + - readmode + - delay + - set + - walk + """ + parms_ok = True + project_name = str(self.proName.text()) + if project_name == '' or project_name == None: + outputstr = "Enter the Project Name" + self.console.append(outputstr) + parms_ok = False + project_name = None + + datatype = str(self.proComDataType.currentText()) + if not(datatype in ['Voltage', 'Spectra', 'Fits']): + outputstr = 'datatype = %s, this must be either Voltage, Spectra or SpectraHeis' % datatype + self.console.append(outputstr) + parms_ok = False + datatype = None + + ext = str(self.proDataType.text()) + if not(ext in ['.r', '.pdata', '.fits']): + outputstr = "extension files must be .r , .pdata or .fits" + self.console.append(outputstr) + parms_ok = False + ext = None + + data_path = str(self.proDataPath.text()) + + if data_path == '': + outputstr = 'Datapath is empty' + self.console.append(outputstr) + parms_ok = False + data_path = None + + if data_path != None: + if not os.path.exists(data_path): + outputstr = 'Datapath:%s does not exists' % data_path + self.console.append(outputstr) + parms_ok = False + data_path = None + + read_mode = str(self.proComReadMode.currentText()) + if not(read_mode in ['Online', 'Offline']): + outputstr = 'Read Mode: %s, this must be either Online or Offline' % read_mode + self.console.append(outputstr) + parms_ok = False + read_mode = None + + try: + delay = int(str(self.proDelay.text())) + except: + outputstr = 'Delay: %s, this must be a integer number' % str(self.proName.text()) + self.console.append(outputstr) + parms_ok = False + delay = None + + try: + set = int(str(self.proSet.text())) + except: + # outputstr = 'Set: %s, this must be a integer number' % str(self.proName.text()) + # self.console.append(outputstr) + # parms_ok = False + set = None + + walk_str = str(self.proComWalk.currentText()) + if walk_str == 'On Files': + walk = 0 + elif walk_str == 'On Folder': + walk = 1 + else: + outputstr = 'Walk: %s, this must be either On Files or On Folders' % walk_str + self.console.append(outputstr) + parms_ok = False + walk = None + + return parms_ok, project_name, datatype, ext, data_path, read_mode, delay, walk, set + + def checkInputsPUSave(self, datatype): + """ + Check Inputs Spectra Save: + - path + - blocks Per File + - sufix + - dataformat + """ + parms_ok = True + + if datatype == "Voltage": + output_path = str(self.volOutputPath.text()) + blocksperfile = str(self.volOutputblocksperfile.text()) + profilesperblock = str(self.volOutputprofilesperblock.text()) + + if datatype == "Spectra": + output_path = str(self.specOutputPath.text()) + blocksperfile = str(self.specOutputblocksperfile.text()) + profilesperblock = str(self.specOutputprofileperblock.text()) + + if datatype == "SpectraHeis": + output_path = str(self.specHeisOutputPath.text()) + blocksperfile = str(self.specHeisOutputblocksperfile.text()) + metada = str(self.specHeisOutputMetada.text()) + + if output_path == '': + outputstr = 'Outputpath is empty' + self.console.append(outputstr) + parms_ok = False + data_path = None + + if output_path != None: + if not os.path.exists(output_path): + outputstr = 'OutputPath:%s does not exists' % output_path + self.console.append(outputstr) + parms_ok = False + output_path = None + + + try: + profilesperblock = int(profilesperblock) + except: + if datatype == "Voltage": + outputstr = 'Profilesperblock: %s, this must be a integer number' % str(self.volOutputprofilesperblock.text()) + self.console.append(outputstr) + parms_ok = False + profilesperblock = None + + elif datatype == "Spectra": + outputstr = 'Profilesperblock: %s, this must be a integer number' % str(self.specOutputprofileperblock.text()) + self.console.append(outputstr) + parms_ok = False + profilesperblock = None + + try: + blocksperfile = int(blocksperfile) + except: + if datatype == "Voltage": + outputstr = 'Blocksperfile: %s, this must be a integer number' % str(self.volOutputblocksperfile.text()) + elif datatype == "Spectra": + outputstr = 'Blocksperfile: %s, this must be a integer number' % str(self.specOutputblocksperfile.text()) + elif datatype == "SpectraHeis": + outputstr = 'Blocksperfile: %s, this must be a integer number' % str(self.specHeisOutputblocksperfile.text()) + + self.console.append(outputstr) + parms_ok = False + blocksperfile = None + + if datatype == "SpectraHeis": + if metada == '': + outputstr = 'Choose metada file' + self.console.append(outputstr) + parms_ok = False + if metada != None: + if not os.path.isfile(metada): + outputstr = 'Metadata:%s does not exists' % metada + self.console.append(outputstr) + parms_ok = False + output_path = None + + if datatype == "Voltage": + return parms_ok, output_path, blocksperfile, profilesperblock + + + if datatype == "Spectra": + return parms_ok, output_path, blocksperfile, profilesperblock + + + if datatype == "SpectraHeis": + return parms_ok, output_path, blocksperfile, metada + + def loadDays(self, data_path, ext, walk): + """ + Method to loads day + """ + dateList = self.searchData(data_path, ext, walk) + if dateList == None: + self.console.clear() + outputstr = "The path: %s is empty with file extension *%s" % (data_path, ext) + self.console.append(outputstr) + return + + self.dateList = dateList + for thisDate in dateList: + self.proComStartDate.addItem(thisDate) + self.proComEndDate.addItem(thisDate) + self.proComEndDate.setCurrentIndex(self.proComStartDate.count() - 1) + + def setWorkSpaceGUI(self, pathWorkSpace): + self.pathWorkSpace = pathWorkSpace + + """ + Comandos Usados en Console + """ + def __del__(self): + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + + def normalOutputWritten(self, text): + self.console.append(text) + + + def setParameter(self): + + self.setWindowTitle("ROJ-Signal Chain") + self.setWindowIcon(QtGui.QIcon("schainpy/gui/figure/adn.jpg")) + sys.stdout = ShowMeConsole(textWritten=self.normalOutputWritten) + # sys.stderr = ShowMeConsole(textWritten=self.normalOutputWritten) + self.tabWidgetProject.setEnabled(False) + self.tabVoltage.setEnabled(False) + self.tabSpectra.setEnabled(False) + self.tabCorrelation.setEnabled(False) + self.frame_2.setEnabled(False) + + self.actionCreate.setShortcut('Ctrl+P') + self.actionStart.setShortcut('Ctrl+R') + self.actionSave.setShortcut('Ctrl+S') + self.actionClose.setShortcut('Ctrl+Q') + + self.actionStarToolbar.setEnabled(True) + self.actionPauseToolbar.setEnabled(False) + self.actionStopToolbar.setEnabled(False) + + self.proName.clear() + self.proDataPath.setText('') + self.console.setReadOnly(True) + self.console.append("Welcome to Signal Chain please Create a New Project") + self.proStartTime.setDisplayFormat("hh:mm:ss") + self.proDataType.setEnabled(False) + self.time = QtCore.QTime() + self.hour = 0 + self.min = 0 + self.sec = 0 + self.proEndTime.setDisplayFormat("hh:mm:ss") + startTime = "00:00:00" + endTime = "23:59:59" + starlist = startTime.split(":") + endlist = endTime.split(":") + self.time.setHMS(int(starlist[0]), int(starlist[1]), int(starlist[2])) + self.proStartTime.setTime(self.time) + self.time.setHMS(int(endlist[0]), int(endlist[1]), int(endlist[2])) + self.proEndTime.setTime(self.time) + self.proOk.setEnabled(False) + # set model Project Explorer + self.projectExplorerModel = QtGui.QStandardItemModel() + self.projectExplorerModel.setHorizontalHeaderLabels(("Project Explorer",)) + layout = QtGui.QVBoxLayout() + layout.addWidget(self.projectExplorerTree) + self.projectExplorerTree.setModel(self.projectExplorerModel) + self.projectExplorerTree.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + self.projectExplorerTree.customContextMenuRequested.connect(self.on_right_click) + self.projectExplorerTree.clicked.connect(self.on_click) + self.projectExplorerTree.expandAll() + # set model Project Properties + + self.propertiesModel = treeModel() + self.propertiesModel.initProjectView() + self.treeProjectProperties.setModel(self.propertiesModel) + self.treeProjectProperties.expandAll() + self.treeProjectProperties.allColumnsShowFocus() + self.treeProjectProperties.resizeColumnToContents(1) + + # set Project + self.proDelay.setEnabled(False) + self.proSet.setEnabled(False) + self.proDataType.setReadOnly(True) + + # set Operation Voltage + self.volOpComChannels.setEnabled(False) + self.volOpComHeights.setEnabled(False) + self.volOpFilter.setEnabled(False) + self.volOpComProfile.setEnabled(False) + self.volOpComCode.setEnabled(False) + self.volOpCohInt.setEnabled(False) + self.volOpRadarfrequency.setEnabled(False) + + self.volOpChannel.setEnabled(False) + self.volOpHeights.setEnabled(False) + self.volOpProfile.setEnabled(False) + self.volOpComMode.setEnabled(False) + + self.volGraphPath.setEnabled(False) + self.volGraphPrefix.setEnabled(False) + self.volGraphToolPath.setEnabled(False) + + # set Graph Voltage + self.volGraphChannelList.setEnabled(False) + self.volGraphfreqrange.setEnabled(False) + self.volGraphHeightrange.setEnabled(False) + + # set Operation Spectra + self.specOpnFFTpoints.setEnabled(False) + self.specOpProfiles.setEnabled(False) + self.specOpippFactor.setEnabled(False) + self.specOppairsList.setEnabled(False) + self.specOpComChannel.setEnabled(False) + self.specOpComHeights.setEnabled(False) + self.specOpIncoherent.setEnabled(False) + self.specOpgetNoise.setEnabled(False) + self.specOpRadarfrequency.setEnabled(False) + + + self.specOpChannel.setEnabled(False) + self.specOpHeights.setEnabled(False) + # set Graph Spectra + self.specGgraphChannelList.setEnabled(False) + self.specGgraphFreq.setEnabled(False) + self.specGgraphHeight.setEnabled(False) + self.specGgraphDbsrange.setEnabled(False) + self.specGgraphmagnitud.setEnabled(False) + self.specGgraphTminTmax.setEnabled(False) + self.specGgraphTimeRange.setEnabled(False) + self.specGraphPath.setEnabled(False) + self.specGraphToolPath.setEnabled(False) + self.specGraphPrefix.setEnabled(False) + + self.specGgraphftpratio.setEnabled(False) + # set Operation SpectraHeis + self.specHeisOpIncoherent.setEnabled(False) + self.specHeisOpCobIncInt.setEnabled(False) + # set Graph SpectraHeis + self.specHeisGgraphChannelList.setEnabled(False) + self.specHeisGgraphXminXmax.setEnabled(False) + self.specHeisGgraphYminYmax.setEnabled(False) + self.specHeisGgraphTminTmax.setEnabled(False) + self.specHeisGgraphTimeRange.setEnabled(False) + self.specHeisGgraphftpratio.setEnabled(False) + self.specHeisGraphPath.setEnabled(False) + self.specHeisGraphPrefix.setEnabled(False) + self.specHeisGraphToolPath.setEnabled(False) + + + # tool tip gui + QtGui.QToolTip.setFont(QtGui.QFont('SansSerif', 10)) + self.projectExplorerTree.setToolTip('Right clik to add Project or Unit Process') + # tool tip gui project + self.proComWalk.setToolTip('On Files:Search file in format .r or pdata On Folders:Search file in a directory DYYYYDOY') + self.proComWalk.setCurrentIndex(0) + # tool tip gui volOp + self.volOpChannel.setToolTip('Example: 1,2,3,4,5') + self.volOpHeights.setToolTip('Example: 90,180') + self.volOpFilter.setToolTip('Example: 3') + self.volOpProfile.setToolTip('Example:0,125 ') + self.volOpCohInt.setToolTip('Example: 100') + self.volOpOk.setToolTip('If you have finish, please Ok ') + # tool tip gui volGraph + self.volGraphfreqrange.setToolTip('Example: 10,150') + self.volGraphHeightrange.setToolTip('Example: 20,180') + # tool tip gui specOp + self.specOpnFFTpoints.setToolTip('Example: 100') + self.specOpProfiles.setToolTip('Example: 100') + self.specOpippFactor.setToolTip('Example:1') + self.specOpIncoherent.setToolTip('Example: 150') + self.specOpgetNoise.setToolTip('Example:20,180,30,120 (minHei,maxHei,minVel,maxVel)') + + self.specOpChannel.setToolTip('Example: 1,2,3,4,5') + self.specOpHeights.setToolTip('Example: 90,180') + self.specOppairsList.setToolTip('Example: (0,1),(2,3)') + # tool tip gui specGraph + + self.specGgraphChannelList.setToolTip('Example: Myplot') + self.specGgraphFreq.setToolTip('Example: 10,150') + self.specGgraphHeight.setToolTip('Example: 20,160') + self.specGgraphDbsrange.setToolTip('Example: 30,170') + + self.specGraphPrefix.setToolTip('Example: figure') + +class UnitProcessWindow(QMainWindow, Ui_UnitProcess): + """ + Class documentation goes here. + """ + closed = pyqtSignal() + create = False + + def __init__(self, parent=None): + """ + Constructor + """ + QMainWindow.__init__(self, parent) + self.setupUi(self) + self.getFromWindow = None + self.getfromWindowList = [] + self.dataTypeProject = None + + self.listUP = None + + @pyqtSignature("") + def on_unitPokbut_clicked(self): + """ + Slot documentation goes here. + """ + self.create = True + self.getFromWindow = self.getfromWindowList[int(self.comboInputBox.currentIndex())] + # self.nameofUP= str(self.nameUptxt.text()) + self.typeofUP = str(self.comboTypeBox.currentText()) + self.close() + + + @pyqtSignature("") + def on_unitPcancelbut_clicked(self): + """ + Slot documentation goes here. + """ + self.create = False + self.close() + + def loadTotalList(self): + self.comboInputBox.clear() + for i in self.getfromWindowList: + + name = i.getElementName() + if name == 'Project': + id = i.id + name = i.name + if self.dataTypeProject == 'Voltage': + self.comboTypeBox.clear() + self.comboTypeBox.addItem("Voltage") + + if self.dataTypeProject == 'Spectra': + self.comboTypeBox.clear() + self.comboTypeBox.addItem("Spectra") + self.comboTypeBox.addItem("Correlation") + if self.dataTypeProject == 'Fits': + self.comboTypeBox.clear() + self.comboTypeBox.addItem("SpectraHeis") + + + if name == 'ProcUnit': + id = int(i.id) - 1 + name = i.datatype + if name == 'Voltage': + self.comboTypeBox.clear() + self.comboTypeBox.addItem("Spectra") + self.comboTypeBox.addItem("SpectraHeis") + self.comboTypeBox.addItem("Correlation") + if name == 'Spectra': + self.comboTypeBox.clear() + self.comboTypeBox.addItem("Spectra") + self.comboTypeBox.addItem("SpectraHeis") + self.comboTypeBox.addItem("Correlation") + if name == 'SpectraHeis': + self.comboTypeBox.clear() + self.comboTypeBox.addItem("SpectraHeis") + + self.comboInputBox.addItem(str(name)) + # self.comboInputBox.addItem(str(name)+str(id)) + + def closeEvent(self, event): + self.closed.emit() + event.accept() + +class Ftp(QMainWindow, Ui_Ftp): + """ + Class documentation goes here. + """ + create = False + closed = pyqtSignal() + server = None + folder = None + username = None + password = None + ftp_wei = None + exp_code = None + sub_exp_code = None + plot_pos = None + + def __init__(self, parent=None): + """ + Constructor + """ + QMainWindow.__init__(self, parent) + self.setupUi(self) + self.setParameter() + + def setParameter(self): + self.setWindowTitle("ROJ-Signal Chain") + self.serverFTP.setToolTip('Example: jro-app.igp.gob.pe') + self.folderFTP.setToolTip('Example: /home/wmaster/graficos') + self.usernameFTP.setToolTip('Example: operator') + self.passwordFTP.setToolTip('Example: mst2010vhf ') + self.weightFTP.setToolTip('Example: 0') + self.expcodeFTP.setToolTip('Example: 0') + self.subexpFTP.setToolTip('Example: 0') + self.plotposFTP.setToolTip('Example: 0') + + def setParmsfromTemporal(self, server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos): + self.serverFTP.setText(str(server)) + self.folderFTP.setText(str(folder)) + self.usernameFTP.setText(str(username)) + self.passwordFTP.setText(str(password)) + self.weightFTP.setText(str(ftp_wei)) + self.expcodeFTP.setText(str(exp_code)) + self.subexpFTP.setText(str(sub_exp_code)) + self.plotposFTP.setText(str(plot_pos)) + + def getParmsFromFtpWindow(self): + """ + Return Inputs Project: + - server + - folder + - username + - password + - ftp_wei + - exp_code + - sub_exp_code + - plot_pos + """ + name_server_ftp = str(self.serverFTP.text()) + try: + name = str(self.serverFTP.text()) + except: + self.console.clear() + self.console.append("Please Write a FTP Server") + return 0 + + folder_server_ftp = str(self.folderFTP.text()) + try: + folder = str(self.folderFTP.text()) + except: + self.console.clear() + self.console.append("Please Write a Folder") + return 0 + + username_ftp = str(self.usernameFTP.text()) + try: + username = str(self.usernameFTP.text()) + except: + self.console.clear() + self.console.append("Please Write a User Name") + return 0 + + password_ftp = str(self.passwordFTP.text()) + try: + password = str(self.passwordFTP.text()) + except: + self.console.clear() + self.console.append("Please Write a passwordFTP") + return 0 + + ftp_wei = self.weightFTP.text() + if not ftp_wei == "": + try: + ftp_wei = int(self.weightFTP.text()) + except: + self.console.clear() + self.console.append("Please Write a ftp_wei number") + return 0 + + exp_code = self.expcodeFTP.text() + if not exp_code == "": + try: + exp_code = int(self.expcodeFTP.text()) + except: + self.console.clear() + self.console.append("Please Write a exp_code number") + return 0 + + + sub_exp_code = self.subexpFTP.text() + if not sub_exp_code == "": + try: + sub_exp_code = int(self.subexpFTP.text()) + except: + self.console.clear() + self.console.append("Please Write a sub_exp_code number") + return 0 + + plot_pos = self.plotposFTP.text() + if not plot_pos == "": + try: + plot_pos = int(self.plotposFTP.text()) + except: + self.console.clear() + self.console.append("Please Write a plot_pos number") + return 0 + + return name_server_ftp, folder_server_ftp, username_ftp, password_ftp, ftp_wei, exp_code, sub_exp_code, plot_pos + + @pyqtSignature("") + def on_ftpOkButton_clicked(self): + server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos = self.getParmsFromFtpWindow() + self.create = True + self.close() + + @pyqtSignature("") + def on_ftpCancelButton_clicked(self): + self.create = False + self.close() + + def closeEvent(self, event): + self.closed.emit() + event.accept() + +class ftpBuffer(): + server = None + folder = None + username = None + password = None + ftp_wei = None + exp_code = None + sub_exp_code = None + plot_pos = None + create = False + withoutconfig = False + createforView = False + + + def __init__(self): + self.server = None + self.folder = None + self.username = None + self.password = None + self.ftp_wei = None + self.exp_code = None + self.sub_exp_code = None + self.plot_pos = None + # self.create = False + + def setwithoutconfiguration(self): + self.server = "jro-app.igp.gob.pe" + self.folder = "/home/wmaster/graficos" + self.username = "operator" + self.password = "mst2010vhf" + self.ftp_wei = "0" + self.exp_code = "0" + self.sub_exp_code = "0" + self.plot_pos = "0" + self.withoutconfig = True + + def save(self, server, folder, username, password, ftp_wei, exp_code, sub_exp_code, plot_pos): + self.server = server + self.folder = folder + self.username = username + self.password = password + self.ftp_wei = ftp_wei + self.exp_code = exp_code + self.sub_exp_code = sub_exp_code + self.plot_pos = plot_pos + self.create = True + self.withoutconfig = False + self.createforView = True + + + def recover(self): + return self.server, self.folder, self.username, self.password, self.ftp_wei, self.exp_code, self.sub_exp_code, self.plot_pos + +class ShowMeConsole(QtCore.QObject): + textWritten = QtCore.pyqtSignal(str) + def write (self, text): + self.textWritten.emit(str(text)) + +class PlotManager(): + def __init__(self, queue): + self.queue = queue + self.objPlotDict = {} + + def processIncoming(self): + while self.queue.qsize(): + try: + dataFromQueue = self.queue.get(True) + if dataFromQueue == None: + continue + + dataPlot = dataFromQueue['data'] + kwargs = dataFromQueue['kwargs'] + id = kwargs['id'] + if 'channelList' in kwargs.keys(): + channelList = kwargs['channelList'] + else: + channelList = None + plotname = kwargs.pop('type') + + if not(id in self.objPlotDict.keys()): + className = eval(plotname) + self.objPlotDict[id] = className(id, channelList, dataPlot) + self.objPlotDict[id].show() + + self.objPlotDict[id].run(dataPlot , **kwargs) + + except Queue.Empty: + pass + + diff --git a/schainpy/gui/viewcontroller/comm.py b/schainpy/gui/viewcontroller/comm.py new file mode 100644 index 0000000..866107d --- /dev/null +++ b/schainpy/gui/viewcontroller/comm.py @@ -0,0 +1,97 @@ +import threading +import Queue +import pickle +import numpy, os, sys + +from schainpy.controller import Project +from command import * + +class ControllerThread(threading.Thread): + def __init__(self, filename, data_q): + super(ControllerThread, self).__init__() + self.filename = filename + self.data_q = data_q + self.control = {'stop':False,'pause':False} + + def stop(self): + self.control['stop'] = True + + def pause(self): + self.control['pause'] = not(self.control['pause']) + + def run(self): + self.control['stop'] = False + self.control['pause'] = False + self.controllerObj = Project(self.control, self.data_q) + self.controllerObj.readXml(self.filename) + self.controllerObj.createObjects() + self.controllerObj.connectObjects() + self.controllerObj.run() + +class CommCtrlProcessThread(threading.Thread): + """ Implements the threading.Thread interface (start, join, etc.) and + can be controlled via the cmd_q Queue attribute. Replies are placed in + the reply_q Queue attribute. + """ + def __init__(self, cmd_q=Queue.Queue(), reply_q=Queue.Queue()): + super(CommCtrlProcessThread, self).__init__() + self.cmd_q = cmd_q + self.reply_q = reply_q + +# self.print_q = Queue.Queue() + self.data_q = Queue.Queue() + + self.alive = threading.Event() + self.alive.set() + self.socket = None + + self.socketIO = None + self.mySocket = None + + + self.handlers = { + ProcessCommand.PROCESS: self._handle_ioPROCESSTHREAD, + ProcessCommand.MESSAGE: self._handle_ioMESSAGE, + ProcessCommand.DATA: self._handle_ioDATA, + ProcessCommand.STOP: self._handle_ioSTOP, + ProcessCommand.PAUSE: self._handle_ioPAUSE + } + + def run(self): + while self.alive.isSet(): + try: + cmd = self.cmd_q.get(True, 0.1) + self.handlers[cmd.type](cmd) + except Queue.Empty as e: + continue + + + def _handle_ioPROCESSTHREAD(self, cmd): + filename = cmd.data + self.controllerObj = ControllerThread(filename=filename, data_q=self.data_q) + self.controllerObj.start() + + def _handle_ioPAUSE(self, cmd): + self.controllerObj.pause() + + def _handle_ioSTOP(self, cmd): + self.controllerObj.stop() + + def _handle_ioDATA(self, cmd): + self.reply_q.put(self._success_reply_data(data=cmd.data)) + + def _handle_ioMESSAGE(self, cmd): + self.reply_q.put(self._success_reply_message(data=cmd.data)) + + def _success_reply_data(self, data=None): + return ClientReply(ClientReply.DATA, data) + + def _success_reply_message(self, data=None): + return ClientReply(ClientReply.MESSAGE, data) + + def join(self, timeout=None): + self.alive.clear() + threading.Thread.join(self, timeout) + + + \ No newline at end of file diff --git a/schainpy/gui/viewcontroller/command.py b/schainpy/gui/viewcontroller/command.py new file mode 100644 index 0000000..994ebfc --- /dev/null +++ b/schainpy/gui/viewcontroller/command.py @@ -0,0 +1,50 @@ +class ProcessCommand(object): + """ A command to the client thread. + Each command type has its associated data: + + DATA: Data Radar Object + MESSAGE: Data String + STOP: Event to Stop the process thread + PAUSE: Event to Pause the process thread + """ + PROCESS, DATA, MESSAGE, STOP, PAUSE = range(5) + + def __init__(self, type, data=None): + self.type = type + self.data = data + + +class ClientCommand(object): + """ A command to the client thread. + Each command type has its associated data: + + CONNECT: (host, port) tuple + SEND: Data string + RECEIVE: None + CLOSE: None + PROCESS: to processing + SEND: send a data + SENDXML: send xml file + """ + CONNECT, SEND, SENDXML, RECEIVE, CLOSE, PROCESS = range(6) + + def __init__(self, type, data=None): + self.type = type + self.data = data + + +class ClientReply(object): + """ A reply from the client thread. + Each reply type has its associated data: + + ERROR: The error string + MESSAGE: Data String + DATA: Data + SUCCESS: Depends on the command - for RECEIVE it's the received + data string, for others None. + """ + ERROR, SUCCESS, MESSAGE, DATA= range(4) + + def __init__(self, type, data=None): + self.type = type + self.data = data diff --git a/schainpy/gui/viewcontroller/ftp.py b/schainpy/gui/viewcontroller/ftp.py new file mode 100644 index 0000000..5b08bbc --- /dev/null +++ b/schainpy/gui/viewcontroller/ftp.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- + +""" +Module implementing Ftp. +""" + +from PyQt4.QtGui import QMainWindow +from PyQt4.QtCore import pyqtSignature + +from schainpy.gui.viewer.ftp import Ui_Ftp + +class Ftp(QMainWindow, Ui_MainWindow): + """ + Class documentation goes here. + """ + def __init__(self, parent = None): + """ + Constructor + """ + QMainWindow.__init__(self, parent) + self.setupUi(self) diff --git a/schainpy/gui/viewcontroller/graphics/__init__.py b/schainpy/gui/viewcontroller/graphics/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/schainpy/gui/viewcontroller/graphics/__init__.py diff --git a/schainpy/gui/viewcontroller/graphics/customftp.py b/schainpy/gui/viewcontroller/graphics/customftp.py new file mode 100644 index 0000000..ddb0c9c --- /dev/null +++ b/schainpy/gui/viewcontroller/graphics/customftp.py @@ -0,0 +1,298 @@ +import os.path +import ftplib + + +class Ftp(): + """ + Ftp is a public class used to define custom File Transfer Protocol from "ftplib" python module + + Non-standard Python modules used: None + + Written by "Daniel Suarez":mailto:daniel.suarez@jro.igp.gob.pe Oct. 26, 2010 + """ + + def __init__(self,host = None, username=None, passw=None, remotefolder=None): + """ + This method is used to setting parameters for FTP and establishing connection to remote host + + Inputs: + host - remote host IP Address + + username - remote host Username + + passw - remote host Passw + + remotefolder - remote host current working directory + + Return: void + + Affects: + self.status - in Error Case or Connection Failed this parameter is set to 1 else 0 + + self.folderList - sub-folder list of remote folder + + self.fileList - file list of remote folder + + + """ + + if ((host == None) and (username==None) and (passw==None) and (remotefolder==None)): + host, username, passw, remotefolder = self.parmsByDefault() + + self.host = host + self.username = username + self.passw = passw + self.remotefolder = remotefolder + self.file = None + self.ftp = None + self.status = 0 + + try: + self.ftp = ftplib.FTP(self.host) + self.ftp.login(self.username,self.passw) + self.ftp.cwd(self.remotefolder) +# print 'Connect to FTP Server: Successfully' + + except ftplib.all_errors: + print 'Error FTP Service' + self.status = 1 + return + + + + self.dirList = [] + + try: + self.dirList = self.ftp.nlst() + + except ftplib.error_perm, resp: + if str(resp) == "550 No files found": + print "no files in this directory" + self.status = 1 + return + + except ftplib.all_errors: + print 'Error Displaying Dir-Files' + self.status = 1 + return + + self.fileList = [] + self.folderList = [] + #only for test + for f in self.dirList: + name, ext = os.path.splitext(f) + if ext != '': + self.fileList.append(f) +# print 'filename: %s - size: %d'%(f,self.ftp.size(f)) + + def parmsByDefault(self): + host = 'jro-app.igp.gob.pe' + username = 'wmaster' + passw = 'mst2010vhf' + remotefolder = '/home/wmaster/graficos' + +# host = 'jro.igp.gob.pe' +# username = 'operaciones' +# passw = 'mst2010vhf' +# remotefolder = '/users/databases/on-line' + + return host, username, passw, remotefolder + + + def mkd(self,dirname): + """ + mkd is used to make directory in remote host + + Input: + dirname - directory name + + Return: + 1 in error case else 0 + """ + try: + self.ftp.mkd(dirname) + except: + print 'Error creating remote folder:%s'%dirname + return 1 + + return 0 + + + def delete(self,filename): + """ + delete is used to delete file in current working directory of remote host + + Input: + filename - filename to delete in remote folder + + Return: + 1 in error case else 0 + """ + + try: + self.ftp.delete(filename) + except: + print 'Error deleting remote file:%s'%filename + return 1 + + return 0 + + def download(self,filename,localfolder): + """ + download is used to downloading file from remote folder into local folder + + Inputs: + filename - filename to donwload + + localfolder - directory local to store filename + + Returns: + self.status - 1 in error case else 0 + """ + + self.status = 0 + + + if not(filename in self.fileList): + print 'filename:%s not exists'%filename + self.status = 1 + return self.status + + newfilename = os.path.join(localfolder,filename) + + self.file = open(newfilename, 'wb') + + try: + print 'Download: ' + filename + self.ftp.retrbinary('RETR ' + filename, self.__handleDownload) + print 'Download Complete' + except ftplib.all_errors: + print 'Error Downloading ' + filename + self.status = 1 + return self.status + + self.file.close() + + return self.status + + + def __handleDownload(self,block): + """ + __handleDownload is used to handle writing file + """ + self.file.write(block) + + + def upload(self,filename,remotefolder=None): + """ + upload is used to uploading local file to remote directory + + Inputs: + filename - full path name of local file to store in remote directory + + remotefolder - remote directory + + Returns: + self.status - 1 in error case else 0 + """ + + if remotefolder == None: + remotefolder = self.remotefolder + + self.status = 0 + + try: + self.ftp.cwd(remotefolder) + + self.file = open(filename, 'rb') + + (head, tail) = os.path.split(filename) + + command = "STOR " + tail + + print 'Uploading: ' + tail + self.ftp.storbinary(command, self.file) + print 'Upload Completed' + + except ftplib.all_errors: + print 'Error Uploading ' + tail + self.status = 1 + return self.status + + self.file.close() + + #back to initial directory in __init__() + self.ftp.cwd(self.remotefolder) + + return self.status + + + def dir(self,remotefolder): + """ + dir is used to change working directory of remote host and get folder and file list + + Input: + remotefolder - current working directory + + Affects: + self.fileList - file list of working directory + + Return: + infoList - list with filenames and size of file in bytes + + self.folderList - folder list + """ + + self.remotefolder = remotefolder + print 'Change to ' + self.remotefolder + try: + self.ftp.cwd(remotefolder) + except ftplib.all_errors: + print 'Error Change to ' + self.remotefolder + infoList = None + self.folderList = None + return infoList,self.folderList + + self.dirList = [] + + try: + self.dirList = self.ftp.nlst() + + except ftplib.error_perm, resp: + if str(resp) == "550 No files found": + print "no files in this directory" + infoList = None + self.folderList = None + return infoList,self.folderList + except ftplib.all_errors: + print 'Error Displaying Dir-Files' + infoList = None + self.folderList = None + return infoList,self.folderList + + infoList = [] + self.fileList = [] + self.folderList = [] + for f in self.dirList: + name,ext = os.path.splitext(f) + if ext != '': + self.fileList.append(f) + value = (f,self.ftp.size(f)) + infoList.append(value) + + if ext == '': + self.folderList.append(f) + + return infoList,self.folderList + + + def close(self): + """ + close is used to close and end FTP connection + + Inputs: None + + Return: void + + """ + self.ftp.close() \ No newline at end of file diff --git a/schainpy/gui/viewcontroller/graphics/figure_gui.py b/schainpy/gui/viewcontroller/graphics/figure_gui.py new file mode 100644 index 0000000..d2d581d --- /dev/null +++ b/schainpy/gui/viewcontroller/graphics/figure_gui.py @@ -0,0 +1,538 @@ +import os +import numpy +import time, datetime +import mpldriver_gui +from customftp import * +import Queue +import threading + +class FTP_Thread (threading.Thread): + def __init__(self): + threading.Thread.__init__(self) + self.exitFlag = 0 + self.queueLock = threading.Lock() + self.workQueue = Queue.Queue() + + def run(self): + self.send_data() + + def fin(self): + self.exitFlag = 1 + + def put_data(self, data): + # Fill the queue + self.queueLock.acquire() + self.workQueue.put(data) + self.queueLock.release() + + def send_data(self): + while not self.exitFlag: + if self.workQueue.qsize(): + + data = self.workQueue.get(True) + + try: + ftpObj = Ftp(host=data['server'], + username=data['username'], + passw=data['password'], + remotefolder=data['folder']) + + ftpObj.upload(data['figfilename']) + ftpObj.close() + except: + print ValueError, 'Error FTP' + print "don't worry still running the program" + + +class Figure(): + + __driver = mpldriver_gui + __isConfigThread = False + fig = None + + id = None + wintitle = None + width = None + height = None + nplots = None + timerange = None + + axesObjList = [] + + WIDTH = None + HEIGHT = None + PREFIX = 'fig' + + FTP_WEI = None #(WW) + EXP_CODE = None #(EXP) + SUB_EXP_CODE = None #(SS) + PLOT_CODE = None #(TT) + PLOT_POS = None #(NN) + + + + def __init__(self): + + raise ValueError, "This method is not implemented" + + def getSubplots(self): + + raise ValueError, "Abstract method: This method should be defined" + + def getAxesObjList(self): + + return self.axesObjList + + def getScreenDim(self, widthplot, heightplot): + + nrow, ncol = self.getSubplots() + widthscreen = widthplot*ncol + heightscreen = heightplot*nrow + + return widthscreen, heightscreen + + def getFilename(self, name, ext='.png'): + path = '%s%03d' %(self.PREFIX, self.id) + filename = '%s_%s%s' %(self.PREFIX, name, ext) + return os.path.join(path, filename) + + def createFigure(self, id, wintitle, widthplot=None, heightplot=None): + + if widthplot == None: + widthplot = self.WIDTH + + if heightplot == None: + heightplot = self.HEIGHT + + self.id = id + + self.wintitle = wintitle + + self.widthscreen, self.heightscreen = self.getScreenDim(widthplot, heightplot) + + self.fig = self.__driver.createFigure(id=self.id, + wintitle=self.wintitle, + width=self.widthscreen, + height=self.heightscreen) + + self.axesObjList = [] + + return self.fig + + def clearAxes(self): + self.axesObjList = [] + + def addAxes(self, *args): + axesObj = Axes(self.fig, *args) + self.axesObjList.append(axesObj) + + def saveFigure(self, figpath, figfile, *args): + + filename = os.path.join(figpath, figfile) + + fullpath = os.path.split(filename)[0] + + if not os.path.exists(fullpath): + subpath = os.path.split(fullpath)[0] + + if not os.path.exists(subpath): + os.mkdir(subpath) + + os.mkdir(fullpath) + + self.__driver.saveFigure(self.fig, filename, *args) + + def getTimeLim(self, x, xmin, xmax): + + if self.timerange != None: + txmin = x[0] - x[0]%self.timerange + else: + txmin = numpy.min(x) + + thisdatetime = datetime.datetime.utcfromtimestamp(txmin) + thisdate = datetime.datetime.combine(thisdatetime.date(), datetime.time(0,0,0)) + + #################################################### + #If the x is out of xrange + if xmax < (thisdatetime - thisdate).seconds/(60*60.): + xmin = None + xmax = None + + if xmin == None: + td = thisdatetime - thisdate + xmin = td.seconds/(60*60.) + + if xmax == None: + xmax = xmin + self.timerange/(60*60.) + + mindt = thisdate + datetime.timedelta(hours=xmin) - datetime.timedelta(seconds=time.timezone) + tmin = time.mktime(mindt.timetuple()) + + maxdt = thisdate + datetime.timedelta(hours=xmax) - datetime.timedelta(seconds=time.timezone) + tmax = time.mktime(maxdt.timetuple()) + + self.timerange = tmax - tmin + + return tmin, tmax + + def sendByFTP(self, figfilename, server, folder, username, password): + ftpObj = Ftp(host=server, username=username, passw=password, remotefolder=folder) + ftpObj.upload(figfilename) + ftpObj.close() + + def sendByFTP_Thread(self, figfilename, server, folder, username, password): + data = {'figfilename':figfilename,'server':server,'folder':folder,'username':username,'password':password} + + if not(self.__isConfigThread): + + self.thread = FTP_Thread() + self.thread.start() + self.__isConfigThread = True + + self.thread.put_data(data) + + + def getNameToFtp(self, thisDatetime, FTP_WEI, EXP_CODE, SUB_EXP_CODE, PLOT_CODE, PLOT_POS): + YEAR_STR = '%4.4d'%thisDatetime.timetuple().tm_year + DOY_STR = '%3.3d'%thisDatetime.timetuple().tm_yday + FTP_WEI = '%2.2d'%FTP_WEI + EXP_CODE = '%3.3d'%EXP_CODE + SUB_EXP_CODE = '%2.2d'%SUB_EXP_CODE + PLOT_CODE = '%2.2d'%PLOT_CODE + PLOT_POS = '%2.2d'%PLOT_POS + name = YEAR_STR + DOY_STR + FTP_WEI + EXP_CODE + SUB_EXP_CODE + PLOT_CODE + PLOT_POS + return name + + def draw(self): + self.__driver.draw(self.fig) + + axesList = property(getAxesObjList) + +class Axes: + + __driver = mpldriver_gui + fig = None + ax = None + plot = None + __missing = 1E30 + __firsttime = None + + __showprofile = False + + xmin = None + xmax = None + ymin = None + ymax = None + zmin = None + zmax = None + + x_buffer = None + z_buffer = None + + decimationx = None + decimationy = None + + __MAXNUMX = 1000. + __MAXNUMY = 500. + + def __init__(self, *args): + + """ + + Input: + *args : Los parametros necesarios son + fig, nrow, ncol, xpos, ypos, colspan, rowspan + """ + + ax = self.__driver.createAxes(*args) + self.fig = args[0] + self.ax = ax + self.plot = None + + self.__firsttime = True + self.idlineList = [] + + self.x_buffer = numpy.array([]) + self.z_buffer = numpy.array([]) + + def pcolor(self, x, y, z, + xmin=None, xmax=None, + ymin=None, ymax=None, + zmin=None, zmax=None, + xlabel='', ylabel='', + title='', rti = False, colormap='jet', + **kwargs): + + """ + Input: + x : + y : + x : + xmin : + xmax : + ymin : + ymax : + zmin : + zmax : + xlabel : + ylabel : + title : + **kwargs : Los parametros aceptados son + ticksize=9, + cblabel='' + rti = True or False + """ + + if self.__firsttime: + + if xmin == None: xmin = numpy.nanmin(x) + if xmax == None: xmax = numpy.nanmax(x) + if ymin == None: ymin = numpy.nanmin(y) + if ymax == None: ymax = numpy.nanmax(y) + if zmin == None: zmin = numpy.nanmin(z) + if zmax == None: zmax = numpy.nanmax(z) + + + self.plot = self.__driver.createPcolor(self.ax, x, y, z, + xmin, xmax, + ymin, ymax, + zmin, zmax, + xlabel=xlabel, + ylabel=ylabel, + title=title, + colormap=colormap, + **kwargs) + + if self.xmin == None: self.xmin = xmin + if self.xmax == None: self.xmax = xmax + if self.ymin == None: self.ymin = ymin + if self.ymax == None: self.ymax = ymax + if self.zmin == None: self.zmin = zmin + if self.zmax == None: self.zmax = zmax + + self.__firsttime = False + return + + if rti: + self.__driver.addpcolor(self.ax, x, y, z, self.zmin, self.zmax, + xlabel=xlabel, + ylabel=ylabel, + title=title, + colormap=colormap) + return + + self.__driver.pcolor(self.plot, z, + xlabel=xlabel, + ylabel=ylabel, + title=title) + + + def pline(self, x, y, + xmin=None, xmax=None, + ymin=None, ymax=None, + xlabel='', ylabel='', + title='', + **kwargs): + + """ + + Input: + x : + y : + xmin : + xmax : + ymin : + ymax : + xlabel : + ylabel : + title : + **kwargs : Los parametros aceptados son + + ticksize + ytick_visible + """ + + if self.__firsttime: + + if xmin == None: xmin = numpy.nanmin(x) + if xmax == None: xmax = numpy.nanmax(x) + if ymin == None: ymin = numpy.nanmin(y) + if ymax == None: ymax = numpy.nanmax(y) + + self.plot = self.__driver.createPline(self.ax, x, y, + xmin, xmax, + ymin, ymax, + xlabel=xlabel, + ylabel=ylabel, + title=title, + **kwargs) + + self.idlineList.append(0) + self.__firsttime = False + return + + self.__driver.pline(self.plot, x, y, xlabel=xlabel, + ylabel=ylabel, + title=title) + + def pmultiline(self, x, y, + xmin=None, xmax=None, + ymin=None, ymax=None, + xlabel='', ylabel='', + title='', + **kwargs): + + if self.__firsttime: + + if xmin == None: xmin = numpy.nanmin(x) + if xmax == None: xmax = numpy.nanmax(x) + if ymin == None: ymin = numpy.nanmin(y) + if ymax == None: ymax = numpy.nanmax(y) + + self.plot = self.__driver.createPmultiline(self.ax, x, y, + xmin, xmax, + ymin, ymax, + xlabel=xlabel, + ylabel=ylabel, + title=title, + **kwargs) + self.__firsttime = False + return + + self.__driver.pmultiline(self.plot, x, y, xlabel=xlabel, + ylabel=ylabel, + title=title) + + def pmultilineyaxis(self, x, y, + xmin=None, xmax=None, + ymin=None, ymax=None, + xlabel='', ylabel='', + title='', + **kwargs): + + if self.__firsttime: + + if xmin == None: xmin = numpy.nanmin(x) + if xmax == None: xmax = numpy.nanmax(x) + if ymin == None: ymin = numpy.nanmin(y) + if ymax == None: ymax = numpy.nanmax(y) + + self.plot = self.__driver.createPmultilineYAxis(self.ax, x, y, + xmin, xmax, + ymin, ymax, + xlabel=xlabel, + ylabel=ylabel, + title=title, + **kwargs) + if self.xmin == None: self.xmin = xmin + if self.xmax == None: self.xmax = xmax + if self.ymin == None: self.ymin = ymin + if self.ymax == None: self.ymax = ymax + + self.__firsttime = False + return + + self.__driver.pmultilineyaxis(self.plot, x, y, xlabel=xlabel, + ylabel=ylabel, + title=title) + + def addpline(self, x, y, idline, **kwargs): + lines = self.ax.lines + + if idline in self.idlineList: + self.__driver.set_linedata(self.ax, x, y, idline) + + if idline not in(self.idlineList): + self.__driver.addpline(self.ax, x, y, **kwargs) + self.idlineList.append(idline) + + return + + def pcolorbuffer(self, x, y, z, + xmin=None, xmax=None, + ymin=None, ymax=None, + zmin=None, zmax=None, + xlabel='', ylabel='', + title='', rti = True, colormap='jet', + maxNumX = None, maxNumY = None, + **kwargs): + + if maxNumX == None: + maxNumX = self.__MAXNUMX + + if maxNumY == None: + maxNumY = self.__MAXNUMY + + if self.__firsttime: + self.z_buffer = z + self.x_buffer = numpy.hstack((self.x_buffer, x)) + + if xmin == None: xmin = numpy.nanmin(x) + if xmax == None: xmax = numpy.nanmax(x) + if ymin == None: ymin = numpy.nanmin(y) + if ymax == None: ymax = numpy.nanmax(y) + if zmin == None: zmin = numpy.nanmin(z) + if zmax == None: zmax = numpy.nanmax(z) + + + self.plot = self.__driver.createPcolor(self.ax, self.x_buffer, y, z, + xmin, xmax, + ymin, ymax, + zmin, zmax, + xlabel=xlabel, + ylabel=ylabel, + title=title, + colormap=colormap, + **kwargs) + + if self.xmin == None: self.xmin = xmin + if self.xmax == None: self.xmax = xmax + if self.ymin == None: self.ymin = ymin + if self.ymax == None: self.ymax = ymax + if self.zmin == None: self.zmin = zmin + if self.zmax == None: self.zmax = zmax + + self.__firsttime = False + return + + self.x_buffer = numpy.hstack((self.x_buffer, x[-1])) + self.z_buffer = numpy.hstack((self.z_buffer, z)) + + if self.decimationx == None: + deltax = float(self.xmax - self.xmin)/maxNumX + deltay = float(self.ymax - self.ymin)/maxNumY + + resolutionx = self.x_buffer[2]-self.x_buffer[0] + resolutiony = y[1]-y[0] + + self.decimationx = numpy.ceil(deltax / resolutionx) + self.decimationy = numpy.ceil(deltay / resolutiony) + + z_buffer = self.z_buffer.reshape(-1,len(y)) + + x_buffer = self.x_buffer[::self.decimationx] + y_buffer = y[::self.decimationy] + z_buffer = z_buffer[::self.decimationx, ::self.decimationy] + #=================================================== + + x_buffer, y_buffer, z_buffer = self.__fillGaps(x_buffer, y_buffer, z_buffer) + + self.__driver.addpcolorbuffer(self.ax, x_buffer, y_buffer, z_buffer, self.zmin, self.zmax, + xlabel=xlabel, + ylabel=ylabel, + title=title, + colormap=colormap) + def __fillGaps(self, x_buffer, y_buffer, z_buffer): + + deltas = x_buffer[1:] - x_buffer[0:-1] + x_median = numpy.median(deltas) + + index = numpy.where(deltas >= 2*x_median) + + if len(index[0]) != 0: + z_buffer[index[0],::] = self.__missing + z_buffer = numpy.ma.masked_inside(z_buffer,0.99*self.__missing,1.01*self.__missing) + + return x_buffer, y_buffer, z_buffer + + \ No newline at end of file diff --git a/schainpy/gui/viewcontroller/graphics/mpldriver_gui.py b/schainpy/gui/viewcontroller/graphics/mpldriver_gui.py new file mode 100644 index 0000000..3439f1a --- /dev/null +++ b/schainpy/gui/viewcontroller/graphics/mpldriver_gui.py @@ -0,0 +1,326 @@ +import numpy +import datetime +import sys + +from matplotlib.figure import Figure +from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas + +from mpl_toolkits.axes_grid1 import make_axes_locatable +from matplotlib.ticker import * +import matplotlib.gridspec as gridspec +import matplotlib.cm as cm +import matplotlib.colorbar + +def createFigure(id, wintitle, width, height, facecolor="w"): + figsize = (width,height) + fig = Figure(figsize=figsize, facecolor=facecolor) + + return fig + +def createAxes(fig, nrow, ncol, x, y, ratio): + width_ratios = [] + for i in range(ncol): + if i%2==0: + width_ratios.append(ratio) + else: + width_ratios.append(1) + + gs = gridspec.GridSpec(nrow, ncol, width_ratios=width_ratios) + ax = fig.add_subplot(gs[x,y]) + + return ax + +def saveFigure(fig, filename): + fig.savefig(filename) + + +def printLabels(ax, xlabel, ylabel, title): + + ax.set_xlabel(xlabel, size=11) + ax.set_ylabel(ylabel, size=11) + ax.set_title(title, size=12) + +def createPcolor(ax, x, y, z, xmin, xmax, ymin, ymax, zmin, zmax, + xlabel='', ylabel='', title='', ticksize = 9, + colormap='jet',cblabel='', cbsize="5%", + XAxisAsTime=False): + + divider = make_axes_locatable(ax) + ax_cb = divider.new_horizontal(size=cbsize, pad=0.05) + fig = ax.get_figure() + fig.add_axes(ax_cb) + + ax.set_xlim([xmin,xmax]) + ax.set_ylim([ymin,ymax]) + + printLabels(ax, xlabel, ylabel, title) + + imesh = ax.pcolormesh(x,y,z.T, vmin=zmin, vmax=zmax, cmap=cm.get_cmap(colormap)) + cb = fig.colorbar(imesh, cax=ax_cb) + cb.set_label(cblabel) + + for tick in ax.yaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + for tick in ax.xaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + for tick in cb.ax.get_yticklabels(): + tick.set_fontsize(ticksize) + + ax_cb.yaxis.tick_right() + + if '0.' in matplotlib.__version__[0:2]: + print "The matplotlib version has to be updated to 1.1 or newer" + return imesh + + if '1.0.' in matplotlib.__version__[0:4]: + print "The matplotlib version has to be updated to 1.1 or newer" + return imesh + + fig.tight_layout() + + if XAxisAsTime: + + func = lambda x, pos: ('%s') %(datetime.datetime.utcfromtimestamp(x).strftime("%H:%M:%S")) + ax.xaxis.set_major_formatter(FuncFormatter(func)) + ax.xaxis.set_major_locator(LinearLocator(7)) + + return imesh + +def pcolor(imesh, z, xlabel='', ylabel='', title=''): + + z = z.T + + ax = imesh.get_axes() + + printLabels(ax, xlabel, ylabel, title) + + imesh.set_array(z.ravel()) + +def addpcolorbuffer(ax, x, y, z, zmin, zmax, xlabel='', ylabel='', title='', colormap='jet'): + + printLabels(ax, xlabel, ylabel, title) + + ax.collections.remove(ax.collections[0]) + + ax.pcolormesh(x,y,z.T,vmin=zmin,vmax=zmax, cmap=matplotlib.pyplot.get_cmap(colormap)) + + +def draw(fig): + + if type(fig) == 'int': + raise ValueError, "This parameter should be of tpye matplotlib figure" + + fig.canvas.draw() + + +def createPline(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', + ticksize=9, xtick_visible=True, ytick_visible=True, + nxticks=4, nyticks=10, + grid=None): + + """ + + Input: + grid : None, 'both', 'x', 'y' + """ + fig = ax.get_figure() + ax.set_xlim([xmin,xmax]) + ax.set_ylim([ymin,ymax]) + + printLabels(ax, xlabel, ylabel, title) + + ###################################################### + if (xmax-xmin)<=1: + xtickspos = numpy.linspace(xmin,xmax,nxticks) + xtickspos = numpy.array([float("%.1f"%i) for i in xtickspos]) + ax.set_xticks(xtickspos) + else: + xtickspos = numpy.arange(nxticks)*int((xmax-xmin)/(nxticks)) + int(xmin) +# xtickspos = numpy.arange(nxticks)*float(xmax-xmin)/float(nxticks) + int(xmin) + ax.set_xticks(xtickspos) + + for tick in ax.get_xticklabels(): + tick.set_visible(xtick_visible) + + for tick in ax.xaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + ###################################################### + for tick in ax.get_yticklabels(): + tick.set_visible(ytick_visible) + + for tick in ax.yaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + ax.plot(x, y) + iplot = ax.lines[-1] + + ###################################################### + if '0.' in matplotlib.__version__[0:2]: + print "The matplotlib version has to be updated to 1.1 or newer" + return iplot + + if '1.0.' in matplotlib.__version__[0:4]: + print "The matplotlib version has to be updated to 1.1 or newer" + return iplot + + if grid != None: + ax.grid(b=True, which='major', axis=grid) + fig.tight_layout() + return iplot + +def set_linedata(ax, x, y, idline): + + ax.lines[idline].set_data(x,y) + +def pline(iplot, x, y, xlabel='', ylabel='', title=''): + + ax = iplot.get_axes() + + printLabels(ax, xlabel, ylabel, title) + + set_linedata(ax, x, y, idline=0) + +def addpline(ax, x, y, color, linestyle, lw): + + ax.plot(x,y,color=color,linestyle=linestyle,lw=lw) + +def createPmultiline(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', legendlabels=None, + ticksize=9, xtick_visible=True, ytick_visible=True, + nxticks=4, nyticks=10, + grid=None): + + """ + + Input: + grid : None, 'both', 'x', 'y' + """ + +# matplotlib.pyplot.ioff() + fig = ax.get_figure() + + lines = ax.plot(x.T, y) + leg = ax.legend(lines, legendlabels, loc='upper right') + leg.get_frame().set_alpha(0.5) + ax.set_xlim([xmin,xmax]) + ax.set_ylim([ymin,ymax]) + printLabels(ax, xlabel, ylabel, title) + + xtickspos = numpy.arange(nxticks)*int((xmax-xmin)/(nxticks)) + int(xmin) + ax.set_xticks(xtickspos) + + for tick in ax.get_xticklabels(): + tick.set_visible(xtick_visible) + + for tick in ax.xaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + for tick in ax.get_yticklabels(): + tick.set_visible(ytick_visible) + + for tick in ax.yaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + iplot = ax.lines[-1] + + if '0.' in matplotlib.__version__[0:2]: + print "The matplotlib version has to be updated to 1.1 or newer" + return iplot + + if '1.0.' in matplotlib.__version__[0:4]: + print "The matplotlib version has to be updated to 1.1 or newer" + return iplot + + if grid != None: + ax.grid(b=True, which='major', axis=grid) + +# matplotlib.pyplot.tight_layout() +# +# matplotlib.pyplot.ion() + + fig.tight_layout() + + return iplot + + +def pmultiline(iplot, x, y, xlabel='', ylabel='', title=''): + + ax = iplot.get_axes() + + printLabels(ax, xlabel, ylabel, title) + + for i in range(len(ax.lines)): + line = ax.lines[i] + line.set_data(x[i,:],y) + +def createPmultilineYAxis(ax, x, y, xmin, xmax, ymin, ymax, xlabel='', ylabel='', title='', legendlabels=None, + ticksize=9, xtick_visible=True, ytick_visible=True, + nxticks=4, nyticks=10, marker='.', markersize=10, linestyle="None", + grid=None, XAxisAsTime=False): + + +# matplotlib.pyplot.ioff() + fig = ax.get_figure() + + lines = ax.plot(x, y.T, linestyle='None', marker='.', markersize=markersize) + leg = ax.legend(lines, legendlabels, loc='upper left', bbox_to_anchor=(1.01, 1.00), numpoints=1, handlelength=1.5, \ + handletextpad=0.5, borderpad=0.5, labelspacing=0.5, borderaxespad=0.) + + for label in leg.get_texts(): label.set_fontsize(9) + + ax.set_xlim([xmin,xmax]) + ax.set_ylim([ymin,ymax]) + printLabels(ax, xlabel, ylabel, title) + +# xtickspos = numpy.arange(nxticks)*int((xmax-xmin)/(nxticks)) + int(xmin) +# ax.set_xticks(xtickspos) + + for tick in ax.get_xticklabels(): + tick.set_visible(xtick_visible) + + for tick in ax.xaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + for tick in ax.get_yticklabels(): + tick.set_visible(ytick_visible) + + for tick in ax.yaxis.get_major_ticks(): + tick.label.set_fontsize(ticksize) + + iplot = ax.lines[-1] + + if '0.' in matplotlib.__version__[0:2]: + print "The matplotlib version has to be updated to 1.1 or newer" + return iplot + + if '1.0.' in matplotlib.__version__[0:4]: + print "The matplotlib version has to be updated to 1.1 or newer" + return iplot + + if grid != None: + ax.grid(b=True, which='major', axis=grid) + +# matplotlib.pyplot.tight_layout() + + if XAxisAsTime: + + func = lambda x, pos: ('%s') %(datetime.datetime.utcfromtimestamp(x).strftime("%H:%M:%S")) + ax.xaxis.set_major_formatter(FuncFormatter(func)) + ax.xaxis.set_major_locator(LinearLocator(7)) + + fig.tight_layout() +# matplotlib.pyplot.ion() + + return iplot + +def pmultilineyaxis(iplot, x, y, xlabel='', ylabel='', title=''): + + ax = iplot.get_axes() + + printLabels(ax, xlabel, ylabel, title) + + for i in range(len(ax.lines)): + line = ax.lines[i] + line.set_data(x,y[i,:]) \ No newline at end of file diff --git a/schainpy/gui/viewcontroller/initwindow.py b/schainpy/gui/viewcontroller/initwindow.py index 6c58a9d..603091e 100644 --- a/schainpy/gui/viewcontroller/initwindow.py +++ b/schainpy/gui/viewcontroller/initwindow.py @@ -9,7 +9,7 @@ from PyQt4.QtCore import pyqtSignature from PyQt4 import QtCore from PyQt4 import QtGui -from viewer.ui_initwindow import Ui_InitWindow +from schainpy.gui.viewer.ui_initwindow import Ui_InitWindow class InitWindow(QDialog, Ui_InitWindow): """ @@ -22,7 +22,7 @@ class InitWindow(QDialog, Ui_InitWindow): QDialog.__init__(self, parent) self.setupUi(self) self.setWindowTitle("ROJ-Signal Chain") - self.setWindowIcon(QtGui.QIcon("figure/adn.jpg")) + self.setWindowIcon(QtGui.QIcon("schainpy/gui/figure/adn.jpg")) @pyqtSignature("") def on_ExitBtn_clicked(self): diff --git a/schainpy/gui/viewcontroller/mainwindow.py b/schainpy/gui/viewcontroller/mainwindow.py index 1d4a53f..d138009 100644 --- a/schainpy/gui/viewcontroller/mainwindow.py +++ b/schainpy/gui/viewcontroller/mainwindow.py @@ -11,12 +11,11 @@ from PyQt4 import QtGui from timeconversions import Doy2Date from modelProperties import treeModel -from viewer.ui_unitprocess import Ui_UnitProcess -from viewer.ui_window import Ui_window -from viewer.ui_mainwindow import Ui_MainWindow +from schainpy.gui.viewer.ui_unitprocess import Ui_UnitProcess +from schainpy.gui.viewer.ui_window import Ui_window +from schainpy.gui.viewer.ui_mainwindow import Ui_MainWindow - -from controller import Project,ReadUnitConf,ProcUnitConf,OperationConf,ParameterConf +from schainpy.controller import Project,ReadUnitConf,ProcUnitConf,OperationConf,ParameterConf import os diff --git a/schainpy/gui/viewcontroller/modelProperties.py b/schainpy/gui/viewcontroller/modelProperties.py index dfd7d2f..cd5b02a 100644 --- a/schainpy/gui/viewcontroller/modelProperties.py +++ b/schainpy/gui/viewcontroller/modelProperties.py @@ -1,277 +1,303 @@ -from PyQt4 import QtCore - -HORIZONTAL_HEADERS = ("Property","Value " ) - -HORIZONTAL = ("RAMA :",) - -class treeModel(QtCore.QAbstractItemModel): - ''' - a model to display a few names, ordered by encabezado - ''' - name=None - directorio=None - workspace=None - remode=None - dataformat=None - date=None - initTime=None - endTime=None - timezone=None - Summary=None - - description=None - - def __init__(self ,parent=None): - super(treeModel, self).__init__(parent) - self.people = [] - - - def properties_projecto(self,description): - self.caracteristica="Project_Properties" - self.principal ="Name" - self.description =description - exam_project=person_class(self.caracteristica,self.principal,self.description) - return exam_project - - - - def arbol(self): - for caracteristica,principal, descripcion in (("Properties","Name",self.name), - ("Properties","Data Path",self.directorio), - ("Properties","Workspace",self.workspace), - ("Parameters", "Read Mode ",self.remode), - ("Parameters", "DataType ",self.dataformat), - ("Parameters", "Date ",self.date), - ("Parameters", "Init Time ",self.initTime), - ("Parameters", "Final Time ",self.endTime), - ("Parameters", " Time zone ",self.timezone), - ("Parameters", "Profiles ","1"), - ("Description", "Summary ", self.Summary), - ): - person = person_class(caracteristica, principal, descripcion) - self.people.append(person) - def addProjectproperties(self,person): - self.people.append(person) - - - #def veamos(self): - # self.update= MainWindow(self) - # self.update.dataProyectTxt.text() - # return self.update.dataProyectTxt.text() - - def showtree(self): - self.rootItem = TreeItem(None, "ALL", None) - self.parents = {0 : self.rootItem} - self.setupModelData() - - def setParams(self,name,directorio,workspace,remode,dataformat,date,initTime,endTime,timezone,Summary): - self.name=name - self.workspace=workspace - self.directorio= directorio - self.remode=remode - self.dataformat=dataformat - self.date=date - self.initTime=initTime - self.endTime=endTime - self.timezone=timezone - self.Summary=Summary - - - for caracteristica,principal, descripcion in (("Properties","Name",self.name), - ("Properties","Data Path",self.directorio), - ("Properties","Workspace",self.workspace), - ("Parameters", "Read Mode ",self.remode), - ("Parameters", "DataType ",self.dataformat), - ("Parameters", "Date ",self.date), - ("Parameters", "Init Time ",self.initTime), - ("Parameters", "Final Time ",self.endTime), - ("Parameters", " Time zone ",self.timezone), - ("Parameters", "Profiles ","1"), - ("Description", "Summary ", self.Summary), - ): - person = person_class(caracteristica, principal, descripcion) - self.people.append(person) - self.rootItem = TreeItem(None, "ALL", None) - self.parents = {0 : self.rootItem} - self.setupModelData() - - - def columnCount(self, parent=None): - if parent and parent.isValid(): - return parent.internalPointer().columnCount() - else: - return len(HORIZONTAL_HEADERS) - - def data(self, index, role): - if not index.isValid(): - return QtCore.QVariant() - - item = index.internalPointer() - if role == QtCore.Qt.DisplayRole: - return item.data(index.column()) - if role == QtCore.Qt.UserRole: - if item: - return item.person - - return QtCore.QVariant() - - def headerData(self, column, orientation, role): - if (orientation == QtCore.Qt.Horizontal and - role == QtCore.Qt.DisplayRole): - try: - return QtCore.QVariant(HORIZONTAL_HEADERS[column]) - except IndexError: - pass - - return QtCore.QVariant() - - def index(self, row, column, parent): - if not self.hasIndex(row, column, parent): - return QtCore.QModelIndex() - - if not parent.isValid(): - parentItem = self.rootItem - else: - parentItem = parent.internalPointer() - - childItem = parentItem.child(row) - if childItem: - return self.createIndex(row, column, childItem) - else: - return QtCore.QModelIndex() - - def parent(self, index): - if not index.isValid(): - return QtCore.QModelIndex() - - childItem = index.internalPointer() - if not childItem: - return QtCore.QModelIndex() - - parentItem = childItem.parent() - - if parentItem == self.rootItem: - return QtCore.QModelIndex() - - return self.createIndex(parentItem.row(), 0, parentItem) - - def rowCount(self, parent=QtCore.QModelIndex()): - if parent.column() > 0: - return 0 - if not parent.isValid(): - p_Item = self.rootItem - else: - p_Item = parent.internalPointer() - return p_Item.childCount() - - def setupModelData(self): - for person in self.people: - if person.descripcion: - encabezado = person.caracteristica - - - if not self.parents.has_key(encabezado): - newparent = TreeItem(None, encabezado, self.rootItem) - self.rootItem.appendChild(newparent) - - self.parents[encabezado] = newparent - - parentItem = self.parents[encabezado] - newItem = TreeItem(person, "", parentItem) - parentItem.appendChild(newItem) - - def searchModel(self, person): - ''' - get the modelIndex for a given appointment - ''' - def searchNode(node): - ''' - a function called recursively, looking at all nodes beneath node - ''' - for child in node.childItems: - if person == child.person: - index = self.createIndex(child.row(), 0, child) - return index - - if child.childCount() > 0: - result = searchNode(child) - if result: - return result - - retarg = searchNode(self.parents[0]) - #print retarg - return retarg - - def find_GivenName(self, principal): - app = None - for person in self.people: - if person.principal == principal: - app = person - break - if app != None: - index = self.searchModel(app) - return (True, index) - return (False, None) - - - - - - - -class person_class(object): - ''' - a trivial custom data object - ''' - def __init__(self, caracteristica, principal, descripcion): - self.caracteristica = caracteristica - self.principal = principal - self.descripcion = descripcion - - def __repr__(self): - return "PERSON - %s %s"% (self.principal, self.caracteristica) - -class TreeItem(object): - ''' - a python object used to return row/column data, and keep note of - it's parents and/or children - ''' - def __init__(self, person, header, parentItem): - self.person = person - self.parentItem = parentItem - self.header = header - self.childItems = [] - - def appendChild(self, item): - self.childItems.append(item) - - def child(self, row): - return self.childItems[row] - - def childCount(self): - return len(self.childItems) - - def columnCount(self): - return 2 - - def data(self, column): - if self.person == None: - if column == 0: - return QtCore.QVariant(self.header) - if column == 1: - return QtCore.QVariant("") - else: - if column == 0: - return QtCore.QVariant(self.person.principal) - if column == 1: - return QtCore.QVariant(self.person.descripcion) - return QtCore.QVariant() - - def parent(self): - return self.parentItem - - def row(self): - if self.parentItem: - return self.parentItem.childItems.index(self) - return 0 +# -*- coding: utf-8 -*- +from PyQt4 import QtCore +import itertools + +HORIZONTAL_HEADERS = ("Property","Value " ) + +HORIZONTAL = ("RAMA :",) + +class treeModel(QtCore.QAbstractItemModel): + ''' + a model to display a few names, ordered by encabezado + + ''' + def __init__(self ,parent=None): + super(treeModel, self).__init__(parent) + self.people = [] + self.initProjectProperties() + self.initPUVoltageProperties() + self.initPUSpectraProperties() + self.initPUSpectraHeisProperties() + + def initProjectProperties(self): + + name=None + directorio=None + workspace=None + remode=None + dataformat=None + startDate=None + endDate=None + startTime=None + endTime=None + delay=None + set= None + walk=None + timezone=None + Summary=None + description=None + + def initPUVoltageProperties(self): + type=None + channel=None + heights=None + filter=None + profile=None + code=None + mode=None + coherentintegration=None + + def initPUSpectraProperties(self): + type =None + nFFTpoints =None + ippFactor = None + pairsList =None + channel =None + heights =None + incoherentintegration =None + removeDC = None + removeInterference =None + getNoise = None + operationSpecPlot=None + operationCrossSpecPlot = None + operationRTIPlot = None + operationCohermap = None + operationPowProfilePlot = None + + def initPUSpectraHeisProperties(self): + type =None + incoherentintegration =None + operationSpecHeisPlot=None + operationRTIHeisPlot = None + + def initProjectView(self): + """ + Reemplazo del método showtree + """ + HORIZONTAL_HEADERS = ("Property","Value " ) + HORIZONTAL = ("RAMA :",) + self.rootItem = TreeItem(None, "ALL", None) + self.parents = {0 : self.rootItem} + self.setupModelData() + + def initPUVoltageView(self): + HORIZONTAL_HEADERS = ("Operation"," Parameter Value " ) + HORIZONTAL = ("RAMA :",) + self.rootItem = TreeItem(None, "ALL", None) + self.parents = {0 : self.rootItem} + self.setupModelData() + + def showProjectParms(self,caracteristicaList,principalList,descripcionList): + """ + set2Obje + """ + for caracteristica,principal, descripcion in itertools.izip(caracteristicaList,principalList,descripcionList): + person = person_class(caracteristica, principal, descripcion) + self.people.append(person) + self.rootItem = TreeItem(None, "ALL", None) + self.parents = {0 : self.rootItem} + self.setupModelData() + + def showPUVoltageParms(self,caracteristicaList,principalList,descripcionList): + + for caracteristica,principal, descripcion in itertools.izip(caracteristicaList,principalList,descripcionList): + person = person_class(caracteristica, principal, descripcion) + self.people.append(person) + self.rootItem = TreeItem(None, "ALL", None) + self.parents = {0 : self.rootItem} + self.setupModelData() + + + def showPUSpectraParms(self,caracteristicaList,principalList,descripcionList): + + for caracteristica,principal, descripcion in itertools.izip(caracteristicaList,principalList,descripcionList): + person = person_class(caracteristica, principal, descripcion) + self.people.append(person) + self.rootItem = TreeItem(None, "ALL", None) + self.parents = {0 : self.rootItem} + self.setupModelData() + + def showPUSpectraHeisParms(self,caracteristicaList,principalList,descripcionList): + + for caracteristica,principal, descripcion in itertools.izip(caracteristicaList,principalList,descripcionList): + person = person_class(caracteristica, principal, descripcion) + self.people.append(person) + self.rootItem = TreeItem(None, "ALL", None) + self.parents = {0 : self.rootItem} + self.setupModelData() + + + def columnCount(self, parent=None): + if parent and parent.isValid(): + return parent.internalPointer().columnCount() + else: + return len(HORIZONTAL_HEADERS) + + def data(self, index, role): + if not index.isValid(): + return QtCore.QVariant() + + item = index.internalPointer() + if role == QtCore.Qt.DisplayRole: + return item.data(index.column()) + if role == QtCore.Qt.UserRole: + if item: + return item.person + + return QtCore.QVariant() + + def headerData(self, column, orientation, role): + if (orientation == QtCore.Qt.Horizontal and + role == QtCore.Qt.DisplayRole): + try: + return QtCore.QVariant(HORIZONTAL_HEADERS[column]) + except IndexError: + pass + + return QtCore.QVariant() + + def index(self, row, column, parent): + if not self.hasIndex(row, column, parent): + return QtCore.QModelIndex() + + if not parent.isValid(): + parentItem = self.rootItem + else: + parentItem = parent.internalPointer() + + childItem = parentItem.child(row) + if childItem: + return self.createIndex(row, column, childItem) + else: + return QtCore.QModelIndex() + + def parent(self, index): + if not index.isValid(): + return QtCore.QModelIndex() + + childItem = index.internalPointer() + if not childItem: + return QtCore.QModelIndex() + + parentItem = childItem.parent() + + if parentItem == self.rootItem: + return QtCore.QModelIndex() + + return self.createIndex(parentItem.row(), 0, parentItem) + + def rowCount(self, parent=QtCore.QModelIndex()): + if parent.column() > 0: + return 0 + if not parent.isValid(): + p_Item = self.rootItem + else: + p_Item = parent.internalPointer() + return p_Item.childCount() + + def setupModelData(self): + for person in self.people: + if person.descripcion: + encabezado = person.caracteristica + + + if not self.parents.has_key(encabezado): + newparent = TreeItem(None, encabezado, self.rootItem) + self.rootItem.appendChild(newparent) + + self.parents[encabezado] = newparent + + parentItem = self.parents[encabezado] + newItem = TreeItem(person, "", parentItem) + parentItem.appendChild(newItem) + + def searchModel(self, person): + ''' + get the modelIndex for a given appointment + ''' + def searchNode(node): + ''' + a function called recursively, looking at all nodes beneath node + ''' + for child in node.childItems: + if person == child.person: + index = self.createIndex(child.row(), 0, child) + return index + + if child.childCount() > 0: + result = searchNode(child) + if result: + return result + + retarg = searchNode(self.parents[0]) + #print retarg + return retarg + + def find_GivenName(self, principal): + app = None + for person in self.people: + if person.principal == principal: + app = person + break + if app != None: + index = self.searchModel(app) + return (True, index) + return (False, None) + + +class person_class(object): + ''' + a trivial custom data object + ''' + def __init__(self, caracteristica, principal, descripcion): + self.caracteristica = caracteristica + self.principal = principal + self.descripcion = descripcion + + def __repr__(self): + return "PERSON - %s %s"% (self.principal, self.caracteristica) + +class TreeItem(object): + ''' + a python object used to return row/column data, and keep note of + it's parents and/or children + ''' + def __init__(self, person, header, parentItem): + self.person = person + self.parentItem = parentItem + self.header = header + self.childItems = [] + + def appendChild(self, item): + self.childItems.append(item) + + def child(self, row): + return self.childItems[row] + + def childCount(self): + return len(self.childItems) + + def columnCount(self): + return 2 + + def data(self, column): + if self.person == None: + if column == 0: + return QtCore.QVariant(self.header) + if column == 1: + return QtCore.QVariant("") + else: + if column == 0: + return QtCore.QVariant(self.person.principal) + if column == 1: + return QtCore.QVariant(self.person.descripcion) + return QtCore.QVariant() + + def parent(self): + return self.parentItem + + def row(self): + if self.parentItem: + return self.parentItem.childItems.index(self) + return 0 \ No newline at end of file diff --git a/schainpy/gui/viewcontroller/scprocesscontroller.py b/schainpy/gui/viewcontroller/scprocesscontroller.py index 4d42030..dca9b13 100644 --- a/schainpy/gui/viewcontroller/scprocesscontroller.py +++ b/schainpy/gui/viewcontroller/scprocesscontroller.py @@ -1,10 +1,7 @@ import os, sys import getopt -path = os.path.split(os.getcwd())[0] -#path="C://Users//alex//workspace//gui_14_03_13" -sys.path.append(path) -from controller import * +from schainpy.controller import Project class scProcessController(): def __init__(self): diff --git a/schainpy/gui/viewcontroller/unitprocess.py b/schainpy/gui/viewcontroller/unitprocess.py index c67bf50..0944b44 100644 --- a/schainpy/gui/viewcontroller/unitprocess.py +++ b/schainpy/gui/viewcontroller/unitprocess.py @@ -7,7 +7,7 @@ Module implementing MainWindow. from PyQt4.QtGui import QMainWindow from PyQt4.QtCore import pyqtSignature -from viewer.ui_unitprocess import Ui_UnitProcess +from schainpy.gui.viewer.ui_unitprocess import Ui_UnitProcess class UnitProcess(QMainWindow, Ui_UnitProcess): """ diff --git a/schainpy/gui/viewcontroller/window.py b/schainpy/gui/viewcontroller/window.py index eef0d43..66b6e59 100644 --- a/schainpy/gui/viewcontroller/window.py +++ b/schainpy/gui/viewcontroller/window.py @@ -10,13 +10,13 @@ from PyQt4 import QtCore from PyQt4 import QtGui from timeconversions import Doy2Date from modelProperties import treeModel -from viewer.ui_unitprocess import Ui_UnitProcess -from viewer.ui_window import Ui_window -from viewer.ui_mainwindow import Ui_MainWindow -from viewer.ui_workspace import Ui_Workspace -from viewer.ui_initwindow import Ui_InitWindow +from schainpy.gui.viewer.ui_unitprocess import Ui_UnitProcess +from schainpy.gui.viewer.ui_window import Ui_window +from schainpy.gui.viewer.ui_mainwindow import Ui_MainWindow +from schainpy.gui.viewer.ui_workspace import Ui_Workspace +from schainpy.gui.viewer.ui_initwindow import Ui_InitWindow -from controller import Project,ReadUnitConf,ProcUnitConf,OperationConf,ParameterConf +from schainpy.controller import Project,ReadUnitConf,ProcUnitConf,OperationConf,ParameterConf import os HORIZONTAL_HEADERS = ("ITEM :"," DATOS : " ) diff --git a/schainpy/gui/viewcontroller/workspace.py b/schainpy/gui/viewcontroller/workspace.py index 1adf36d..d8d1a3a 100644 --- a/schainpy/gui/viewcontroller/workspace.py +++ b/schainpy/gui/viewcontroller/workspace.py @@ -1,11 +1,13 @@ # -*- coding: utf-8 -*- import os +from os.path import expanduser + from PyQt4.QtGui import QDialog from PyQt4.QtCore import pyqtSignature from PyQt4.QtCore import pyqtSignal from PyQt4 import QtGui, QtCore -from viewer.ui_workspace import Ui_Workspace -from os.path import expanduser + +from schainpy.gui.viewer.ui_workspace import Ui_Workspace class Workspace(QDialog, Ui_Workspace): """ @@ -20,7 +22,7 @@ class Workspace(QDialog, Ui_Workspace): self.dirList=[] self.setupUi(self) self.setWindowTitle("ROJ-Signal Chain") - self.setWindowIcon(QtGui.QIcon("figure/adn.jpg")) + self.setWindowIcon(QtGui.QIcon("schainpy/gui/figure/adn.jpg")) #*####### DIRECTORIO DE TRABAJO #########*# #self.dirCmbBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "C:\WorkSpaceGui", None, QtGui.QApplication.UnicodeUTF8)) home=expanduser("~") diff --git a/schainpy/gui/viewer/__init__.py b/schainpy/gui/viewer/__init__.py index 3cc695d..fc95419 100644 --- a/schainpy/gui/viewer/__init__.py +++ b/schainpy/gui/viewer/__init__.py @@ -1,4 +1,5 @@ import ui_initwindow import ui_workspace import ui_mainwindow -import ui_window \ No newline at end of file +import ui_window +import ui_ftp \ No newline at end of file diff --git a/schainpy/gui/viewer/ui_ftp.py b/schainpy/gui/viewer/ui_ftp.py new file mode 100644 index 0000000..4cfc83a --- /dev/null +++ b/schainpy/gui/viewer/ui_ftp.py @@ -0,0 +1,139 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/alex/ui/ftpConfig4.ui' +# +# Created: Tue Aug 20 08:24:35 2013 +# by: PyQt4 UI code generator 4.10 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + def _fromUtf8(s): + return s + +try: + _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig, _encoding) +except AttributeError: + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig) + +class Ui_Ftp(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName(_fromUtf8("MainWindow")) + MainWindow.resize(374, 399) + MainWindow.setMinimumSize(QtCore.QSize(374, 399)) + MainWindow.setMaximumSize(QtCore.QSize(374, 399)) + self.centralWidget = QtGui.QWidget(MainWindow) + self.centralWidget.setObjectName(_fromUtf8("centralWidget")) + self.label = QtGui.QLabel(self.centralWidget) + self.label.setGeometry(QtCore.QRect(9, 38, 47, 17)) + self.label.setObjectName(_fromUtf8("label")) + self.label_2 = QtGui.QLabel(self.centralWidget) + self.label_2.setGeometry(QtCore.QRect(9, 133, 77, 17)) + self.label_2.setObjectName(_fromUtf8("label_2")) + self.label_3 = QtGui.QLabel(self.centralWidget) + self.label_3.setGeometry(QtCore.QRect(9, 166, 68, 17)) + self.label_3.setObjectName(_fromUtf8("label_3")) + self.label_4 = QtGui.QLabel(self.centralWidget) + self.label_4.setGeometry(QtCore.QRect(9, 9, 101, 17)) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.label_4.setFont(font) + self.label_4.setObjectName(_fromUtf8("label_4")) + self.label_5 = QtGui.QLabel(self.centralWidget) + self.label_5.setGeometry(QtCore.QRect(9, 104, 87, 17)) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.label_5.setFont(font) + self.label_5.setObjectName(_fromUtf8("label_5")) + self.label_6 = QtGui.QLabel(self.centralWidget) + self.label_6.setGeometry(QtCore.QRect(9, 71, 47, 17)) + self.label_6.setObjectName(_fromUtf8("label_6")) + self.serverFTP = QtGui.QLineEdit(self.centralWidget) + self.serverFTP.setGeometry(QtCore.QRect(130, 40, 231, 27)) + self.serverFTP.setObjectName(_fromUtf8("serverFTP")) + self.folderFTP = QtGui.QLineEdit(self.centralWidget) + self.folderFTP.setGeometry(QtCore.QRect(130, 70, 231, 27)) + self.folderFTP.setObjectName(_fromUtf8("folderFTP")) + self.usernameFTP = QtGui.QLineEdit(self.centralWidget) + self.usernameFTP.setGeometry(QtCore.QRect(130, 130, 231, 27)) + self.usernameFTP.setObjectName(_fromUtf8("usernameFTP")) + self.passwordFTP = QtGui.QLineEdit(self.centralWidget) + self.passwordFTP.setGeometry(QtCore.QRect(130, 160, 231, 27)) + self.passwordFTP.setObjectName(_fromUtf8("passwordFTP")) + self.ftpCancelButton = QtGui.QPushButton(self.centralWidget) + self.ftpCancelButton.setGeometry(QtCore.QRect(130, 360, 111, 27)) + self.ftpCancelButton.setObjectName(_fromUtf8("ftpCancelButton")) + self.ftpOkButton = QtGui.QPushButton(self.centralWidget) + self.ftpOkButton.setGeometry(QtCore.QRect(250, 360, 111, 27)) + self.ftpOkButton.setObjectName(_fromUtf8("ftpOkButton")) + self.label_7 = QtGui.QLabel(self.centralWidget) + self.label_7.setGeometry(QtCore.QRect(10, 200, 66, 17)) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.label_7.setFont(font) + self.label_7.setObjectName(_fromUtf8("label_7")) + self.label_8 = QtGui.QLabel(self.centralWidget) + self.label_8.setGeometry(QtCore.QRect(10, 230, 81, 17)) + self.label_8.setObjectName(_fromUtf8("label_8")) + self.label_9 = QtGui.QLabel(self.centralWidget) + self.label_9.setGeometry(QtCore.QRect(10, 260, 81, 17)) + self.label_9.setObjectName(_fromUtf8("label_9")) + self.label_10 = QtGui.QLabel(self.centralWidget) + self.label_10.setGeometry(QtCore.QRect(10, 290, 81, 17)) + self.label_10.setObjectName(_fromUtf8("label_10")) + self.label_11 = QtGui.QLabel(self.centralWidget) + self.label_11.setGeometry(QtCore.QRect(10, 320, 81, 17)) + self.label_11.setObjectName(_fromUtf8("label_11")) + self.weightFTP = QtGui.QLineEdit(self.centralWidget) + self.weightFTP.setGeometry(QtCore.QRect(130, 230, 231, 27)) + self.weightFTP.setObjectName(_fromUtf8("weightFTP")) + self.expcodeFTP = QtGui.QLineEdit(self.centralWidget) + self.expcodeFTP.setGeometry(QtCore.QRect(130, 260, 231, 27)) + self.expcodeFTP.setObjectName(_fromUtf8("expcodeFTP")) + self.subexpFTP = QtGui.QLineEdit(self.centralWidget) + self.subexpFTP.setGeometry(QtCore.QRect(130, 290, 231, 27)) + self.subexpFTP.setObjectName(_fromUtf8("subexpFTP")) + self.plotposFTP = QtGui.QLineEdit(self.centralWidget) + self.plotposFTP.setGeometry(QtCore.QRect(130, 320, 231, 27)) + self.plotposFTP.setObjectName(_fromUtf8("plotposFTP")) + MainWindow.setCentralWidget(self.centralWidget) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) + self.label.setText(_translate("MainWindow", "Server:", None)) + self.label_2.setText(_translate("MainWindow", "User Name:", None)) + self.label_3.setText(_translate("MainWindow", "Password:", None)) + self.label_4.setText(_translate("MainWindow", "Server Details", None)) + self.label_5.setText(_translate("MainWindow", "User Details", None)) + self.label_6.setText(_translate("MainWindow", "Folder:", None)) + self.ftpCancelButton.setText(_translate("MainWindow", "Cancel", None)) + self.ftpOkButton.setText(_translate("MainWindow", "Ok", None)) + self.label_7.setText(_translate("MainWindow", "Others", None)) + self.label_8.setText(_translate("MainWindow", "Ftp_wei:", None)) + self.label_9.setText(_translate("MainWindow", "Exp_code:", None)) + self.label_10.setText(_translate("MainWindow", "Sub_exp:", None)) + self.label_11.setText(_translate("MainWindow", "Plot_pos:", None)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + MainWindow = QtGui.QMainWindow() + ui = Ui_Ftp() + ui.setupUi(MainWindow) + MainWindow.show() + sys.exit(app.exec_()) + diff --git a/schainpy/gui/viewer/ui_initwindow.py b/schainpy/gui/viewer/ui_initwindow.py index e47d7a3..7948a41 100644 --- a/schainpy/gui/viewer/ui_initwindow.py +++ b/schainpy/gui/viewer/ui_initwindow.py @@ -42,7 +42,7 @@ class Ui_InitWindow(object): self.verticalLayout_4.addWidget(self.line_2) self.label_4 = QtGui.QLabel(Dialog) self.label_4.setText(_fromUtf8("")) - self.label_4.setPixmap(QtGui.QPixmap(_fromUtf8("figure/w.jpg"))) + self.label_4.setPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/w.jpg"))) self.label_4.setScaledContents(True) self.label_4.setObjectName(_fromUtf8("label_4")) self.verticalLayout_4.addWidget(self.label_4) diff --git a/schainpy/gui/viewer/ui_mainwindow.py b/schainpy/gui/viewer/ui_mainwindow.py index 3c76ab5..2c40932 100644 --- a/schainpy/gui/viewer/ui_mainwindow.py +++ b/schainpy/gui/viewer/ui_mainwindow.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'C:\Users\alex\ericworkspace\UIDOS\MainWindow_21_02_13_v18.ui' +# Form implementation generated from reading ui file '/home/alex/ui/MainWindow_21_02_13_v49.ui' # -# Created: Tue Mar 12 14:20:43 2013 -# by: PyQt4 UI code generator 4.9.4 +# Created: Mon Mar 24 13:28:36 2014 +# by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -12,21 +12,30 @@ from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: - _fromUtf8 = lambda s: s + def _fromUtf8(s): + return s + +try: + _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig, _encoding) +except AttributeError: + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig) class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) - MainWindow.resize(780, 680) + MainWindow.resize(1203, 711) self.centralWidget = QtGui.QWidget(MainWindow) self.centralWidget.setObjectName(_fromUtf8("centralWidget")) - self.gridLayout_10 = QtGui.QGridLayout(self.centralWidget) - self.gridLayout_10.setObjectName(_fromUtf8("gridLayout_10")) + self.gridLayout_16 = QtGui.QGridLayout(self.centralWidget) + self.gridLayout_16.setObjectName(_fromUtf8("gridLayout_16")) self.splitter_2 = QtGui.QSplitter(self.centralWidget) self.splitter_2.setOrientation(QtCore.Qt.Horizontal) self.splitter_2.setObjectName(_fromUtf8("splitter_2")) - self.treeProjectExplorer = QtGui.QTreeView(self.splitter_2) - self.treeProjectExplorer.setObjectName(_fromUtf8("treeProjectExplorer")) + self.projectExplorerTree = QtGui.QTreeView(self.splitter_2) + self.projectExplorerTree.setObjectName(_fromUtf8("projectExplorerTree")) self.splitter = QtGui.QSplitter(self.splitter_2) self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setObjectName(_fromUtf8("splitter")) @@ -36,157 +45,215 @@ class Ui_MainWindow(object): self.tabWidgetProject.setObjectName(_fromUtf8("tabWidgetProject")) self.tabProject = QtGui.QWidget() self.tabProject.setObjectName(_fromUtf8("tabProject")) - self.gridLayout_2 = QtGui.QGridLayout(self.tabProject) + self.gridLayout_15 = QtGui.QGridLayout(self.tabProject) + self.gridLayout_15.setObjectName(_fromUtf8("gridLayout_15")) + self.frame = QtGui.QFrame(self.tabProject) + self.frame.setFrameShape(QtGui.QFrame.StyledPanel) + self.frame.setFrameShadow(QtGui.QFrame.Raised) + self.frame.setObjectName(_fromUtf8("frame")) + self.gridLayout_2 = QtGui.QGridLayout(self.frame) self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) - self.label = QtGui.QLabel(self.tabProject) + self.label = QtGui.QLabel(self.frame) self.label.setObjectName(_fromUtf8("label")) self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1) - self.label_11 = QtGui.QLabel(self.tabProject) + self.proName = QtGui.QLineEdit(self.frame) + self.proName.setObjectName(_fromUtf8("proName")) + self.gridLayout_2.addWidget(self.proName, 0, 1, 1, 8) + self.label_11 = QtGui.QLabel(self.frame) self.label_11.setObjectName(_fromUtf8("label_11")) self.gridLayout_2.addWidget(self.label_11, 1, 0, 1, 1) - self.label_15 = QtGui.QLabel(self.tabProject) - self.label_15.setObjectName(_fromUtf8("label_15")) - self.gridLayout_2.addWidget(self.label_15, 3, 0, 1, 1) - self.label_23 = QtGui.QLabel(self.tabProject) - self.label_23.setObjectName(_fromUtf8("label_23")) - self.gridLayout_2.addWidget(self.label_23, 4, 0, 1, 1) - self.label_27 = QtGui.QLabel(self.tabProject) - self.label_27.setObjectName(_fromUtf8("label_27")) - self.gridLayout_2.addWidget(self.label_27, 9, 0, 1, 1) - self.label_28 = QtGui.QLabel(self.tabProject) - self.label_28.setObjectName(_fromUtf8("label_28")) - self.gridLayout_2.addWidget(self.label_28, 10, 0, 1, 1) - self.label_2 = QtGui.QLabel(self.tabProject) - self.label_2.setObjectName(_fromUtf8("label_2")) - self.gridLayout_2.addWidget(self.label_2, 12, 0, 1, 1) - self.label_3 = QtGui.QLabel(self.tabProject) - self.label_3.setObjectName(_fromUtf8("label_3")) - self.gridLayout_2.addWidget(self.label_3, 13, 0, 1, 1) - spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_2.addItem(spacerItem, 15, 0, 1, 1) - self.proOk = QtGui.QPushButton(self.tabProject) - self.proOk.setObjectName(_fromUtf8("proOk")) - self.gridLayout_2.addWidget(self.proOk, 15, 1, 1, 2) - spacerItem1 = QtGui.QSpacerItem(43, 11, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_2.addItem(spacerItem1, 15, 3, 1, 1) - self.proClear = QtGui.QPushButton(self.tabProject) - self.proClear.setObjectName(_fromUtf8("proClear")) - self.gridLayout_2.addWidget(self.proClear, 15, 4, 1, 1) - spacerItem2 = QtGui.QSpacerItem(29, 11, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_2.addItem(spacerItem2, 15, 5, 1, 1) - self.proName = QtGui.QLineEdit(self.tabProject) - self.proName.setObjectName(_fromUtf8("proName")) - self.gridLayout_2.addWidget(self.proName, 0, 1, 1, 5) - self.proComDataType = QtGui.QComboBox(self.tabProject) + self.proComDataType = QtGui.QComboBox(self.frame) self.proComDataType.setObjectName(_fromUtf8("proComDataType")) self.proComDataType.addItem(_fromUtf8("")) self.proComDataType.addItem(_fromUtf8("")) + self.proComDataType.addItem(_fromUtf8("")) self.gridLayout_2.addWidget(self.proComDataType, 1, 1, 1, 5) - self.proDataType = QtGui.QLineEdit(self.tabProject) + self.proDataType = QtGui.QLineEdit(self.frame) self.proDataType.setObjectName(_fromUtf8("proDataType")) - self.gridLayout_2.addWidget(self.proDataType, 2, 1, 1, 5) - self.proDataPath = QtGui.QLineEdit(self.tabProject) + self.gridLayout_2.addWidget(self.proDataType, 1, 6, 1, 3) + self.label_15 = QtGui.QLabel(self.frame) + self.label_15.setObjectName(_fromUtf8("label_15")) + self.gridLayout_2.addWidget(self.label_15, 2, 0, 1, 1) + self.proToolPath = QtGui.QToolButton(self.frame) + self.proToolPath.setObjectName(_fromUtf8("proToolPath")) + self.gridLayout_2.addWidget(self.proToolPath, 2, 1, 1, 1) + self.proDataPath = QtGui.QLineEdit(self.frame) self.proDataPath.setObjectName(_fromUtf8("proDataPath")) - self.gridLayout_2.addWidget(self.proDataPath, 3, 2, 1, 4) - self.proComReadMode = QtGui.QComboBox(self.tabProject) + self.gridLayout_2.addWidget(self.proDataPath, 2, 2, 1, 7) + self.label_23 = QtGui.QLabel(self.frame) + self.label_23.setObjectName(_fromUtf8("label_23")) + self.gridLayout_2.addWidget(self.label_23, 3, 0, 1, 1) + self.proComReadMode = QtGui.QComboBox(self.frame) self.proComReadMode.setObjectName(_fromUtf8("proComReadMode")) self.proComReadMode.addItem(_fromUtf8("")) self.proComReadMode.addItem(_fromUtf8("")) - self.gridLayout_2.addWidget(self.proComReadMode, 4, 1, 1, 5) - self.proComStartDate = QtGui.QComboBox(self.tabProject) + self.gridLayout_2.addWidget(self.proComReadMode, 3, 1, 1, 2) + self.label_33 = QtGui.QLabel(self.frame) + self.label_33.setObjectName(_fromUtf8("label_33")) + self.gridLayout_2.addWidget(self.label_33, 3, 5, 1, 2) + self.proDelay = QtGui.QLineEdit(self.frame) + self.proDelay.setObjectName(_fromUtf8("proDelay")) + self.gridLayout_2.addWidget(self.proDelay, 3, 8, 1, 1) + self.label_32 = QtGui.QLabel(self.frame) + self.label_32.setObjectName(_fromUtf8("label_32")) + self.gridLayout_2.addWidget(self.label_32, 4, 0, 1, 1) + self.proComWalk = QtGui.QComboBox(self.frame) + self.proComWalk.setObjectName(_fromUtf8("proComWalk")) + self.proComWalk.addItem(_fromUtf8("")) + self.proComWalk.addItem(_fromUtf8("")) + self.gridLayout_2.addWidget(self.proComWalk, 4, 1, 1, 8) + self.proLoadButton = QtGui.QPushButton(self.frame) + self.proLoadButton.setObjectName(_fromUtf8("proLoadButton")) + self.gridLayout_2.addWidget(self.proLoadButton, 5, 0, 1, 9) + self.label_10 = QtGui.QLabel(self.frame) + self.label_10.setObjectName(_fromUtf8("label_10")) + self.gridLayout_2.addWidget(self.label_10, 3, 3, 1, 1) + self.proSet = QtGui.QLineEdit(self.frame) + self.proSet.setObjectName(_fromUtf8("proSet")) + self.gridLayout_2.addWidget(self.proSet, 3, 4, 1, 1) + self.gridLayout_15.addWidget(self.frame, 0, 0, 1, 1) + self.frame_2 = QtGui.QFrame(self.tabProject) + self.frame_2.setFrameShape(QtGui.QFrame.StyledPanel) + self.frame_2.setFrameShadow(QtGui.QFrame.Raised) + self.frame_2.setObjectName(_fromUtf8("frame_2")) + self.gridLayout_10 = QtGui.QGridLayout(self.frame_2) + self.gridLayout_10.setObjectName(_fromUtf8("gridLayout_10")) + self.label_27 = QtGui.QLabel(self.frame_2) + self.label_27.setObjectName(_fromUtf8("label_27")) + self.gridLayout_10.addWidget(self.label_27, 0, 0, 1, 1) + self.proComStartDate = QtGui.QComboBox(self.frame_2) self.proComStartDate.setObjectName(_fromUtf8("proComStartDate")) - self.gridLayout_2.addWidget(self.proComStartDate, 9, 1, 1, 5) - self.proComEndDate = QtGui.QComboBox(self.tabProject) + self.gridLayout_10.addWidget(self.proComStartDate, 0, 1, 1, 1) + self.label_28 = QtGui.QLabel(self.frame_2) + self.label_28.setObjectName(_fromUtf8("label_28")) + self.gridLayout_10.addWidget(self.label_28, 1, 0, 1, 1) + self.proComEndDate = QtGui.QComboBox(self.frame_2) self.proComEndDate.setObjectName(_fromUtf8("proComEndDate")) - self.gridLayout_2.addWidget(self.proComEndDate, 10, 1, 1, 5) - self.proStartTime = QtGui.QTimeEdit(self.tabProject) + self.gridLayout_10.addWidget(self.proComEndDate, 1, 1, 1, 1) + self.label_2 = QtGui.QLabel(self.frame_2) + self.label_2.setObjectName(_fromUtf8("label_2")) + self.gridLayout_10.addWidget(self.label_2, 2, 0, 1, 1) + self.proStartTime = QtGui.QTimeEdit(self.frame_2) self.proStartTime.setObjectName(_fromUtf8("proStartTime")) - self.gridLayout_2.addWidget(self.proStartTime, 12, 1, 1, 5) - self.proEndTime = QtGui.QTimeEdit(self.tabProject) + self.gridLayout_10.addWidget(self.proStartTime, 2, 1, 1, 1) + self.label_3 = QtGui.QLabel(self.frame_2) + self.label_3.setObjectName(_fromUtf8("label_3")) + self.gridLayout_10.addWidget(self.label_3, 3, 0, 1, 1) + self.proEndTime = QtGui.QTimeEdit(self.frame_2) self.proEndTime.setObjectName(_fromUtf8("proEndTime")) - self.gridLayout_2.addWidget(self.proEndTime, 13, 1, 1, 5) - self.label_30 = QtGui.QLabel(self.tabProject) + self.gridLayout_10.addWidget(self.proEndTime, 3, 1, 1, 1) + self.label_30 = QtGui.QLabel(self.frame_2) self.label_30.setObjectName(_fromUtf8("label_30")) - self.gridLayout_2.addWidget(self.label_30, 14, 0, 1, 1) - self.proDescription = QtGui.QTextEdit(self.tabProject) + self.gridLayout_10.addWidget(self.label_30, 4, 0, 1, 1) + self.proDescription = QtGui.QTextEdit(self.frame_2) self.proDescription.setObjectName(_fromUtf8("proDescription")) - self.gridLayout_2.addWidget(self.proDescription, 14, 1, 1, 5) - self.proToolPath = QtGui.QToolButton(self.tabProject) - self.proToolPath.setObjectName(_fromUtf8("proToolPath")) - self.gridLayout_2.addWidget(self.proToolPath, 3, 1, 1, 1) - self.label_32 = QtGui.QLabel(self.tabProject) - self.label_32.setObjectName(_fromUtf8("label_32")) - self.gridLayout_2.addWidget(self.label_32, 6, 0, 1, 1) - self.proComWalk = QtGui.QComboBox(self.tabProject) - self.proComWalk.setObjectName(_fromUtf8("proComWalk")) - self.proComWalk.addItem(_fromUtf8("")) - self.proComWalk.addItem(_fromUtf8("")) - self.gridLayout_2.addWidget(self.proComWalk, 6, 1, 1, 5) - self.label_33 = QtGui.QLabel(self.tabProject) - self.label_33.setObjectName(_fromUtf8("label_33")) - self.gridLayout_2.addWidget(self.label_33, 8, 0, 1, 1) - self.proDelay = QtGui.QLineEdit(self.tabProject) - self.proDelay.setObjectName(_fromUtf8("proDelay")) - self.gridLayout_2.addWidget(self.proDelay, 8, 1, 1, 3) - self.proLoadButton = QtGui.QPushButton(self.tabProject) - self.proLoadButton.setObjectName(_fromUtf8("proLoadButton")) - self.gridLayout_2.addWidget(self.proLoadButton, 8, 4, 1, 2) + self.gridLayout_10.addWidget(self.proDescription, 4, 1, 1, 1) + self.gridLayout_15.addWidget(self.frame_2, 1, 0, 1, 1) + self.frame_3 = QtGui.QFrame(self.tabProject) + self.frame_3.setFrameShape(QtGui.QFrame.StyledPanel) + self.frame_3.setFrameShadow(QtGui.QFrame.Raised) + self.frame_3.setObjectName(_fromUtf8("frame_3")) + self.gridLayout_14 = QtGui.QGridLayout(self.frame_3) + self.gridLayout_14.setObjectName(_fromUtf8("gridLayout_14")) + self.proOk = QtGui.QPushButton(self.frame_3) + self.proOk.setObjectName(_fromUtf8("proOk")) + self.gridLayout_14.addWidget(self.proOk, 0, 0, 1, 1) + self.proClear = QtGui.QPushButton(self.frame_3) + self.proClear.setObjectName(_fromUtf8("proClear")) + self.gridLayout_14.addWidget(self.proClear, 0, 1, 1, 1) + self.gridLayout_15.addWidget(self.frame_3, 2, 0, 1, 1) self.tabWidgetProject.addTab(self.tabProject, _fromUtf8("")) self.tabVoltage = QtGui.QWidget() self.tabVoltage.setObjectName(_fromUtf8("tabVoltage")) self.gridLayout_3 = QtGui.QGridLayout(self.tabVoltage) self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3")) + self.frame_4 = QtGui.QFrame(self.tabVoltage) + self.frame_4.setFrameShape(QtGui.QFrame.StyledPanel) + self.frame_4.setFrameShadow(QtGui.QFrame.Raised) + self.frame_4.setObjectName(_fromUtf8("frame_4")) + self.gridLayout_17 = QtGui.QGridLayout(self.frame_4) + self.gridLayout_17.setObjectName(_fromUtf8("gridLayout_17")) + self.volOpOk = QtGui.QPushButton(self.frame_4) + self.volOpOk.setObjectName(_fromUtf8("volOpOk")) + self.gridLayout_17.addWidget(self.volOpOk, 0, 0, 1, 1) + self.volGraphClear = QtGui.QPushButton(self.frame_4) + self.volGraphClear.setObjectName(_fromUtf8("volGraphClear")) + self.gridLayout_17.addWidget(self.volGraphClear, 0, 1, 1, 1) + self.gridLayout_3.addWidget(self.frame_4, 1, 1, 1, 1) self.tabWidgetVoltage = QtGui.QTabWidget(self.tabVoltage) self.tabWidgetVoltage.setObjectName(_fromUtf8("tabWidgetVoltage")) self.tabopVoltage = QtGui.QWidget() self.tabopVoltage.setObjectName(_fromUtf8("tabopVoltage")) self.gridLayout = QtGui.QGridLayout(self.tabopVoltage) self.gridLayout.setObjectName(_fromUtf8("gridLayout")) - self.volOpCebChannels = QtGui.QCheckBox(self.tabopVoltage) - self.volOpCebChannels.setObjectName(_fromUtf8("volOpCebChannels")) - self.gridLayout.addWidget(self.volOpCebChannels, 0, 0, 1, 4) - self.volOpComChannels = QtGui.QComboBox(self.tabopVoltage) - self.volOpComChannels.setObjectName(_fromUtf8("volOpComChannels")) - self.volOpComChannels.addItem(_fromUtf8("")) - self.volOpComChannels.addItem(_fromUtf8("")) - self.gridLayout.addWidget(self.volOpComChannels, 1, 0, 1, 3) - self.volOpChannel = QtGui.QLineEdit(self.tabopVoltage) - self.volOpChannel.setObjectName(_fromUtf8("volOpChannel")) - self.gridLayout.addWidget(self.volOpChannel, 1, 3, 1, 3) - self.volOpCebHeights = QtGui.QCheckBox(self.tabopVoltage) - self.volOpCebHeights.setObjectName(_fromUtf8("volOpCebHeights")) - self.gridLayout.addWidget(self.volOpCebHeights, 2, 0, 1, 2) + self.volOpHeights = QtGui.QLineEdit(self.tabopVoltage) + self.volOpHeights.setObjectName(_fromUtf8("volOpHeights")) + self.gridLayout.addWidget(self.volOpHeights, 4, 4, 1, 1) self.volOpComHeights = QtGui.QComboBox(self.tabopVoltage) self.volOpComHeights.setObjectName(_fromUtf8("volOpComHeights")) self.volOpComHeights.addItem(_fromUtf8("")) self.volOpComHeights.addItem(_fromUtf8("")) - self.gridLayout.addWidget(self.volOpComHeights, 3, 0, 1, 3) - self.volOpHeights = QtGui.QLineEdit(self.tabopVoltage) - self.volOpHeights.setObjectName(_fromUtf8("volOpHeights")) - self.gridLayout.addWidget(self.volOpHeights, 3, 3, 1, 3) - self.volOpCebFilter = QtGui.QCheckBox(self.tabopVoltage) - self.volOpCebFilter.setObjectName(_fromUtf8("volOpCebFilter")) - self.gridLayout.addWidget(self.volOpCebFilter, 4, 0, 1, 2) - self.volOpFilter = QtGui.QLineEdit(self.tabopVoltage) - self.volOpFilter.setObjectName(_fromUtf8("volOpFilter")) - self.gridLayout.addWidget(self.volOpFilter, 4, 3, 1, 3) + self.gridLayout.addWidget(self.volOpComHeights, 4, 0, 1, 3) + self.volOpComChannels = QtGui.QComboBox(self.tabopVoltage) + self.volOpComChannels.setObjectName(_fromUtf8("volOpComChannels")) + self.volOpComChannels.addItem(_fromUtf8("")) + self.volOpComChannels.addItem(_fromUtf8("")) + self.gridLayout.addWidget(self.volOpComChannels, 2, 0, 1, 3) self.volOpCebProfile = QtGui.QCheckBox(self.tabopVoltage) self.volOpCebProfile.setObjectName(_fromUtf8("volOpCebProfile")) - self.gridLayout.addWidget(self.volOpCebProfile, 5, 0, 1, 3) + self.gridLayout.addWidget(self.volOpCebProfile, 6, 0, 1, 3) self.volOpComProfile = QtGui.QComboBox(self.tabopVoltage) self.volOpComProfile.setObjectName(_fromUtf8("volOpComProfile")) self.volOpComProfile.addItem(_fromUtf8("")) self.volOpComProfile.addItem(_fromUtf8("")) - self.gridLayout.addWidget(self.volOpComProfile, 6, 0, 1, 3) - self.volOpProfile = QtGui.QLineEdit(self.tabopVoltage) - self.volOpProfile.setObjectName(_fromUtf8("volOpProfile")) - self.gridLayout.addWidget(self.volOpProfile, 6, 3, 1, 3) + self.gridLayout.addWidget(self.volOpComProfile, 7, 0, 1, 3) self.volOpCebDecodification = QtGui.QCheckBox(self.tabopVoltage) self.volOpCebDecodification.setObjectName(_fromUtf8("volOpCebDecodification")) - self.gridLayout.addWidget(self.volOpCebDecodification, 7, 0, 1, 3) + self.gridLayout.addWidget(self.volOpCebDecodification, 8, 0, 1, 3) + self.volOpCebCohInt = QtGui.QCheckBox(self.tabopVoltage) + self.volOpCebCohInt.setObjectName(_fromUtf8("volOpCebCohInt")) + self.gridLayout.addWidget(self.volOpCebCohInt, 11, 0, 1, 3) + self.volOpProfile = QtGui.QLineEdit(self.tabopVoltage) + self.volOpProfile.setObjectName(_fromUtf8("volOpProfile")) + self.gridLayout.addWidget(self.volOpProfile, 7, 4, 1, 1) + self.volOpFilter = QtGui.QLineEdit(self.tabopVoltage) + self.volOpFilter.setObjectName(_fromUtf8("volOpFilter")) + self.gridLayout.addWidget(self.volOpFilter, 5, 4, 1, 1) + spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem, 6, 4, 1, 1) + spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem1, 8, 4, 1, 1) + spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem2, 3, 4, 1, 1) + self.volOpChannel = QtGui.QLineEdit(self.tabopVoltage) + self.volOpChannel.setObjectName(_fromUtf8("volOpChannel")) + self.gridLayout.addWidget(self.volOpChannel, 2, 4, 1, 1) self.label_4 = QtGui.QLabel(self.tabopVoltage) self.label_4.setObjectName(_fromUtf8("label_4")) - self.gridLayout.addWidget(self.label_4, 8, 1, 1, 1) + self.gridLayout.addWidget(self.label_4, 9, 2, 1, 1) + self.volOpCebChannels = QtGui.QCheckBox(self.tabopVoltage) + self.volOpCebChannels.setObjectName(_fromUtf8("volOpCebChannels")) + self.gridLayout.addWidget(self.volOpCebChannels, 1, 0, 1, 3) + self.volOpCebHeights = QtGui.QCheckBox(self.tabopVoltage) + self.volOpCebHeights.setObjectName(_fromUtf8("volOpCebHeights")) + self.gridLayout.addWidget(self.volOpCebHeights, 3, 0, 1, 3) + self.volOpCebFilter = QtGui.QCheckBox(self.tabopVoltage) + self.volOpCebFilter.setObjectName(_fromUtf8("volOpCebFilter")) + self.gridLayout.addWidget(self.volOpCebFilter, 5, 0, 1, 3) + self.volOpRadarfrequency = QtGui.QLineEdit(self.tabopVoltage) + self.volOpRadarfrequency.setObjectName(_fromUtf8("volOpRadarfrequency")) + self.gridLayout.addWidget(self.volOpRadarfrequency, 0, 4, 1, 1) + self.volOpCebRadarfrequency = QtGui.QCheckBox(self.tabopVoltage) + self.volOpCebRadarfrequency.setObjectName(_fromUtf8("volOpCebRadarfrequency")) + self.gridLayout.addWidget(self.volOpCebRadarfrequency, 0, 0, 1, 3) + self.label_5 = QtGui.QLabel(self.tabopVoltage) + self.label_5.setObjectName(_fromUtf8("label_5")) + self.gridLayout.addWidget(self.label_5, 10, 2, 1, 1) + spacerItem3 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem3, 1, 4, 1, 1) + self.volOpCohInt = QtGui.QLineEdit(self.tabopVoltage) + self.volOpCohInt.setObjectName(_fromUtf8("volOpCohInt")) + self.gridLayout.addWidget(self.volOpCohInt, 11, 4, 1, 1) self.volOpComCode = QtGui.QComboBox(self.tabopVoltage) self.volOpComCode.setObjectName(_fromUtf8("volOpComCode")) self.volOpComCode.addItem(_fromUtf8("")) @@ -195,105 +262,82 @@ class Ui_MainWindow(object): self.volOpComCode.addItem(_fromUtf8("")) self.volOpComCode.addItem(_fromUtf8("")) self.volOpComCode.addItem(_fromUtf8("")) - self.gridLayout.addWidget(self.volOpComCode, 8, 2, 1, 4) - self.label_5 = QtGui.QLabel(self.tabopVoltage) - self.label_5.setObjectName(_fromUtf8("label_5")) - self.gridLayout.addWidget(self.label_5, 9, 1, 1, 1) + self.volOpComCode.addItem(_fromUtf8("")) + self.volOpComCode.addItem(_fromUtf8("")) + self.volOpComCode.addItem(_fromUtf8("")) + self.volOpComCode.addItem(_fromUtf8("")) + self.volOpComCode.addItem(_fromUtf8("")) + self.volOpComCode.addItem(_fromUtf8("")) + self.volOpComCode.addItem(_fromUtf8("")) + self.gridLayout.addWidget(self.volOpComCode, 9, 4, 1, 1) self.volOpComMode = QtGui.QComboBox(self.tabopVoltage) self.volOpComMode.setObjectName(_fromUtf8("volOpComMode")) self.volOpComMode.addItem(_fromUtf8("")) self.volOpComMode.addItem(_fromUtf8("")) - self.volOpComMode.addItem(_fromUtf8("")) - self.gridLayout.addWidget(self.volOpComMode, 9, 2, 1, 4) - spacerItem3 = QtGui.QSpacerItem(54, 11, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout.addItem(spacerItem3, 12, 0, 1, 1) - self.volOpOk = QtGui.QPushButton(self.tabopVoltage) - self.volOpOk.setObjectName(_fromUtf8("volOpOk")) - self.gridLayout.addWidget(self.volOpOk, 12, 1, 1, 2) - spacerItem4 = QtGui.QSpacerItem(43, 11, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout.addItem(spacerItem4, 12, 3, 1, 1) - self.volOpClear = QtGui.QPushButton(self.tabopVoltage) - self.volOpClear.setObjectName(_fromUtf8("volOpClear")) - self.gridLayout.addWidget(self.volOpClear, 12, 4, 1, 1) - spacerItem5 = QtGui.QSpacerItem(33, 6, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout.addItem(spacerItem5, 12, 5, 1, 1) - self.volOpCebCohInt = QtGui.QCheckBox(self.tabopVoltage) - self.volOpCebCohInt.setObjectName(_fromUtf8("volOpCebCohInt")) - self.gridLayout.addWidget(self.volOpCebCohInt, 10, 0, 1, 3) - self.volOpCohInt = QtGui.QLineEdit(self.tabopVoltage) - self.volOpCohInt.setObjectName(_fromUtf8("volOpCohInt")) - self.gridLayout.addWidget(self.volOpCohInt, 10, 3, 1, 3) + self.gridLayout.addWidget(self.volOpComMode, 10, 4, 1, 1) self.tabWidgetVoltage.addTab(self.tabopVoltage, _fromUtf8("")) self.tabgraphVoltage = QtGui.QWidget() self.tabgraphVoltage.setObjectName(_fromUtf8("tabgraphVoltage")) self.gridLayout_6 = QtGui.QGridLayout(self.tabgraphVoltage) self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6")) - self.label_12 = QtGui.QLabel(self.tabgraphVoltage) - self.label_12.setObjectName(_fromUtf8("label_12")) - self.gridLayout_6.addWidget(self.label_12, 1, 0, 1, 2) - spacerItem6 = QtGui.QSpacerItem(40, 12, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_6.addItem(spacerItem6, 14, 5, 1, 2) - spacerItem7 = QtGui.QSpacerItem(18, 12, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_6.addItem(spacerItem7, 14, 3, 1, 1) - self.volGraphClear = QtGui.QPushButton(self.tabgraphVoltage) - self.volGraphClear.setObjectName(_fromUtf8("volGraphClear")) - self.gridLayout_6.addWidget(self.volGraphClear, 14, 4, 1, 1) - self.volGraphOk = QtGui.QPushButton(self.tabgraphVoltage) - self.volGraphOk.setObjectName(_fromUtf8("volGraphOk")) - self.gridLayout_6.addWidget(self.volGraphOk, 14, 2, 1, 1) - spacerItem8 = QtGui.QSpacerItem(58, 12, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_6.addItem(spacerItem8, 14, 0, 1, 1) - self.volGraphChannelList = QtGui.QLineEdit(self.tabgraphVoltage) - self.volGraphChannelList.setObjectName(_fromUtf8("volGraphChannelList")) - self.gridLayout_6.addWidget(self.volGraphChannelList, 7, 2, 1, 4) - self.label_13 = QtGui.QLabel(self.tabgraphVoltage) - self.label_13.setObjectName(_fromUtf8("label_13")) - self.gridLayout_6.addWidget(self.label_13, 2, 0, 1, 1) - self.volGraphToolPath = QtGui.QToolButton(self.tabgraphVoltage) - self.volGraphToolPath.setObjectName(_fromUtf8("volGraphToolPath")) - self.gridLayout_6.addWidget(self.volGraphToolPath, 1, 5, 1, 1) + spacerItem4 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_6.addItem(spacerItem4, 12, 3, 1, 1) self.volGraphfreqrange = QtGui.QLineEdit(self.tabgraphVoltage) self.volGraphfreqrange.setObjectName(_fromUtf8("volGraphfreqrange")) - self.gridLayout_6.addWidget(self.volGraphfreqrange, 8, 2, 1, 4) - self.volGraphCebshow = QtGui.QCheckBox(self.tabgraphVoltage) - self.volGraphCebshow.setText(_fromUtf8("")) - self.volGraphCebshow.setObjectName(_fromUtf8("volGraphCebshow")) - self.gridLayout_6.addWidget(self.volGraphCebshow, 5, 3, 1, 1) - self.label_50 = QtGui.QLabel(self.tabgraphVoltage) - self.label_50.setObjectName(_fromUtf8("label_50")) - self.gridLayout_6.addWidget(self.label_50, 4, 5, 1, 1) - self.label_8 = QtGui.QLabel(self.tabgraphVoltage) - self.label_8.setObjectName(_fromUtf8("label_8")) - self.gridLayout_6.addWidget(self.label_8, 7, 0, 1, 1) - self.label_49 = QtGui.QLabel(self.tabgraphVoltage) - self.label_49.setObjectName(_fromUtf8("label_49")) - self.gridLayout_6.addWidget(self.label_49, 4, 3, 1, 1) + self.gridLayout_6.addWidget(self.volGraphfreqrange, 9, 1, 1, 6) self.volGraphPrefix = QtGui.QLineEdit(self.tabgraphVoltage) self.volGraphPrefix.setObjectName(_fromUtf8("volGraphPrefix")) - self.gridLayout_6.addWidget(self.volGraphPrefix, 2, 2, 1, 4) + self.gridLayout_6.addWidget(self.volGraphPrefix, 2, 1, 1, 6) + self.volGraphToolPath = QtGui.QToolButton(self.tabgraphVoltage) + self.volGraphToolPath.setObjectName(_fromUtf8("volGraphToolPath")) + self.gridLayout_6.addWidget(self.volGraphToolPath, 1, 5, 1, 2) self.volGraphPath = QtGui.QLineEdit(self.tabgraphVoltage) self.volGraphPath.setObjectName(_fromUtf8("volGraphPath")) - self.gridLayout_6.addWidget(self.volGraphPath, 1, 2, 1, 3) - self.volGraphHeightrange = QtGui.QLineEdit(self.tabgraphVoltage) - self.volGraphHeightrange.setObjectName(_fromUtf8("volGraphHeightrange")) - self.gridLayout_6.addWidget(self.volGraphHeightrange, 10, 2, 1, 4) - self.label_52 = QtGui.QLabel(self.tabgraphVoltage) - self.label_52.setObjectName(_fromUtf8("label_52")) - self.gridLayout_6.addWidget(self.label_52, 10, 0, 1, 1) + self.gridLayout_6.addWidget(self.volGraphPath, 1, 1, 1, 4) self.label_14 = QtGui.QLabel(self.tabgraphVoltage) self.label_14.setObjectName(_fromUtf8("label_14")) - self.gridLayout_6.addWidget(self.label_14, 5, 0, 1, 2) + self.gridLayout_6.addWidget(self.label_14, 6, 0, 1, 1) + spacerItem5 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_6.addItem(spacerItem5, 3, 3, 1, 1) + self.label_8 = QtGui.QLabel(self.tabgraphVoltage) + self.label_8.setObjectName(_fromUtf8("label_8")) + self.gridLayout_6.addWidget(self.label_8, 8, 0, 1, 1) + self.label_49 = QtGui.QLabel(self.tabgraphVoltage) + self.label_49.setObjectName(_fromUtf8("label_49")) + self.gridLayout_6.addWidget(self.label_49, 4, 3, 1, 1) self.label_51 = QtGui.QLabel(self.tabgraphVoltage) self.label_51.setObjectName(_fromUtf8("label_51")) - self.gridLayout_6.addWidget(self.label_51, 8, 0, 1, 1) - spacerItem9 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_6.addItem(spacerItem9, 3, 3, 1, 1) - spacerItem10 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_6.addItem(spacerItem10, 11, 2, 1, 1) + self.gridLayout_6.addWidget(self.label_51, 9, 0, 1, 1) + self.volGraphCebshow = QtGui.QCheckBox(self.tabgraphVoltage) + self.volGraphCebshow.setText(_fromUtf8("")) + self.volGraphCebshow.setObjectName(_fromUtf8("volGraphCebshow")) + self.gridLayout_6.addWidget(self.volGraphCebshow, 6, 3, 1, 1) + self.label_12 = QtGui.QLabel(self.tabgraphVoltage) + self.label_12.setObjectName(_fromUtf8("label_12")) + self.gridLayout_6.addWidget(self.label_12, 1, 0, 1, 1) + self.label_13 = QtGui.QLabel(self.tabgraphVoltage) + self.label_13.setObjectName(_fromUtf8("label_13")) + self.gridLayout_6.addWidget(self.label_13, 2, 0, 1, 1) + self.label_52 = QtGui.QLabel(self.tabgraphVoltage) + self.label_52.setObjectName(_fromUtf8("label_52")) + self.gridLayout_6.addWidget(self.label_52, 11, 0, 1, 1) + spacerItem6 = QtGui.QSpacerItem(40, 12, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_6.addItem(spacerItem6, 14, 5, 1, 2) + spacerItem7 = QtGui.QSpacerItem(18, 12, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_6.addItem(spacerItem7, 14, 3, 1, 1) + self.volGraphChannelList = QtGui.QLineEdit(self.tabgraphVoltage) + self.volGraphChannelList.setObjectName(_fromUtf8("volGraphChannelList")) + self.gridLayout_6.addWidget(self.volGraphChannelList, 8, 1, 1, 6) + self.volGraphHeightrange = QtGui.QLineEdit(self.tabgraphVoltage) + self.volGraphHeightrange.setObjectName(_fromUtf8("volGraphHeightrange")) + self.gridLayout_6.addWidget(self.volGraphHeightrange, 11, 1, 1, 6) + self.label_50 = QtGui.QLabel(self.tabgraphVoltage) + self.label_50.setObjectName(_fromUtf8("label_50")) + self.gridLayout_6.addWidget(self.label_50, 4, 4, 1, 1) self.volGraphCebSave = QtGui.QCheckBox(self.tabgraphVoltage) self.volGraphCebSave.setText(_fromUtf8("")) self.volGraphCebSave.setObjectName(_fromUtf8("volGraphCebSave")) - self.gridLayout_6.addWidget(self.volGraphCebSave, 5, 5, 1, 1) + self.gridLayout_6.addWidget(self.volGraphCebSave, 6, 4, 1, 1) self.tabWidgetVoltage.addTab(self.tabgraphVoltage, _fromUtf8("")) self.taboutputVoltage = QtGui.QWidget() self.taboutputVoltage.setObjectName(_fromUtf8("taboutputVoltage")) @@ -307,23 +351,28 @@ class Ui_MainWindow(object): self.gridLayout_12.addWidget(self.label_37, 1, 0, 1, 1) self.volOutputPath = QtGui.QLineEdit(self.taboutputVoltage) self.volOutputPath.setObjectName(_fromUtf8("volOutputPath")) - self.gridLayout_12.addWidget(self.volOutputPath, 1, 1, 1, 1) + self.gridLayout_12.addWidget(self.volOutputPath, 1, 2, 1, 1) self.volOutputToolPath = QtGui.QToolButton(self.taboutputVoltage) self.volOutputToolPath.setObjectName(_fromUtf8("volOutputToolPath")) - self.gridLayout_12.addWidget(self.volOutputToolPath, 1, 2, 1, 1) - self.label_38 = QtGui.QLabel(self.taboutputVoltage) - self.label_38.setObjectName(_fromUtf8("label_38")) - self.gridLayout_12.addWidget(self.label_38, 2, 0, 1, 1) - self.volOutputSufix = QtGui.QLineEdit(self.taboutputVoltage) - self.volOutputSufix.setObjectName(_fromUtf8("volOutputSufix")) - self.gridLayout_12.addWidget(self.volOutputSufix, 2, 1, 1, 1) + self.gridLayout_12.addWidget(self.volOutputToolPath, 1, 3, 1, 1) self.volOutputComData = QtGui.QComboBox(self.taboutputVoltage) self.volOutputComData.setObjectName(_fromUtf8("volOutputComData")) self.volOutputComData.addItem(_fromUtf8("")) - self.volOutputComData.addItem(_fromUtf8("")) - self.gridLayout_12.addWidget(self.volOutputComData, 0, 1, 1, 2) - spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_12.addItem(spacerItem11, 3, 1, 1, 1) + self.gridLayout_12.addWidget(self.volOutputComData, 0, 2, 1, 2) + spacerItem8 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_12.addItem(spacerItem8, 5, 2, 1, 1) + self.volOutputblocksperfile = QtGui.QLineEdit(self.taboutputVoltage) + self.volOutputblocksperfile.setObjectName(_fromUtf8("volOutputblocksperfile")) + self.gridLayout_12.addWidget(self.volOutputblocksperfile, 3, 2, 1, 1) + self.label_7 = QtGui.QLabel(self.taboutputVoltage) + self.label_7.setObjectName(_fromUtf8("label_7")) + self.gridLayout_12.addWidget(self.label_7, 3, 0, 1, 1) + self.label_35 = QtGui.QLabel(self.taboutputVoltage) + self.label_35.setObjectName(_fromUtf8("label_35")) + self.gridLayout_12.addWidget(self.label_35, 4, 0, 1, 1) + self.volOutputprofilesperblock = QtGui.QLineEdit(self.taboutputVoltage) + self.volOutputprofilesperblock.setObjectName(_fromUtf8("volOutputprofilesperblock")) + self.gridLayout_12.addWidget(self.volOutputprofilesperblock, 4, 2, 1, 1) self.tabWidgetVoltage.addTab(self.taboutputVoltage, _fromUtf8("")) self.gridLayout_3.addWidget(self.tabWidgetVoltage, 0, 1, 1, 1) self.tabWidgetProject.addTab(self.tabVoltage, _fromUtf8("")) @@ -331,6 +380,19 @@ class Ui_MainWindow(object): self.tabSpectra.setObjectName(_fromUtf8("tabSpectra")) self.gridLayout_7 = QtGui.QGridLayout(self.tabSpectra) self.gridLayout_7.setObjectName(_fromUtf8("gridLayout_7")) + self.frame_5 = QtGui.QFrame(self.tabSpectra) + self.frame_5.setFrameShape(QtGui.QFrame.StyledPanel) + self.frame_5.setFrameShadow(QtGui.QFrame.Raised) + self.frame_5.setObjectName(_fromUtf8("frame_5")) + self.gridLayout_18 = QtGui.QGridLayout(self.frame_5) + self.gridLayout_18.setObjectName(_fromUtf8("gridLayout_18")) + self.specOpOk = QtGui.QPushButton(self.frame_5) + self.specOpOk.setObjectName(_fromUtf8("specOpOk")) + self.gridLayout_18.addWidget(self.specOpOk, 0, 0, 1, 1) + self.specGraphClear = QtGui.QPushButton(self.frame_5) + self.specGraphClear.setObjectName(_fromUtf8("specGraphClear")) + self.gridLayout_18.addWidget(self.specGraphClear, 0, 1, 1, 1) + self.gridLayout_7.addWidget(self.frame_5, 1, 1, 1, 1) self.tabWidgetSpectra = QtGui.QTabWidget(self.tabSpectra) self.tabWidgetSpectra.setObjectName(_fromUtf8("tabWidgetSpectra")) self.tabopSpectra = QtGui.QWidget() @@ -339,90 +401,137 @@ class Ui_MainWindow(object): self.gridLayout_5.setObjectName(_fromUtf8("gridLayout_5")) self.specOpCebCrossSpectra = QtGui.QCheckBox(self.tabopSpectra) self.specOpCebCrossSpectra.setObjectName(_fromUtf8("specOpCebCrossSpectra")) - self.gridLayout_5.addWidget(self.specOpCebCrossSpectra, 1, 0, 1, 2) + self.gridLayout_5.addWidget(self.specOpCebCrossSpectra, 4, 0, 1, 2) self.specOpComChannel = QtGui.QComboBox(self.tabopSpectra) self.specOpComChannel.setObjectName(_fromUtf8("specOpComChannel")) self.specOpComChannel.addItem(_fromUtf8("")) self.specOpComChannel.addItem(_fromUtf8("")) - self.gridLayout_5.addWidget(self.specOpComChannel, 5, 0, 1, 2) + self.gridLayout_5.addWidget(self.specOpComChannel, 8, 0, 1, 2) self.specOpChannel = QtGui.QLineEdit(self.tabopSpectra) self.specOpChannel.setObjectName(_fromUtf8("specOpChannel")) - self.gridLayout_5.addWidget(self.specOpChannel, 5, 2, 1, 3) + self.gridLayout_5.addWidget(self.specOpChannel, 8, 3, 1, 2) self.specOpComHeights = QtGui.QComboBox(self.tabopSpectra) self.specOpComHeights.setObjectName(_fromUtf8("specOpComHeights")) self.specOpComHeights.addItem(_fromUtf8("")) self.specOpComHeights.addItem(_fromUtf8("")) - self.gridLayout_5.addWidget(self.specOpComHeights, 8, 0, 1, 2) + self.gridLayout_5.addWidget(self.specOpComHeights, 11, 0, 1, 2) self.specOpHeights = QtGui.QLineEdit(self.tabopSpectra) self.specOpHeights.setObjectName(_fromUtf8("specOpHeights")) - self.gridLayout_5.addWidget(self.specOpHeights, 8, 2, 1, 3) - self.specOpCebIncoherent = QtGui.QCheckBox(self.tabopSpectra) - self.specOpCebIncoherent.setObjectName(_fromUtf8("specOpCebIncoherent")) - self.gridLayout_5.addWidget(self.specOpCebIncoherent, 9, 0, 1, 2) + self.gridLayout_5.addWidget(self.specOpHeights, 11, 3, 1, 2) self.specOpIncoherent = QtGui.QLineEdit(self.tabopSpectra) self.specOpIncoherent.setObjectName(_fromUtf8("specOpIncoherent")) - self.gridLayout_5.addWidget(self.specOpIncoherent, 9, 2, 1, 3) + self.gridLayout_5.addWidget(self.specOpIncoherent, 13, 3, 1, 2) self.specOpCebRemoveDC = QtGui.QCheckBox(self.tabopSpectra) self.specOpCebRemoveDC.setObjectName(_fromUtf8("specOpCebRemoveDC")) - self.gridLayout_5.addWidget(self.specOpCebRemoveDC, 10, 0, 1, 2) - self.specOpRemoveDC = QtGui.QLineEdit(self.tabopSpectra) - self.specOpRemoveDC.setObjectName(_fromUtf8("specOpRemoveDC")) - self.gridLayout_5.addWidget(self.specOpRemoveDC, 10, 2, 1, 3) - self.specOpCebRemoveInterference = QtGui.QCheckBox(self.tabopSpectra) - self.specOpCebRemoveInterference.setObjectName(_fromUtf8("specOpCebRemoveInterference")) - self.gridLayout_5.addWidget(self.specOpCebRemoveInterference, 11, 0, 1, 2) - self.specOpRemoveInterference = QtGui.QLineEdit(self.tabopSpectra) - self.specOpRemoveInterference.setObjectName(_fromUtf8("specOpRemoveInterference")) - self.gridLayout_5.addWidget(self.specOpRemoveInterference, 11, 2, 1, 3) - spacerItem12 = QtGui.QSpacerItem(49, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_5.addItem(spacerItem12, 12, 0, 1, 1) - self.specOpOk = QtGui.QPushButton(self.tabopSpectra) - self.specOpOk.setObjectName(_fromUtf8("specOpOk")) - self.gridLayout_5.addWidget(self.specOpOk, 12, 1, 1, 1) - spacerItem13 = QtGui.QSpacerItem(46, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_5.addItem(spacerItem13, 12, 2, 1, 1) - self.pushButton_8 = QtGui.QPushButton(self.tabopSpectra) - self.pushButton_8.setObjectName(_fromUtf8("pushButton_8")) - self.gridLayout_5.addWidget(self.pushButton_8, 12, 3, 1, 1) - spacerItem14 = QtGui.QSpacerItem(35, 12, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_5.addItem(spacerItem14, 12, 4, 1, 1) + self.gridLayout_5.addWidget(self.specOpCebRemoveDC, 14, 0, 1, 2) self.specOpCebHeights = QtGui.QCheckBox(self.tabopSpectra) self.specOpCebHeights.setObjectName(_fromUtf8("specOpCebHeights")) - self.gridLayout_5.addWidget(self.specOpCebHeights, 6, 0, 1, 1) + self.gridLayout_5.addWidget(self.specOpCebHeights, 9, 0, 1, 1) self.specOpCebChannel = QtGui.QCheckBox(self.tabopSpectra) self.specOpCebChannel.setObjectName(_fromUtf8("specOpCebChannel")) - self.gridLayout_5.addWidget(self.specOpCebChannel, 4, 0, 1, 1) + self.gridLayout_5.addWidget(self.specOpCebChannel, 7, 0, 1, 1) self.specOppairsList = QtGui.QLineEdit(self.tabopSpectra) self.specOppairsList.setObjectName(_fromUtf8("specOppairsList")) - self.gridLayout_5.addWidget(self.specOppairsList, 3, 2, 1, 3) + self.gridLayout_5.addWidget(self.specOppairsList, 6, 3, 1, 2) self.specOpnFFTpoints = QtGui.QLineEdit(self.tabopSpectra) self.specOpnFFTpoints.setObjectName(_fromUtf8("specOpnFFTpoints")) - self.gridLayout_5.addWidget(self.specOpnFFTpoints, 0, 2, 1, 3) + self.gridLayout_5.addWidget(self.specOpnFFTpoints, 2, 3, 1, 2) self.label_31 = QtGui.QLabel(self.tabopSpectra) self.label_31.setObjectName(_fromUtf8("label_31")) - self.gridLayout_5.addWidget(self.label_31, 3, 0, 1, 2) + self.gridLayout_5.addWidget(self.label_31, 6, 0, 1, 2) self.label_26 = QtGui.QLabel(self.tabopSpectra) self.label_26.setObjectName(_fromUtf8("label_26")) - self.gridLayout_5.addWidget(self.label_26, 0, 0, 1, 2) + self.gridLayout_5.addWidget(self.label_26, 2, 0, 1, 2) + self.specOpCebIncoherent = QtGui.QCheckBox(self.tabopSpectra) + self.specOpCebIncoherent.setObjectName(_fromUtf8("specOpCebIncoherent")) + self.gridLayout_5.addWidget(self.specOpCebIncoherent, 12, 0, 1, 1) + self.specOpCobIncInt = QtGui.QComboBox(self.tabopSpectra) + self.specOpCobIncInt.setObjectName(_fromUtf8("specOpCobIncInt")) + self.specOpCobIncInt.addItem(_fromUtf8("")) + self.specOpCobIncInt.addItem(_fromUtf8("")) + self.gridLayout_5.addWidget(self.specOpCobIncInt, 13, 0, 1, 2) + spacerItem9 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_5.addItem(spacerItem9, 12, 3, 1, 1) + self.specOpCebRadarfrequency = QtGui.QCheckBox(self.tabopSpectra) + self.specOpCebRadarfrequency.setObjectName(_fromUtf8("specOpCebRadarfrequency")) + self.gridLayout_5.addWidget(self.specOpCebRadarfrequency, 0, 0, 1, 2) + spacerItem10 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_5.addItem(spacerItem10, 9, 3, 1, 1) + spacerItem11 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_5.addItem(spacerItem11, 7, 3, 1, 1) + self.specOpRadarfrequency = QtGui.QLineEdit(self.tabopSpectra) + self.specOpRadarfrequency.setObjectName(_fromUtf8("specOpRadarfrequency")) + self.gridLayout_5.addWidget(self.specOpRadarfrequency, 0, 3, 1, 2) + spacerItem12 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_5.addItem(spacerItem12, 4, 3, 1, 1) + self.label_21 = QtGui.QLabel(self.tabopSpectra) + self.label_21.setObjectName(_fromUtf8("label_21")) + self.gridLayout_5.addWidget(self.label_21, 1, 0, 1, 1) + self.specOpProfiles = QtGui.QLineEdit(self.tabopSpectra) + self.specOpProfiles.setObjectName(_fromUtf8("specOpProfiles")) + self.gridLayout_5.addWidget(self.specOpProfiles, 1, 3, 1, 2) + self.specOpCebRemoveInt = QtGui.QCheckBox(self.tabopSpectra) + self.specOpCebRemoveInt.setObjectName(_fromUtf8("specOpCebRemoveInt")) + self.gridLayout_5.addWidget(self.specOpCebRemoveInt, 15, 0, 1, 1) + spacerItem13 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_5.addItem(spacerItem13, 15, 3, 1, 1) + self.label_70 = QtGui.QLabel(self.tabopSpectra) + self.label_70.setObjectName(_fromUtf8("label_70")) + self.gridLayout_5.addWidget(self.label_70, 3, 0, 1, 1) + self.specOpCebgetNoise = QtGui.QCheckBox(self.tabopSpectra) + self.specOpCebgetNoise.setObjectName(_fromUtf8("specOpCebgetNoise")) + self.gridLayout_5.addWidget(self.specOpCebgetNoise, 16, 0, 1, 1) + self.specOpippFactor = QtGui.QLineEdit(self.tabopSpectra) + self.specOpippFactor.setObjectName(_fromUtf8("specOpippFactor")) + self.gridLayout_5.addWidget(self.specOpippFactor, 3, 3, 1, 2) + self.specOpComRemoveDC = QtGui.QComboBox(self.tabopSpectra) + self.specOpComRemoveDC.setObjectName(_fromUtf8("specOpComRemoveDC")) + self.specOpComRemoveDC.addItem(_fromUtf8("")) + self.specOpComRemoveDC.addItem(_fromUtf8("")) + self.gridLayout_5.addWidget(self.specOpComRemoveDC, 14, 3, 1, 2) + self.specOpgetNoise = QtGui.QLineEdit(self.tabopSpectra) + self.specOpgetNoise.setObjectName(_fromUtf8("specOpgetNoise")) + self.gridLayout_5.addWidget(self.specOpgetNoise, 16, 3, 1, 2) self.tabWidgetSpectra.addTab(self.tabopSpectra, _fromUtf8("")) self.tabgraphSpectra = QtGui.QWidget() self.tabgraphSpectra.setObjectName(_fromUtf8("tabgraphSpectra")) self.gridLayout_9 = QtGui.QGridLayout(self.tabgraphSpectra) self.gridLayout_9.setObjectName(_fromUtf8("gridLayout_9")) - self.specGraphPowerprofile = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphPowerprofile.setText(_fromUtf8("")) - self.specGraphPowerprofile.setObjectName(_fromUtf8("specGraphPowerprofile")) - self.gridLayout_9.addWidget(self.specGraphPowerprofile, 11, 2, 1, 1) - self.specGraphSaveRTIfromNoise = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphSaveRTIfromNoise.setText(_fromUtf8("")) - self.specGraphSaveRTIfromNoise.setObjectName(_fromUtf8("specGraphSaveRTIfromNoise")) - self.gridLayout_9.addWidget(self.specGraphSaveRTIfromNoise, 10, 5, 1, 1) - self.label_43 = QtGui.QLabel(self.tabgraphSpectra) - self.label_43.setObjectName(_fromUtf8("label_43")) - self.gridLayout_9.addWidget(self.label_43, 4, 2, 1, 2) + self.label_44 = QtGui.QLabel(self.tabgraphSpectra) + self.label_44.setObjectName(_fromUtf8("label_44")) + self.gridLayout_9.addWidget(self.label_44, 10, 0, 1, 1) + spacerItem14 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_9.addItem(spacerItem14, 14, 2, 1, 1) + self.label_20 = QtGui.QLabel(self.tabgraphSpectra) + self.label_20.setObjectName(_fromUtf8("label_20")) + self.gridLayout_9.addWidget(self.label_20, 21, 0, 1, 1) + self.specGraphSaveRTInoise = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphSaveRTInoise.setText(_fromUtf8("")) + self.specGraphSaveRTInoise.setObjectName(_fromUtf8("specGraphSaveRTInoise")) + self.gridLayout_9.addWidget(self.specGraphSaveRTInoise, 13, 4, 1, 1) + self.specGgraphmagnitud = QtGui.QLineEdit(self.tabgraphSpectra) + self.specGgraphmagnitud.setObjectName(_fromUtf8("specGgraphmagnitud")) + self.gridLayout_9.addWidget(self.specGgraphmagnitud, 20, 1, 1, 7) + self.specGraphSaveSpectra = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphSaveSpectra.setText(_fromUtf8("")) + self.specGraphSaveSpectra.setObjectName(_fromUtf8("specGraphSaveSpectra")) + self.gridLayout_9.addWidget(self.specGraphSaveSpectra, 6, 4, 1, 1) + self.specGgraphChannelList = QtGui.QLineEdit(self.tabgraphSpectra) + self.specGgraphChannelList.setObjectName(_fromUtf8("specGgraphChannelList")) + self.gridLayout_9.addWidget(self.specGgraphChannelList, 15, 1, 1, 7) + self.label_25 = QtGui.QLabel(self.tabgraphSpectra) + self.label_25.setObjectName(_fromUtf8("label_25")) + self.gridLayout_9.addWidget(self.label_25, 2, 0, 1, 1) + self.specGgraphTminTmax = QtGui.QLineEdit(self.tabgraphSpectra) + self.specGgraphTminTmax.setObjectName(_fromUtf8("specGgraphTminTmax")) + self.gridLayout_9.addWidget(self.specGgraphTminTmax, 21, 1, 1, 7) + spacerItem15 = QtGui.QSpacerItem(28, 15, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_9.addItem(spacerItem15, 27, 6, 1, 2) + spacerItem16 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_9.addItem(spacerItem16, 3, 5, 1, 1) self.label_42 = QtGui.QLabel(self.tabgraphSpectra) self.label_42.setObjectName(_fromUtf8("label_42")) - self.gridLayout_9.addWidget(self.label_42, 8, 0, 1, 1) + self.gridLayout_9.addWidget(self.label_42, 9, 0, 1, 1) self.label_16 = QtGui.QLabel(self.tabgraphSpectra) self.label_16.setObjectName(_fromUtf8("label_16")) self.gridLayout_9.addWidget(self.label_16, 18, 0, 1, 1) @@ -432,150 +541,136 @@ class Ui_MainWindow(object): self.label_18 = QtGui.QLabel(self.tabgraphSpectra) self.label_18.setObjectName(_fromUtf8("label_18")) self.gridLayout_9.addWidget(self.label_18, 20, 0, 1, 1) - self.label_21 = QtGui.QLabel(self.tabgraphSpectra) - self.label_21.setObjectName(_fromUtf8("label_21")) - self.gridLayout_9.addWidget(self.label_21, 22, 0, 1, 1) self.specGgraphFreq = QtGui.QLineEdit(self.tabgraphSpectra) self.specGgraphFreq.setObjectName(_fromUtf8("specGgraphFreq")) - self.gridLayout_9.addWidget(self.specGgraphFreq, 16, 1, 1, 6) + self.gridLayout_9.addWidget(self.specGgraphFreq, 16, 1, 1, 7) self.specGgraphHeight = QtGui.QLineEdit(self.tabgraphSpectra) self.specGgraphHeight.setObjectName(_fromUtf8("specGgraphHeight")) - self.gridLayout_9.addWidget(self.specGgraphHeight, 18, 1, 1, 6) - spacerItem15 = QtGui.QSpacerItem(49, 15, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_9.addItem(spacerItem15, 27, 0, 1, 1) - self.specGraphOk = QtGui.QPushButton(self.tabgraphSpectra) - self.specGraphOk.setObjectName(_fromUtf8("specGraphOk")) - self.gridLayout_9.addWidget(self.specGraphOk, 27, 1, 1, 2) - spacerItem16 = QtGui.QSpacerItem(39, 15, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_9.addItem(spacerItem16, 27, 3, 1, 1) - self.specGraphClear = QtGui.QPushButton(self.tabgraphSpectra) - self.specGraphClear.setObjectName(_fromUtf8("specGraphClear")) - self.gridLayout_9.addWidget(self.specGraphClear, 27, 4, 1, 1) - spacerItem17 = QtGui.QSpacerItem(28, 15, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) - self.gridLayout_9.addItem(spacerItem17, 27, 5, 1, 2) - self.specGraphSaveCoherencemap = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphSaveCoherencemap.setText(_fromUtf8("")) - self.specGraphSaveCoherencemap.setObjectName(_fromUtf8("specGraphSaveCoherencemap")) - self.gridLayout_9.addWidget(self.specGraphSaveCoherencemap, 9, 5, 1, 1) - self.specGraphCebCoherencmap = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphCebCoherencmap.setText(_fromUtf8("")) - self.specGraphCebCoherencmap.setObjectName(_fromUtf8("specGraphCebCoherencmap")) - self.gridLayout_9.addWidget(self.specGraphCebCoherencmap, 9, 2, 1, 1) + self.gridLayout_9.addWidget(self.specGgraphHeight, 18, 1, 1, 7) + spacerItem17 = QtGui.QSpacerItem(49, 15, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_9.addItem(spacerItem17, 27, 0, 1, 1) self.label_24 = QtGui.QLabel(self.tabgraphSpectra) self.label_24.setObjectName(_fromUtf8("label_24")) self.gridLayout_9.addWidget(self.label_24, 0, 0, 1, 1) self.specGraphPrefix = QtGui.QLineEdit(self.tabgraphSpectra) self.specGraphPrefix.setObjectName(_fromUtf8("specGraphPrefix")) - self.gridLayout_9.addWidget(self.specGraphPrefix, 2, 1, 1, 6) + self.gridLayout_9.addWidget(self.specGraphPrefix, 2, 1, 1, 7) self.specGgraphDbsrange = QtGui.QLineEdit(self.tabgraphSpectra) self.specGgraphDbsrange.setObjectName(_fromUtf8("specGgraphDbsrange")) - self.gridLayout_9.addWidget(self.specGgraphDbsrange, 19, 1, 1, 6) + self.gridLayout_9.addWidget(self.specGgraphDbsrange, 19, 1, 1, 7) self.label_46 = QtGui.QLabel(self.tabgraphSpectra) self.label_46.setObjectName(_fromUtf8("label_46")) self.gridLayout_9.addWidget(self.label_46, 11, 0, 1, 1) - self.label_40 = QtGui.QLabel(self.tabgraphSpectra) - self.label_40.setObjectName(_fromUtf8("label_40")) - self.gridLayout_9.addWidget(self.label_40, 6, 0, 1, 2) self.label_22 = QtGui.QLabel(self.tabgraphSpectra) self.label_22.setObjectName(_fromUtf8("label_22")) self.gridLayout_9.addWidget(self.label_22, 16, 0, 1, 1) self.specGraphPath = QtGui.QLineEdit(self.tabgraphSpectra) self.specGraphPath.setObjectName(_fromUtf8("specGraphPath")) - self.gridLayout_9.addWidget(self.specGraphPath, 0, 1, 1, 5) - self.specGgraphPhaserange = QtGui.QLineEdit(self.tabgraphSpectra) - self.specGgraphPhaserange.setObjectName(_fromUtf8("specGgraphPhaserange")) - self.gridLayout_9.addWidget(self.specGgraphPhaserange, 22, 1, 1, 6) - self.label_45 = QtGui.QLabel(self.tabgraphSpectra) - self.label_45.setObjectName(_fromUtf8("label_45")) - self.gridLayout_9.addWidget(self.label_45, 10, 0, 1, 1) - self.specGraphCebRTIplot = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphCebRTIplot.setText(_fromUtf8("")) - self.specGraphCebRTIplot.setObjectName(_fromUtf8("specGraphCebRTIplot")) - self.gridLayout_9.addWidget(self.specGraphCebRTIplot, 8, 2, 1, 1) - self.specGgraphmagnitud = QtGui.QLineEdit(self.tabgraphSpectra) - self.specGgraphmagnitud.setObjectName(_fromUtf8("specGgraphmagnitud")) - self.gridLayout_9.addWidget(self.specGgraphmagnitud, 20, 1, 1, 6) + self.gridLayout_9.addWidget(self.specGraphPath, 0, 1, 1, 6) + self.label_41 = QtGui.QLabel(self.tabgraphSpectra) + self.label_41.setObjectName(_fromUtf8("label_41")) + self.gridLayout_9.addWidget(self.label_41, 8, 0, 1, 1) + self.specGraphToolPath = QtGui.QToolButton(self.tabgraphSpectra) + self.specGraphToolPath.setObjectName(_fromUtf8("specGraphToolPath")) + self.gridLayout_9.addWidget(self.specGraphToolPath, 0, 7, 1, 1) + self.label_6 = QtGui.QLabel(self.tabgraphSpectra) + self.label_6.setObjectName(_fromUtf8("label_6")) + self.gridLayout_9.addWidget(self.label_6, 15, 0, 1, 1) + self.label_40 = QtGui.QLabel(self.tabgraphSpectra) + self.label_40.setObjectName(_fromUtf8("label_40")) + self.gridLayout_9.addWidget(self.label_40, 6, 0, 1, 1) + self.specGraphCebSpectraplot = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphCebSpectraplot.setText(_fromUtf8("")) + self.specGraphCebSpectraplot.setObjectName(_fromUtf8("specGraphCebSpectraplot")) + self.gridLayout_9.addWidget(self.specGraphCebSpectraplot, 6, 2, 1, 1) self.specGraphCebCrossSpectraplot = QtGui.QCheckBox(self.tabgraphSpectra) self.specGraphCebCrossSpectraplot.setText(_fromUtf8("")) self.specGraphCebCrossSpectraplot.setObjectName(_fromUtf8("specGraphCebCrossSpectraplot")) - self.gridLayout_9.addWidget(self.specGraphCebCrossSpectraplot, 7, 2, 1, 1) - self.label_41 = QtGui.QLabel(self.tabgraphSpectra) - self.label_41.setObjectName(_fromUtf8("label_41")) - self.gridLayout_9.addWidget(self.label_41, 7, 0, 1, 1) - self.specGraphRTIfromnoise = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphRTIfromnoise.setText(_fromUtf8("")) - self.specGraphRTIfromnoise.setObjectName(_fromUtf8("specGraphRTIfromnoise")) - self.gridLayout_9.addWidget(self.specGraphRTIfromnoise, 10, 2, 1, 1) + self.gridLayout_9.addWidget(self.specGraphCebCrossSpectraplot, 8, 2, 1, 1) + self.specGraphCebRTIplot = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphCebRTIplot.setText(_fromUtf8("")) + self.specGraphCebRTIplot.setObjectName(_fromUtf8("specGraphCebRTIplot")) + self.gridLayout_9.addWidget(self.specGraphCebRTIplot, 9, 2, 1, 1) + self.specGraphCebCoherencmap = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphCebCoherencmap.setText(_fromUtf8("")) + self.specGraphCebCoherencmap.setObjectName(_fromUtf8("specGraphCebCoherencmap")) + self.gridLayout_9.addWidget(self.specGraphCebCoherencmap, 10, 2, 1, 1) + self.specGraphPowerprofile = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphPowerprofile.setText(_fromUtf8("")) + self.specGraphPowerprofile.setObjectName(_fromUtf8("specGraphPowerprofile")) + self.gridLayout_9.addWidget(self.specGraphPowerprofile, 11, 2, 1, 1) self.specGraphSaveCross = QtGui.QCheckBox(self.tabgraphSpectra) self.specGraphSaveCross.setText(_fromUtf8("")) self.specGraphSaveCross.setObjectName(_fromUtf8("specGraphSaveCross")) - self.gridLayout_9.addWidget(self.specGraphSaveCross, 7, 5, 1, 1) - self.label_44 = QtGui.QLabel(self.tabgraphSpectra) - self.label_44.setObjectName(_fromUtf8("label_44")) - self.gridLayout_9.addWidget(self.label_44, 9, 0, 1, 1) + self.gridLayout_9.addWidget(self.specGraphSaveCross, 8, 4, 1, 1) + self.specGraphftpSpectra = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphftpSpectra.setText(_fromUtf8("")) + self.specGraphftpSpectra.setObjectName(_fromUtf8("specGraphftpSpectra")) + self.gridLayout_9.addWidget(self.specGraphftpSpectra, 6, 6, 1, 1) + spacerItem18 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_9.addItem(spacerItem18, 4, 3, 1, 1) self.specGraphSavePowerprofile = QtGui.QCheckBox(self.tabgraphSpectra) self.specGraphSavePowerprofile.setText(_fromUtf8("")) self.specGraphSavePowerprofile.setObjectName(_fromUtf8("specGraphSavePowerprofile")) - self.gridLayout_9.addWidget(self.specGraphSavePowerprofile, 11, 5, 1, 1) - self.specGraphSaveRTIplot = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphSaveRTIplot.setText(_fromUtf8("")) - self.specGraphSaveRTIplot.setObjectName(_fromUtf8("specGraphSaveRTIplot")) - self.gridLayout_9.addWidget(self.specGraphSaveRTIplot, 8, 5, 1, 1) - self.specGraphCebSpectraplot = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphCebSpectraplot.setText(_fromUtf8("")) - self.specGraphCebSpectraplot.setObjectName(_fromUtf8("specGraphCebSpectraplot")) - self.gridLayout_9.addWidget(self.specGraphCebSpectraplot, 6, 2, 1, 1) + self.gridLayout_9.addWidget(self.specGraphSavePowerprofile, 11, 4, 1, 1) + self.specGraphSaveCoherencemap = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphSaveCoherencemap.setText(_fromUtf8("")) + self.specGraphSaveCoherencemap.setObjectName(_fromUtf8("specGraphSaveCoherencemap")) + self.gridLayout_9.addWidget(self.specGraphSaveCoherencemap, 10, 4, 1, 1) + spacerItem19 = QtGui.QSpacerItem(39, 15, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_9.addItem(spacerItem19, 27, 4, 1, 1) + self.specGgraphftpratio = QtGui.QLineEdit(self.tabgraphSpectra) + self.specGgraphftpratio.setObjectName(_fromUtf8("specGgraphftpratio")) + self.gridLayout_9.addWidget(self.specGgraphftpratio, 23, 1, 1, 7) + self.label_43 = QtGui.QLabel(self.tabgraphSpectra) + self.label_43.setObjectName(_fromUtf8("label_43")) + self.gridLayout_9.addWidget(self.label_43, 3, 2, 2, 1) + self.specGraphftpCross = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphftpCross.setText(_fromUtf8("")) + self.specGraphftpCross.setObjectName(_fromUtf8("specGraphftpCross")) + self.gridLayout_9.addWidget(self.specGraphftpCross, 8, 6, 1, 1) + self.label_29 = QtGui.QLabel(self.tabgraphSpectra) + self.label_29.setObjectName(_fromUtf8("label_29")) + self.gridLayout_9.addWidget(self.label_29, 23, 0, 1, 1) self.label_47 = QtGui.QLabel(self.tabgraphSpectra) self.label_47.setObjectName(_fromUtf8("label_47")) - self.gridLayout_9.addWidget(self.label_47, 4, 5, 1, 1) - self.specGraphSaveSpectra = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphSaveSpectra.setText(_fromUtf8("")) - self.specGraphSaveSpectra.setObjectName(_fromUtf8("specGraphSaveSpectra")) - self.gridLayout_9.addWidget(self.specGraphSaveSpectra, 6, 5, 1, 1) - self.specGgraphTimeRange = QtGui.QLineEdit(self.tabgraphSpectra) - self.specGgraphTimeRange.setObjectName(_fromUtf8("specGgraphTimeRange")) - self.gridLayout_9.addWidget(self.specGgraphTimeRange, 21, 1, 1, 6) - self.specGraphToolPath = QtGui.QToolButton(self.tabgraphSpectra) - self.specGraphToolPath.setObjectName(_fromUtf8("specGraphToolPath")) - self.gridLayout_9.addWidget(self.specGraphToolPath, 0, 6, 1, 1) - self.label_20 = QtGui.QLabel(self.tabgraphSpectra) - self.label_20.setObjectName(_fromUtf8("label_20")) - self.gridLayout_9.addWidget(self.label_20, 21, 0, 1, 1) - self.specGraphSaveCCF = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphSaveCCF.setText(_fromUtf8("")) - self.specGraphSaveCCF.setObjectName(_fromUtf8("specGraphSaveCCF")) - self.gridLayout_9.addWidget(self.specGraphSaveCCF, 13, 5, 1, 1) - self.specGraphPhase = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphPhase.setText(_fromUtf8("")) - self.specGraphPhase.setObjectName(_fromUtf8("specGraphPhase")) - self.gridLayout_9.addWidget(self.specGraphPhase, 12, 2, 1, 1) + self.gridLayout_9.addWidget(self.label_47, 3, 4, 2, 1) + self.specGraphftpRTIplot = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphftpRTIplot.setText(_fromUtf8("")) + self.specGraphftpRTIplot.setObjectName(_fromUtf8("specGraphftpRTIplot")) + self.gridLayout_9.addWidget(self.specGraphftpRTIplot, 9, 6, 1, 1) + self.specGraphftpCoherencemap = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphftpCoherencemap.setText(_fromUtf8("")) + self.specGraphftpCoherencemap.setObjectName(_fromUtf8("specGraphftpCoherencemap")) + self.gridLayout_9.addWidget(self.specGraphftpCoherencemap, 10, 6, 1, 1) + self.specGraphftpPowerprofile = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphftpPowerprofile.setText(_fromUtf8("")) + self.specGraphftpPowerprofile.setObjectName(_fromUtf8("specGraphftpPowerprofile")) + self.gridLayout_9.addWidget(self.specGraphftpPowerprofile, 11, 6, 1, 1) self.label_19 = QtGui.QLabel(self.tabgraphSpectra) self.label_19.setObjectName(_fromUtf8("label_19")) - self.gridLayout_9.addWidget(self.label_19, 12, 0, 1, 1) + self.gridLayout_9.addWidget(self.label_19, 3, 6, 2, 2) + self.specGraphSaveRTIplot = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphSaveRTIplot.setText(_fromUtf8("")) + self.specGraphSaveRTIplot.setObjectName(_fromUtf8("specGraphSaveRTIplot")) + self.gridLayout_9.addWidget(self.specGraphSaveRTIplot, 9, 4, 1, 1) + self.label_45 = QtGui.QLabel(self.tabgraphSpectra) + self.label_45.setObjectName(_fromUtf8("label_45")) + self.gridLayout_9.addWidget(self.label_45, 13, 0, 1, 1) + self.specGraphftpRTInoise = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphftpRTInoise.setText(_fromUtf8("")) + self.specGraphftpRTInoise.setObjectName(_fromUtf8("specGraphftpRTInoise")) + self.gridLayout_9.addWidget(self.specGraphftpRTInoise, 13, 6, 1, 1) + self.specGraphCebRTInoise = QtGui.QCheckBox(self.tabgraphSpectra) + self.specGraphCebRTInoise.setText(_fromUtf8("")) + self.specGraphCebRTInoise.setObjectName(_fromUtf8("specGraphCebRTInoise")) + self.gridLayout_9.addWidget(self.specGraphCebRTInoise, 13, 2, 1, 1) self.label_48 = QtGui.QLabel(self.tabgraphSpectra) self.label_48.setObjectName(_fromUtf8("label_48")) - self.gridLayout_9.addWidget(self.label_48, 13, 0, 1, 1) - self.specGraphSavePhase = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphSavePhase.setText(_fromUtf8("")) - self.specGraphSavePhase.setObjectName(_fromUtf8("specGraphSavePhase")) - self.gridLayout_9.addWidget(self.specGraphSavePhase, 12, 5, 1, 1) - self.specGraphCCF = QtGui.QCheckBox(self.tabgraphSpectra) - self.specGraphCCF.setText(_fromUtf8("")) - self.specGraphCCF.setObjectName(_fromUtf8("specGraphCCF")) - self.gridLayout_9.addWidget(self.specGraphCCF, 13, 2, 1, 1) - spacerItem18 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_9.addItem(spacerItem18, 14, 2, 1, 1) - spacerItem19 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_9.addItem(spacerItem19, 3, 2, 1, 1) - self.label_25 = QtGui.QLabel(self.tabgraphSpectra) - self.label_25.setObjectName(_fromUtf8("label_25")) - self.gridLayout_9.addWidget(self.label_25, 2, 0, 1, 1) - self.label_6 = QtGui.QLabel(self.tabgraphSpectra) - self.label_6.setObjectName(_fromUtf8("label_6")) - self.gridLayout_9.addWidget(self.label_6, 15, 0, 1, 1) - self.specGgraphChannelList = QtGui.QLineEdit(self.tabgraphSpectra) - self.specGgraphChannelList.setObjectName(_fromUtf8("specGgraphChannelList")) - self.gridLayout_9.addWidget(self.specGgraphChannelList, 15, 1, 1, 6) + self.gridLayout_9.addWidget(self.label_48, 22, 0, 1, 1) + self.specGgraphTimeRange = QtGui.QLineEdit(self.tabgraphSpectra) + self.specGgraphTimeRange.setObjectName(_fromUtf8("specGgraphTimeRange")) + self.gridLayout_9.addWidget(self.specGgraphTimeRange, 22, 1, 1, 7) self.tabWidgetSpectra.addTab(self.tabgraphSpectra, _fromUtf8("")) self.taboutputSpectra = QtGui.QWidget() self.taboutputSpectra.setObjectName(_fromUtf8("taboutputSpectra")) @@ -587,28 +682,214 @@ class Ui_MainWindow(object): self.specOutputComData = QtGui.QComboBox(self.taboutputSpectra) self.specOutputComData.setObjectName(_fromUtf8("specOutputComData")) self.specOutputComData.addItem(_fromUtf8("")) - self.specOutputComData.addItem(_fromUtf8("")) - self.gridLayout_11.addWidget(self.specOutputComData, 0, 1, 1, 2) + self.gridLayout_11.addWidget(self.specOutputComData, 0, 2, 1, 2) self.label_34 = QtGui.QLabel(self.taboutputSpectra) self.label_34.setObjectName(_fromUtf8("label_34")) self.gridLayout_11.addWidget(self.label_34, 1, 0, 1, 1) self.specOutputPath = QtGui.QLineEdit(self.taboutputSpectra) self.specOutputPath.setObjectName(_fromUtf8("specOutputPath")) - self.gridLayout_11.addWidget(self.specOutputPath, 1, 1, 1, 1) + self.gridLayout_11.addWidget(self.specOutputPath, 1, 2, 1, 1) + spacerItem20 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_11.addItem(spacerItem20, 4, 2, 1, 1) self.specOutputToolPath = QtGui.QToolButton(self.taboutputSpectra) self.specOutputToolPath.setObjectName(_fromUtf8("specOutputToolPath")) - self.gridLayout_11.addWidget(self.specOutputToolPath, 1, 2, 1, 1) - self.label_35 = QtGui.QLabel(self.taboutputSpectra) - self.label_35.setObjectName(_fromUtf8("label_35")) - self.gridLayout_11.addWidget(self.label_35, 2, 0, 1, 1) - self.specOutputSufix = QtGui.QLineEdit(self.taboutputSpectra) - self.specOutputSufix.setObjectName(_fromUtf8("specOutputSufix")) - self.gridLayout_11.addWidget(self.specOutputSufix, 2, 1, 1, 1) - spacerItem20 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) - self.gridLayout_11.addItem(spacerItem20, 3, 1, 1, 1) + self.gridLayout_11.addWidget(self.specOutputToolPath, 1, 3, 1, 1) + self.specOutputblocksperfile = QtGui.QLineEdit(self.taboutputSpectra) + self.specOutputblocksperfile.setObjectName(_fromUtf8("specOutputblocksperfile")) + self.gridLayout_11.addWidget(self.specOutputblocksperfile, 2, 2, 1, 1) + self.label_9 = QtGui.QLabel(self.taboutputSpectra) + self.label_9.setObjectName(_fromUtf8("label_9")) + self.gridLayout_11.addWidget(self.label_9, 2, 0, 1, 2) + self.label_38 = QtGui.QLabel(self.taboutputSpectra) + self.label_38.setObjectName(_fromUtf8("label_38")) + self.gridLayout_11.addWidget(self.label_38, 3, 0, 1, 1) + self.specOutputprofileperblock = QtGui.QLineEdit(self.taboutputSpectra) + self.specOutputprofileperblock.setObjectName(_fromUtf8("specOutputprofileperblock")) + self.gridLayout_11.addWidget(self.specOutputprofileperblock, 3, 2, 1, 1) self.tabWidgetSpectra.addTab(self.taboutputSpectra, _fromUtf8("")) - self.gridLayout_7.addWidget(self.tabWidgetSpectra, 0, 0, 1, 1) + self.gridLayout_7.addWidget(self.tabWidgetSpectra, 0, 1, 1, 1) self.tabWidgetProject.addTab(self.tabSpectra, _fromUtf8("")) + self.tabSpectraHeis = QtGui.QWidget() + self.tabSpectraHeis.setObjectName(_fromUtf8("tabSpectraHeis")) + self.gridLayout_23 = QtGui.QGridLayout(self.tabSpectraHeis) + self.gridLayout_23.setObjectName(_fromUtf8("gridLayout_23")) + self.frame_6 = QtGui.QFrame(self.tabSpectraHeis) + self.frame_6.setFrameShape(QtGui.QFrame.StyledPanel) + self.frame_6.setFrameShadow(QtGui.QFrame.Raised) + self.frame_6.setObjectName(_fromUtf8("frame_6")) + self.gridLayout_22 = QtGui.QGridLayout(self.frame_6) + self.gridLayout_22.setObjectName(_fromUtf8("gridLayout_22")) + self.specHeisGraphClear = QtGui.QPushButton(self.frame_6) + self.specHeisGraphClear.setObjectName(_fromUtf8("specHeisGraphClear")) + self.gridLayout_22.addWidget(self.specHeisGraphClear, 0, 1, 1, 1) + self.specHeisOpOk = QtGui.QPushButton(self.frame_6) + self.specHeisOpOk.setObjectName(_fromUtf8("specHeisOpOk")) + self.gridLayout_22.addWidget(self.specHeisOpOk, 0, 0, 1, 1) + self.gridLayout_23.addWidget(self.frame_6, 1, 0, 1, 1) + self.tabWidgetSpectraHeis = QtGui.QTabWidget(self.tabSpectraHeis) + self.tabWidgetSpectraHeis.setObjectName(_fromUtf8("tabWidgetSpectraHeis")) + self.tabopSpectraHeis = QtGui.QWidget() + self.tabopSpectraHeis.setObjectName(_fromUtf8("tabopSpectraHeis")) + self.gridLayout_21 = QtGui.QGridLayout(self.tabopSpectraHeis) + self.gridLayout_21.setObjectName(_fromUtf8("gridLayout_21")) + spacerItem21 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_21.addItem(spacerItem21, 0, 1, 1, 1) + self.specHeisOpCobIncInt = QtGui.QComboBox(self.tabopSpectraHeis) + self.specHeisOpCobIncInt.setObjectName(_fromUtf8("specHeisOpCobIncInt")) + self.specHeisOpCobIncInt.addItem(_fromUtf8("")) + self.gridLayout_21.addWidget(self.specHeisOpCobIncInt, 1, 0, 1, 1) + self.specHeisOpCebIncoherent = QtGui.QCheckBox(self.tabopSpectraHeis) + self.specHeisOpCebIncoherent.setObjectName(_fromUtf8("specHeisOpCebIncoherent")) + self.gridLayout_21.addWidget(self.specHeisOpCebIncoherent, 0, 0, 1, 1) + self.specHeisOpIncoherent = QtGui.QLineEdit(self.tabopSpectraHeis) + self.specHeisOpIncoherent.setObjectName(_fromUtf8("specHeisOpIncoherent")) + self.gridLayout_21.addWidget(self.specHeisOpIncoherent, 1, 1, 1, 1) + spacerItem22 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_21.addItem(spacerItem22, 2, 0, 1, 1) + self.tabWidgetSpectraHeis.addTab(self.tabopSpectraHeis, _fromUtf8("")) + self.tabgraphSpectraHeis = QtGui.QWidget() + self.tabgraphSpectraHeis.setObjectName(_fromUtf8("tabgraphSpectraHeis")) + self.gridLayout_20 = QtGui.QGridLayout(self.tabgraphSpectraHeis) + self.gridLayout_20.setObjectName(_fromUtf8("gridLayout_20")) + self.label_54 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_54.setObjectName(_fromUtf8("label_54")) + self.gridLayout_20.addWidget(self.label_54, 1, 0, 1, 1) + self.specHeisGraphToolPath = QtGui.QToolButton(self.tabgraphSpectraHeis) + self.specHeisGraphToolPath.setObjectName(_fromUtf8("specHeisGraphToolPath")) + self.gridLayout_20.addWidget(self.specHeisGraphToolPath, 0, 6, 1, 1) + self.specHeisGraphCebRTIplot = QtGui.QCheckBox(self.tabgraphSpectraHeis) + self.specHeisGraphCebRTIplot.setText(_fromUtf8("")) + self.specHeisGraphCebRTIplot.setObjectName(_fromUtf8("specHeisGraphCebRTIplot")) + self.gridLayout_20.addWidget(self.specHeisGraphCebRTIplot, 4, 2, 1, 1) + self.label_62 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_62.setObjectName(_fromUtf8("label_62")) + self.gridLayout_20.addWidget(self.label_62, 7, 0, 1, 1) + self.label_63 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_63.setObjectName(_fromUtf8("label_63")) + self.gridLayout_20.addWidget(self.label_63, 8, 0, 1, 1) + self.label_64 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_64.setObjectName(_fromUtf8("label_64")) + self.gridLayout_20.addWidget(self.label_64, 9, 0, 1, 1) + self.label_65 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_65.setObjectName(_fromUtf8("label_65")) + self.gridLayout_20.addWidget(self.label_65, 10, 0, 1, 1) + spacerItem23 = QtGui.QSpacerItem(134, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_20.addItem(spacerItem23, 11, 0, 1, 2) + self.specHeisGgraphftpratio = QtGui.QLineEdit(self.tabgraphSpectraHeis) + self.specHeisGgraphftpratio.setObjectName(_fromUtf8("specHeisGgraphftpratio")) + self.gridLayout_20.addWidget(self.specHeisGgraphftpratio, 10, 1, 1, 6) + self.specHeisGraphftpRTIplot = QtGui.QCheckBox(self.tabgraphSpectraHeis) + self.specHeisGraphftpRTIplot.setText(_fromUtf8("")) + self.specHeisGraphftpRTIplot.setObjectName(_fromUtf8("specHeisGraphftpRTIplot")) + self.gridLayout_20.addWidget(self.specHeisGraphftpRTIplot, 4, 6, 1, 1) + self.specHeisGgraphTminTmax = QtGui.QLineEdit(self.tabgraphSpectraHeis) + self.specHeisGgraphTminTmax.setObjectName(_fromUtf8("specHeisGgraphTminTmax")) + self.gridLayout_20.addWidget(self.specHeisGgraphTminTmax, 8, 1, 1, 6) + self.label_60 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_60.setObjectName(_fromUtf8("label_60")) + self.gridLayout_20.addWidget(self.label_60, 5, 0, 1, 1) + self.label_61 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_61.setObjectName(_fromUtf8("label_61")) + self.gridLayout_20.addWidget(self.label_61, 6, 0, 1, 1) + self.specHeisGraphPrefix = QtGui.QLineEdit(self.tabgraphSpectraHeis) + self.specHeisGraphPrefix.setObjectName(_fromUtf8("specHeisGraphPrefix")) + self.gridLayout_20.addWidget(self.specHeisGraphPrefix, 1, 1, 1, 6) + self.label_56 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_56.setObjectName(_fromUtf8("label_56")) + self.gridLayout_20.addWidget(self.label_56, 2, 4, 1, 1) + self.label_57 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_57.setObjectName(_fromUtf8("label_57")) + self.gridLayout_20.addWidget(self.label_57, 2, 6, 1, 1) + self.label_58 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_58.setObjectName(_fromUtf8("label_58")) + self.gridLayout_20.addWidget(self.label_58, 3, 0, 1, 1) + self.specHeisGraphCebSpectraplot = QtGui.QCheckBox(self.tabgraphSpectraHeis) + self.specHeisGraphCebSpectraplot.setText(_fromUtf8("")) + self.specHeisGraphCebSpectraplot.setObjectName(_fromUtf8("specHeisGraphCebSpectraplot")) + self.gridLayout_20.addWidget(self.specHeisGraphCebSpectraplot, 3, 2, 1, 1) + self.specHeisGgraphYminYmax = QtGui.QLineEdit(self.tabgraphSpectraHeis) + self.specHeisGgraphYminYmax.setObjectName(_fromUtf8("specHeisGgraphYminYmax")) + self.gridLayout_20.addWidget(self.specHeisGgraphYminYmax, 7, 1, 1, 6) + self.label_53 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_53.setObjectName(_fromUtf8("label_53")) + self.gridLayout_20.addWidget(self.label_53, 0, 0, 1, 1) + self.label_55 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_55.setObjectName(_fromUtf8("label_55")) + self.gridLayout_20.addWidget(self.label_55, 2, 2, 1, 1) + self.specHeisGraphSaveRTIplot = QtGui.QCheckBox(self.tabgraphSpectraHeis) + self.specHeisGraphSaveRTIplot.setText(_fromUtf8("")) + self.specHeisGraphSaveRTIplot.setObjectName(_fromUtf8("specHeisGraphSaveRTIplot")) + self.gridLayout_20.addWidget(self.specHeisGraphSaveRTIplot, 4, 4, 1, 1) + spacerItem24 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_20.addItem(spacerItem24, 2, 3, 1, 1) + self.specHeisGgraphXminXmax = QtGui.QLineEdit(self.tabgraphSpectraHeis) + self.specHeisGgraphXminXmax.setObjectName(_fromUtf8("specHeisGgraphXminXmax")) + self.gridLayout_20.addWidget(self.specHeisGgraphXminXmax, 6, 1, 1, 6) + self.specHeisGgraphChannelList = QtGui.QLineEdit(self.tabgraphSpectraHeis) + self.specHeisGgraphChannelList.setObjectName(_fromUtf8("specHeisGgraphChannelList")) + self.gridLayout_20.addWidget(self.specHeisGgraphChannelList, 5, 1, 1, 6) + self.specHeisGgraphTimeRange = QtGui.QLineEdit(self.tabgraphSpectraHeis) + self.specHeisGgraphTimeRange.setObjectName(_fromUtf8("specHeisGgraphTimeRange")) + self.gridLayout_20.addWidget(self.specHeisGgraphTimeRange, 9, 1, 1, 6) + spacerItem25 = QtGui.QSpacerItem(106, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_20.addItem(spacerItem25, 11, 3, 1, 3) + self.specHeisGraphSaveSpectra = QtGui.QCheckBox(self.tabgraphSpectraHeis) + self.specHeisGraphSaveSpectra.setText(_fromUtf8("")) + self.specHeisGraphSaveSpectra.setObjectName(_fromUtf8("specHeisGraphSaveSpectra")) + self.gridLayout_20.addWidget(self.specHeisGraphSaveSpectra, 3, 4, 1, 1) + self.specHeisGraphftpSpectra = QtGui.QCheckBox(self.tabgraphSpectraHeis) + self.specHeisGraphftpSpectra.setText(_fromUtf8("")) + self.specHeisGraphftpSpectra.setObjectName(_fromUtf8("specHeisGraphftpSpectra")) + self.gridLayout_20.addWidget(self.specHeisGraphftpSpectra, 3, 6, 1, 1) + self.label_59 = QtGui.QLabel(self.tabgraphSpectraHeis) + self.label_59.setObjectName(_fromUtf8("label_59")) + self.gridLayout_20.addWidget(self.label_59, 4, 0, 1, 1) + spacerItem26 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout_20.addItem(spacerItem26, 2, 5, 1, 1) + self.specHeisGraphPath = QtGui.QLineEdit(self.tabgraphSpectraHeis) + self.specHeisGraphPath.setObjectName(_fromUtf8("specHeisGraphPath")) + self.gridLayout_20.addWidget(self.specHeisGraphPath, 0, 1, 1, 5) + self.tabWidgetSpectraHeis.addTab(self.tabgraphSpectraHeis, _fromUtf8("")) + self.taboutputSpectraHeis = QtGui.QWidget() + self.taboutputSpectraHeis.setObjectName(_fromUtf8("taboutputSpectraHeis")) + self.gridLayout_19 = QtGui.QGridLayout(self.taboutputSpectraHeis) + self.gridLayout_19.setObjectName(_fromUtf8("gridLayout_19")) + self.label_67 = QtGui.QLabel(self.taboutputSpectraHeis) + self.label_67.setObjectName(_fromUtf8("label_67")) + self.gridLayout_19.addWidget(self.label_67, 1, 0, 1, 1) + self.label_68 = QtGui.QLabel(self.taboutputSpectraHeis) + self.label_68.setObjectName(_fromUtf8("label_68")) + self.gridLayout_19.addWidget(self.label_68, 2, 0, 1, 2) + self.label_66 = QtGui.QLabel(self.taboutputSpectraHeis) + self.label_66.setObjectName(_fromUtf8("label_66")) + self.gridLayout_19.addWidget(self.label_66, 0, 0, 1, 1) + spacerItem27 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout_19.addItem(spacerItem27, 4, 0, 1, 1) + self.specHeisOutputToolPath = QtGui.QToolButton(self.taboutputSpectraHeis) + self.specHeisOutputToolPath.setObjectName(_fromUtf8("specHeisOutputToolPath")) + self.gridLayout_19.addWidget(self.specHeisOutputToolPath, 1, 4, 1, 1) + self.specHeisOutputPath = QtGui.QLineEdit(self.taboutputSpectraHeis) + self.specHeisOutputPath.setObjectName(_fromUtf8("specHeisOutputPath")) + self.gridLayout_19.addWidget(self.specHeisOutputPath, 1, 3, 1, 1) + self.specHeisOutputComdata = QtGui.QComboBox(self.taboutputSpectraHeis) + self.specHeisOutputComdata.setObjectName(_fromUtf8("specHeisOutputComdata")) + self.specHeisOutputComdata.addItem(_fromUtf8("")) + self.gridLayout_19.addWidget(self.specHeisOutputComdata, 0, 3, 1, 2) + self.label_69 = QtGui.QLabel(self.taboutputSpectraHeis) + self.label_69.setObjectName(_fromUtf8("label_69")) + self.gridLayout_19.addWidget(self.label_69, 3, 0, 1, 2) + self.specHeisOutputblocksperfile = QtGui.QLineEdit(self.taboutputSpectraHeis) + self.specHeisOutputblocksperfile.setObjectName(_fromUtf8("specHeisOutputblocksperfile")) + self.gridLayout_19.addWidget(self.specHeisOutputblocksperfile, 2, 3, 1, 1) + self.specHeisOutputMetada = QtGui.QLineEdit(self.taboutputSpectraHeis) + self.specHeisOutputMetada.setObjectName(_fromUtf8("specHeisOutputMetada")) + self.gridLayout_19.addWidget(self.specHeisOutputMetada, 3, 3, 1, 1) + self.specHeisOutputMetadaToolPath = QtGui.QToolButton(self.taboutputSpectraHeis) + self.specHeisOutputMetadaToolPath.setObjectName(_fromUtf8("specHeisOutputMetadaToolPath")) + self.gridLayout_19.addWidget(self.specHeisOutputMetadaToolPath, 3, 4, 1, 1) + self.tabWidgetSpectraHeis.addTab(self.taboutputSpectraHeis, _fromUtf8("")) + self.gridLayout_23.addWidget(self.tabWidgetSpectraHeis, 0, 0, 1, 1) + self.tabWidgetProject.addTab(self.tabSpectraHeis, _fromUtf8("")) self.tabCorrelation = QtGui.QWidget() self.tabCorrelation.setObjectName(_fromUtf8("tabCorrelation")) self.gridLayout_13 = QtGui.QGridLayout(self.tabCorrelation) @@ -644,13 +925,13 @@ class Ui_MainWindow(object): self.treeProjectProperties.setObjectName(_fromUtf8("treeProjectProperties")) self.gridLayout_8.addWidget(self.treeProjectProperties, 0, 0, 1, 1) self.tabWidget.addTab(self.tabProjectProperty, _fromUtf8("")) - self.gridLayout_10.addWidget(self.splitter_2, 0, 0, 1, 1) + self.gridLayout_16.addWidget(self.splitter_2, 1, 0, 1, 1) MainWindow.setCentralWidget(self.centralWidget) self.toolBar = QtGui.QToolBar(MainWindow) self.toolBar.setObjectName(_fromUtf8("toolBar")) MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) self.menuBar = QtGui.QMenuBar(MainWindow) - self.menuBar.setGeometry(QtCore.QRect(0, 0, 780, 21)) + self.menuBar.setGeometry(QtCore.QRect(0, 0, 1065, 25)) self.menuBar.setObjectName(_fromUtf8("menuBar")) self.menuProject = QtGui.QMenu(self.menuBar) self.menuProject.setObjectName(_fromUtf8("menuProject")) @@ -662,60 +943,86 @@ class Ui_MainWindow(object): self.menuHelp.setObjectName(_fromUtf8("menuHelp")) MainWindow.setMenuBar(self.menuBar) self.actionOpen = QtGui.QAction(MainWindow) + icon = QtGui.QIcon() + icon.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/open.gif")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionOpen.setIcon(icon) self.actionOpen.setObjectName(_fromUtf8("actionOpen")) self.actionCreate = QtGui.QAction(MainWindow) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/project.gif")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionCreate.setIcon(icon1) self.actionCreate.setObjectName(_fromUtf8("actionCreate")) self.actionSave = QtGui.QAction(MainWindow) + icon2 = QtGui.QIcon() + icon2.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/saveicon.jpeg")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionSave.setIcon(icon2) self.actionSave.setObjectName(_fromUtf8("actionSave")) self.actionClose = QtGui.QAction(MainWindow) self.actionClose.setObjectName(_fromUtf8("actionClose")) self.actionStart = QtGui.QAction(MainWindow) + icon3 = QtGui.QIcon() + icon3.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/startServer.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionStart.setIcon(icon3) self.actionStart.setObjectName(_fromUtf8("actionStart")) self.actionPause = QtGui.QAction(MainWindow) self.actionPause.setObjectName(_fromUtf8("actionPause")) self.actionAbout = QtGui.QAction(MainWindow) self.actionAbout.setObjectName(_fromUtf8("actionAbout")) self.actionOpenToolbar = QtGui.QAction(MainWindow) - icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap(_fromUtf8("figure/open.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionOpenToolbar.setIcon(icon) self.actionOpenToolbar.setObjectName(_fromUtf8("actionOpenToolbar")) self.actionCreateToolbar = QtGui.QAction(MainWindow) - icon1 = QtGui.QIcon() - icon1.addPixmap(QtGui.QPixmap(_fromUtf8("figure/create_class_obj.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionCreateToolbar.setIcon(icon1) self.actionCreateToolbar.setObjectName(_fromUtf8("actionCreateToolbar")) self.actionSaveToolbar = QtGui.QAction(MainWindow) - icon2 = QtGui.QIcon() - icon2.addPixmap(QtGui.QPixmap(_fromUtf8("figure/save.gif")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionSaveToolbar.setIcon(icon2) self.actionSaveToolbar.setObjectName(_fromUtf8("actionSaveToolbar")) self.actionStarToolbar = QtGui.QAction(MainWindow) - icon3 = QtGui.QIcon() - icon3.addPixmap(QtGui.QPixmap(_fromUtf8("figure/startServer.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionStarToolbar.setIcon(icon3) self.actionStarToolbar.setObjectName(_fromUtf8("actionStarToolbar")) self.actionStopToolbar = QtGui.QAction(MainWindow) icon4 = QtGui.QIcon() - icon4.addPixmap(QtGui.QPixmap(_fromUtf8("figure/stopServer.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + icon4.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/stopServer.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionStopToolbar.setIcon(icon4) self.actionStopToolbar.setObjectName(_fromUtf8("actionStopToolbar")) + self.actionPauseToolbar = QtGui.QAction(MainWindow) + icon5 = QtGui.QIcon() + icon5.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/pause.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionPause.setIcon(icon5) + self.actionPauseToolbar.setIcon(icon5) + self.actionPauseToolbar.setObjectName(_fromUtf8("actionPauseToolbar")) + self.actionAddPU = QtGui.QAction(MainWindow) + icon6 = QtGui.QIcon() + icon6.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/add_PU.gif")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionAddPU.setIcon(icon6) + self.actionAddPU.setObjectName(_fromUtf8("actionAddPU")) + self.actionFTP = QtGui.QAction(MainWindow) + self.actionFTP.setObjectName(_fromUtf8("actionFTP")) self.toolBar.addAction(self.actionOpenToolbar) self.toolBar.addSeparator() self.toolBar.addAction(self.actionCreateToolbar) self.toolBar.addSeparator() + self.toolBar.addAction(self.actionAddPU) + self.toolBar.addSeparator() self.toolBar.addAction(self.actionSaveToolbar) self.toolBar.addSeparator() self.toolBar.addAction(self.actionStarToolbar) self.toolBar.addSeparator() + self.toolBar.addAction(self.actionPauseToolbar) + self.toolBar.addSeparator() self.toolBar.addAction(self.actionStopToolbar) self.toolBar.addSeparator() + self.a=1 + self.actionPauseToolbar.triggered.connect(self.changeIcon) + + self.menuProject.addAction(self.actionOpen) self.menuProject.addAction(self.actionCreate) self.menuProject.addAction(self.actionSave) self.menuProject.addAction(self.actionClose) self.menuRun.addAction(self.actionStart) self.menuRun.addAction(self.actionPause) + self.menuOptions.addAction(self.actionFTP) self.menuHelp.addAction(self.actionAbout) self.menuBar.addAction(self.menuProject.menuAction()) self.menuBar.addAction(self.menuRun.menuAction()) @@ -726,157 +1033,215 @@ class Ui_MainWindow(object): self.tabWidgetProject.setCurrentIndex(0) self.tabWidgetVoltage.setCurrentIndex(0) self.tabWidgetSpectra.setCurrentIndex(0) + self.tabWidgetSpectraHeis.setCurrentIndex(0) self.tabWidget_2.setCurrentIndex(0) self.tabConsole.setCurrentIndex(0) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) + def changeIcon(self): + if self.a==1: + icon6 = QtGui.QIcon() + icon6.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/pausered.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionPauseToolbar.setIcon(icon6) + self.a+=1 + return 0 + if self.a==2: + icon5 = QtGui.QIcon() + icon5.addPixmap(QtGui.QPixmap(_fromUtf8("schainpy/gui/figure/pause.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionPauseToolbar.setIcon(icon5) + self.a-=1 + return 0 + def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) - self.label.setText(QtGui.QApplication.translate("MainWindow", "Project Name :", None, QtGui.QApplication.UnicodeUTF8)) - self.label_11.setText(QtGui.QApplication.translate("MainWindow", "DataType :", None, QtGui.QApplication.UnicodeUTF8)) - self.label_15.setText(QtGui.QApplication.translate("MainWindow", "DataPath :", None, QtGui.QApplication.UnicodeUTF8)) - self.label_23.setText(QtGui.QApplication.translate("MainWindow", "Read Mode:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_27.setText(QtGui.QApplication.translate("MainWindow", "Star Date:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_28.setText(QtGui.QApplication.translate("MainWindow", "End Date:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Start Time:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_3.setText(QtGui.QApplication.translate("MainWindow", "End Time:", None, QtGui.QApplication.UnicodeUTF8)) - self.proOk.setText(QtGui.QApplication.translate("MainWindow", "Ok", None, QtGui.QApplication.UnicodeUTF8)) - self.proClear.setText(QtGui.QApplication.translate("MainWindow", "Clear", None, QtGui.QApplication.UnicodeUTF8)) - self.proComDataType.setItemText(0, QtGui.QApplication.translate("MainWindow", "Voltage", None, QtGui.QApplication.UnicodeUTF8)) - self.proComDataType.setItemText(1, QtGui.QApplication.translate("MainWindow", "Spectra", None, QtGui.QApplication.UnicodeUTF8)) - self.proComReadMode.setItemText(0, QtGui.QApplication.translate("MainWindow", "Off Line", None, QtGui.QApplication.UnicodeUTF8)) - self.proComReadMode.setItemText(1, QtGui.QApplication.translate("MainWindow", "On Line", None, QtGui.QApplication.UnicodeUTF8)) - self.label_30.setText(QtGui.QApplication.translate("MainWindow", "Description:", None, QtGui.QApplication.UnicodeUTF8)) - self.proToolPath.setText(QtGui.QApplication.translate("MainWindow", "...", None, QtGui.QApplication.UnicodeUTF8)) - self.label_32.setText(QtGui.QApplication.translate("MainWindow", "Walk :", None, QtGui.QApplication.UnicodeUTF8)) - self.proComWalk.setItemText(0, QtGui.QApplication.translate("MainWindow", "Search 0", None, QtGui.QApplication.UnicodeUTF8)) - self.proComWalk.setItemText(1, QtGui.QApplication.translate("MainWindow", "Search 1", None, QtGui.QApplication.UnicodeUTF8)) - self.label_33.setText(QtGui.QApplication.translate("MainWindow", "Delay:", None, QtGui.QApplication.UnicodeUTF8)) - self.proLoadButton.setText(QtGui.QApplication.translate("MainWindow", "Load", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabProject), QtGui.QApplication.translate("MainWindow", "Project", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpCebChannels.setText(QtGui.QApplication.translate("MainWindow", "Select Channels", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComChannels.setItemText(0, QtGui.QApplication.translate("MainWindow", "Value", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComChannels.setItemText(1, QtGui.QApplication.translate("MainWindow", "Index", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpCebHeights.setText(QtGui.QApplication.translate("MainWindow", "Select Heights", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComHeights.setItemText(0, QtGui.QApplication.translate("MainWindow", "Value", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComHeights.setItemText(1, QtGui.QApplication.translate("MainWindow", "Index", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpCebFilter.setText(QtGui.QApplication.translate("MainWindow", "Filter", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpCebProfile.setText(QtGui.QApplication.translate("MainWindow", "Profile Selector", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComProfile.setItemText(0, QtGui.QApplication.translate("MainWindow", "Profile List", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComProfile.setItemText(1, QtGui.QApplication.translate("MainWindow", "Profile Range List", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpCebDecodification.setText(QtGui.QApplication.translate("MainWindow", "Decodification", None, QtGui.QApplication.UnicodeUTF8)) - self.label_4.setText(QtGui.QApplication.translate("MainWindow", "Code", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComCode.setItemText(0, QtGui.QApplication.translate("MainWindow", "Barker 3", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComCode.setItemText(1, QtGui.QApplication.translate("MainWindow", "Barker 4", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComCode.setItemText(2, QtGui.QApplication.translate("MainWindow", "Barker 5", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComCode.setItemText(3, QtGui.QApplication.translate("MainWindow", "Barker 7", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComCode.setItemText(4, QtGui.QApplication.translate("MainWindow", "Barker 11", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComCode.setItemText(5, QtGui.QApplication.translate("MainWindow", "Barker 13", None, QtGui.QApplication.UnicodeUTF8)) - self.label_5.setText(QtGui.QApplication.translate("MainWindow", "Mode", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComMode.setItemText(0, QtGui.QApplication.translate("MainWindow", "Time", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComMode.setItemText(1, QtGui.QApplication.translate("MainWindow", "Freq 1", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpComMode.setItemText(2, QtGui.QApplication.translate("MainWindow", "Freq 2", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpOk.setText(QtGui.QApplication.translate("MainWindow", "Ok", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpClear.setText(QtGui.QApplication.translate("MainWindow", "Clear", None, QtGui.QApplication.UnicodeUTF8)) - self.volOpCebCohInt.setText(QtGui.QApplication.translate("MainWindow", "Coherent Integration", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetVoltage.setTabText(self.tabWidgetVoltage.indexOf(self.tabopVoltage), QtGui.QApplication.translate("MainWindow", "Operation", None, QtGui.QApplication.UnicodeUTF8)) - self.label_12.setText(QtGui.QApplication.translate("MainWindow", "Path", None, QtGui.QApplication.UnicodeUTF8)) - self.volGraphClear.setText(QtGui.QApplication.translate("MainWindow", "Clear", None, QtGui.QApplication.UnicodeUTF8)) - self.volGraphOk.setText(QtGui.QApplication.translate("MainWindow", "Ok", None, QtGui.QApplication.UnicodeUTF8)) - self.label_13.setText(QtGui.QApplication.translate("MainWindow", "Prefix", None, QtGui.QApplication.UnicodeUTF8)) - self.volGraphToolPath.setText(QtGui.QApplication.translate("MainWindow", "...", None, QtGui.QApplication.UnicodeUTF8)) - self.label_50.setText(QtGui.QApplication.translate("MainWindow", "Save", None, QtGui.QApplication.UnicodeUTF8)) - self.label_8.setText(QtGui.QApplication.translate("MainWindow", "Channel List", None, QtGui.QApplication.UnicodeUTF8)) - self.label_49.setText(QtGui.QApplication.translate("MainWindow", "Show", None, QtGui.QApplication.UnicodeUTF8)) - self.label_52.setText(QtGui.QApplication.translate("MainWindow", "Height range", None, QtGui.QApplication.UnicodeUTF8)) - self.label_14.setText(QtGui.QApplication.translate("MainWindow", "Scope", None, QtGui.QApplication.UnicodeUTF8)) - self.label_51.setText(QtGui.QApplication.translate("MainWindow", "Freq/Vel", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetVoltage.setTabText(self.tabWidgetVoltage.indexOf(self.tabgraphVoltage), QtGui.QApplication.translate("MainWindow", "Graphics", None, QtGui.QApplication.UnicodeUTF8)) - self.label_36.setText(QtGui.QApplication.translate("MainWindow", "Dataformat:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_37.setText(QtGui.QApplication.translate("MainWindow", "Path:", None, QtGui.QApplication.UnicodeUTF8)) - self.volOutputToolPath.setText(QtGui.QApplication.translate("MainWindow", "...", None, QtGui.QApplication.UnicodeUTF8)) - self.label_38.setText(QtGui.QApplication.translate("MainWindow", "Sufix:", None, QtGui.QApplication.UnicodeUTF8)) - self.volOutputComData.setItemText(0, QtGui.QApplication.translate("MainWindow", ".rawdata", None, QtGui.QApplication.UnicodeUTF8)) - self.volOutputComData.setItemText(1, QtGui.QApplication.translate("MainWindow", ".fits", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetVoltage.setTabText(self.tabWidgetVoltage.indexOf(self.taboutputVoltage), QtGui.QApplication.translate("MainWindow", "Output", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabVoltage), QtGui.QApplication.translate("MainWindow", "Voltage", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpCebCrossSpectra.setText(QtGui.QApplication.translate("MainWindow", "Select Cross Spectra", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpComChannel.setItemText(0, QtGui.QApplication.translate("MainWindow", "Value", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpComChannel.setItemText(1, QtGui.QApplication.translate("MainWindow", "Index", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpComHeights.setItemText(0, QtGui.QApplication.translate("MainWindow", "Value", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpComHeights.setItemText(1, QtGui.QApplication.translate("MainWindow", "Index", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpCebIncoherent.setText(QtGui.QApplication.translate("MainWindow", "Incoherent Integration", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpCebRemoveDC.setText(QtGui.QApplication.translate("MainWindow", "Remove DC", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpCebRemoveInterference.setText(QtGui.QApplication.translate("MainWindow", "Remove Interference", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpOk.setText(QtGui.QApplication.translate("MainWindow", "Ok", None, QtGui.QApplication.UnicodeUTF8)) - self.pushButton_8.setText(QtGui.QApplication.translate("MainWindow", "Clear", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpCebHeights.setText(QtGui.QApplication.translate("MainWindow", "Select Heights", None, QtGui.QApplication.UnicodeUTF8)) - self.specOpCebChannel.setText(QtGui.QApplication.translate("MainWindow", "Select Channel", None, QtGui.QApplication.UnicodeUTF8)) - self.label_31.setText(QtGui.QApplication.translate("MainWindow", "x-y pairs", None, QtGui.QApplication.UnicodeUTF8)) - self.label_26.setText(QtGui.QApplication.translate("MainWindow", "nFFTPoints", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetSpectra.setTabText(self.tabWidgetSpectra.indexOf(self.tabopSpectra), QtGui.QApplication.translate("MainWindow", "Operation", None, QtGui.QApplication.UnicodeUTF8)) - self.label_43.setText(QtGui.QApplication.translate("MainWindow", "Show", None, QtGui.QApplication.UnicodeUTF8)) - self.label_42.setText(QtGui.QApplication.translate("MainWindow", "RTI Plot", None, QtGui.QApplication.UnicodeUTF8)) - self.label_16.setText(QtGui.QApplication.translate("MainWindow", "Height range:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_17.setText(QtGui.QApplication.translate("MainWindow", "Dbs range:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_18.setText(QtGui.QApplication.translate("MainWindow", "magnitud [0-1]", None, QtGui.QApplication.UnicodeUTF8)) - self.label_21.setText(QtGui.QApplication.translate("MainWindow", "Phase range", None, QtGui.QApplication.UnicodeUTF8)) - self.specGraphOk.setText(QtGui.QApplication.translate("MainWindow", "Ok", None, QtGui.QApplication.UnicodeUTF8)) - self.specGraphClear.setText(QtGui.QApplication.translate("MainWindow", "Clear", None, QtGui.QApplication.UnicodeUTF8)) - self.label_24.setText(QtGui.QApplication.translate("MainWindow", "Path", None, QtGui.QApplication.UnicodeUTF8)) - self.label_46.setText(QtGui.QApplication.translate("MainWindow", "Power Profile", None, QtGui.QApplication.UnicodeUTF8)) - self.label_40.setText(QtGui.QApplication.translate("MainWindow", "Spectra Plot", None, QtGui.QApplication.UnicodeUTF8)) - self.label_22.setText(QtGui.QApplication.translate("MainWindow", "Freq/Vel:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_45.setText(QtGui.QApplication.translate("MainWindow", "RTI from Noise", None, QtGui.QApplication.UnicodeUTF8)) - self.label_41.setText(QtGui.QApplication.translate("MainWindow", "Cross Spectra Plot", None, QtGui.QApplication.UnicodeUTF8)) - self.label_44.setText(QtGui.QApplication.translate("MainWindow", "Coherence Map", None, QtGui.QApplication.UnicodeUTF8)) - self.label_47.setText(QtGui.QApplication.translate("MainWindow", "Save", None, QtGui.QApplication.UnicodeUTF8)) - self.specGraphToolPath.setText(QtGui.QApplication.translate("MainWindow", "...", None, QtGui.QApplication.UnicodeUTF8)) - self.label_20.setText(QtGui.QApplication.translate("MainWindow", "Time Range", None, QtGui.QApplication.UnicodeUTF8)) - self.label_19.setText(QtGui.QApplication.translate("MainWindow", "Phase", None, QtGui.QApplication.UnicodeUTF8)) - self.label_48.setText(QtGui.QApplication.translate("MainWindow", "CCF", None, QtGui.QApplication.UnicodeUTF8)) - self.label_25.setText(QtGui.QApplication.translate("MainWindow", "Prefix", None, QtGui.QApplication.UnicodeUTF8)) - self.label_6.setText(QtGui.QApplication.translate("MainWindow", "Channel List", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetSpectra.setTabText(self.tabWidgetSpectra.indexOf(self.tabgraphSpectra), QtGui.QApplication.translate("MainWindow", "Graphics", None, QtGui.QApplication.UnicodeUTF8)) - self.label_39.setText(QtGui.QApplication.translate("MainWindow", "Data Format:", None, QtGui.QApplication.UnicodeUTF8)) - self.specOutputComData.setItemText(0, QtGui.QApplication.translate("MainWindow", ".pdata", None, QtGui.QApplication.UnicodeUTF8)) - self.specOutputComData.setItemText(1, QtGui.QApplication.translate("MainWindow", ".fits", None, QtGui.QApplication.UnicodeUTF8)) - self.label_34.setText(QtGui.QApplication.translate("MainWindow", "Path:", None, QtGui.QApplication.UnicodeUTF8)) - self.specOutputToolPath.setText(QtGui.QApplication.translate("MainWindow", "...", None, QtGui.QApplication.UnicodeUTF8)) - self.label_35.setText(QtGui.QApplication.translate("MainWindow", "Sufix:", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetSpectra.setTabText(self.tabWidgetSpectra.indexOf(self.taboutputSpectra), QtGui.QApplication.translate("MainWindow", "Output", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabSpectra), QtGui.QApplication.translate("MainWindow", "Spectra", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tabopCorrelation), QtGui.QApplication.translate("MainWindow", "Operation", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tabopCorrelation1), QtGui.QApplication.translate("MainWindow", "Graphics", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabCorrelation), QtGui.QApplication.translate("MainWindow", "Correlation", None, QtGui.QApplication.UnicodeUTF8)) - self.tabConsole.setTabText(self.tabConsole.indexOf(self.tab_5), QtGui.QApplication.translate("MainWindow", "Console", None, QtGui.QApplication.UnicodeUTF8)) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabProjectProperty), QtGui.QApplication.translate("MainWindow", "Project Property", None, QtGui.QApplication.UnicodeUTF8)) - self.toolBar.setWindowTitle(QtGui.QApplication.translate("MainWindow", "toolBar", None, QtGui.QApplication.UnicodeUTF8)) - self.menuProject.setTitle(QtGui.QApplication.translate("MainWindow", "Project", None, QtGui.QApplication.UnicodeUTF8)) - self.menuRun.setTitle(QtGui.QApplication.translate("MainWindow", "Run", None, QtGui.QApplication.UnicodeUTF8)) - self.menuOptions.setTitle(QtGui.QApplication.translate("MainWindow", "Options", None, QtGui.QApplication.UnicodeUTF8)) - self.menuHelp.setTitle(QtGui.QApplication.translate("MainWindow", "Help", None, QtGui.QApplication.UnicodeUTF8)) - self.actionOpen.setText(QtGui.QApplication.translate("MainWindow", "Open", None, QtGui.QApplication.UnicodeUTF8)) - self.actionCreate.setText(QtGui.QApplication.translate("MainWindow", "Create", None, QtGui.QApplication.UnicodeUTF8)) - self.actionSave.setText(QtGui.QApplication.translate("MainWindow", "Save", None, QtGui.QApplication.UnicodeUTF8)) - self.actionClose.setText(QtGui.QApplication.translate("MainWindow", "Close", None, QtGui.QApplication.UnicodeUTF8)) - self.actionStart.setText(QtGui.QApplication.translate("MainWindow", "Start", None, QtGui.QApplication.UnicodeUTF8)) - self.actionPause.setText(QtGui.QApplication.translate("MainWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8)) - self.actionAbout.setText(QtGui.QApplication.translate("MainWindow", "About", None, QtGui.QApplication.UnicodeUTF8)) - self.actionOpenToolbar.setText(QtGui.QApplication.translate("MainWindow", "openToolbar", None, QtGui.QApplication.UnicodeUTF8)) - self.actionOpenToolbar.setToolTip(QtGui.QApplication.translate("MainWindow", "Open", None, QtGui.QApplication.UnicodeUTF8)) - self.actionCreateToolbar.setText(QtGui.QApplication.translate("MainWindow", "createToolbar", None, QtGui.QApplication.UnicodeUTF8)) - self.actionCreateToolbar.setToolTip(QtGui.QApplication.translate("MainWindow", "Create", None, QtGui.QApplication.UnicodeUTF8)) - self.actionSaveToolbar.setText(QtGui.QApplication.translate("MainWindow", "saveToolbar", None, QtGui.QApplication.UnicodeUTF8)) - self.actionSaveToolbar.setToolTip(QtGui.QApplication.translate("MainWindow", "Save", None, QtGui.QApplication.UnicodeUTF8)) - self.actionStarToolbar.setText(QtGui.QApplication.translate("MainWindow", "starToolbar", None, QtGui.QApplication.UnicodeUTF8)) - self.actionStarToolbar.setToolTip(QtGui.QApplication.translate("MainWindow", "Start", None, QtGui.QApplication.UnicodeUTF8)) - self.actionStopToolbar.setText(QtGui.QApplication.translate("MainWindow", "stopToolbar", None, QtGui.QApplication.UnicodeUTF8)) - self.actionStopToolbar.setToolTip(QtGui.QApplication.translate("MainWindow", "Stop", None, QtGui.QApplication.UnicodeUTF8)) - - - + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) + self.label.setText(_translate("MainWindow", "Project Name :", None)) + self.label_11.setText(_translate("MainWindow", "DataType :", None)) + self.proComDataType.setItemText(0, _translate("MainWindow", "Voltage", None)) + self.proComDataType.setItemText(1, _translate("MainWindow", "Spectra", None)) + self.proComDataType.setItemText(2, _translate("MainWindow", "Fits", None)) + self.label_15.setText(_translate("MainWindow", "DataPath :", None)) + self.proToolPath.setText(_translate("MainWindow", "...", None)) + self.label_23.setText(_translate("MainWindow", "Read Mode:", None)) + self.proComReadMode.setItemText(0, _translate("MainWindow", "Offline", None)) + self.proComReadMode.setItemText(1, _translate("MainWindow", "Online", None)) + self.label_33.setText(_translate("MainWindow", "Delay:", None)) + self.label_32.setText(_translate("MainWindow", "Walk :", None)) + self.proComWalk.setItemText(0, _translate("MainWindow", "On Files", None)) + self.proComWalk.setItemText(1, _translate("MainWindow", "On Folder", None)) + self.proLoadButton.setText(_translate("MainWindow", "Load", None)) + self.label_10.setText(_translate("MainWindow", "Set:", None)) + self.label_27.setText(_translate("MainWindow", "Star Date:", None)) + self.label_28.setText(_translate("MainWindow", "End Date:", None)) + self.label_2.setText(_translate("MainWindow", "Start Time:", None)) + self.label_3.setText(_translate("MainWindow", "End Time:", None)) + self.label_30.setText(_translate("MainWindow", "Description:", None)) + self.proOk.setText(_translate("MainWindow", "Ok", None)) + self.proClear.setText(_translate("MainWindow", "Clear", None)) + self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabProject), _translate("MainWindow", "Project", None)) + self.volOpOk.setText(_translate("MainWindow", "Ok", None)) + self.volGraphClear.setText(_translate("MainWindow", "Clear", None)) + self.volOpComHeights.setItemText(0, _translate("MainWindow", "Value", None)) + self.volOpComHeights.setItemText(1, _translate("MainWindow", "Index", None)) + self.volOpComChannels.setItemText(0, _translate("MainWindow", "Value", None)) + self.volOpComChannels.setItemText(1, _translate("MainWindow", "Index", None)) + self.volOpCebProfile.setText(_translate("MainWindow", "Profile Selector", None)) + self.volOpComProfile.setItemText(0, _translate("MainWindow", "Profile List", None)) + self.volOpComProfile.setItemText(1, _translate("MainWindow", "Profile Range List", None)) + self.volOpCebDecodification.setText(_translate("MainWindow", "Decoder", None)) + self.volOpCebCohInt.setText(_translate("MainWindow", "Coherent Integration", None)) + self.label_4.setText(_translate("MainWindow", "Code:", None)) + self.volOpCebChannels.setText(_translate("MainWindow", "Select Channels", None)) + self.volOpCebHeights.setText(_translate("MainWindow", "Select Heights", None)) + self.volOpCebFilter.setText(_translate("MainWindow", "Filter", None)) + self.volOpCebRadarfrequency.setText(_translate("MainWindow", "Radar Frequency", None)) + self.label_5.setText(_translate("MainWindow", "Mode:", None)) + self.volOpComCode.setItemText(0, _translate("MainWindow", "Barker 3", None)) + self.volOpComCode.setItemText(1, _translate("MainWindow", "Barker 4", None)) + self.volOpComCode.setItemText(2, _translate("MainWindow", "Barker 5", None)) + self.volOpComCode.setItemText(3, _translate("MainWindow", "Barker 7", None)) + self.volOpComCode.setItemText(4, _translate("MainWindow", "Barker 11", None)) + self.volOpComCode.setItemText(5, _translate("MainWindow", "Barker 13", None)) + self.volOpComCode.setItemText(6, _translate("MainWindow", "Barker 3 + Comp.", None)) + self.volOpComCode.setItemText(7, _translate("MainWindow", "Barker 4 + Comp.", None)) + self.volOpComCode.setItemText(8, _translate("MainWindow", "Barker 5 + Comp.", None)) + self.volOpComCode.setItemText(9, _translate("MainWindow", "Barker 7 + Comp.", None)) + self.volOpComCode.setItemText(10, _translate("MainWindow", "Barker 11+ Comp.", None)) + self.volOpComCode.setItemText(11, _translate("MainWindow", "Barker 13+ Comp.", None)) + self.volOpComCode.setItemText(12, _translate("MainWindow", "Default", None)) + self.volOpComMode.setItemText(0, _translate("MainWindow", "Time", None)) + self.volOpComMode.setItemText(1, _translate("MainWindow", "Freq 1", None)) + self.tabWidgetVoltage.setTabText(self.tabWidgetVoltage.indexOf(self.tabopVoltage), _translate("MainWindow", "Operation", None)) + self.volGraphToolPath.setText(_translate("MainWindow", "...", None)) + self.label_14.setText(_translate("MainWindow", "Scope", None)) + self.label_8.setText(_translate("MainWindow", "Channel List", None)) + self.label_49.setText(_translate("MainWindow", "Show", None)) + self.label_51.setText(_translate("MainWindow", "Freq/Vel", None)) + self.label_12.setText(_translate("MainWindow", "Path :", None)) + self.label_13.setText(_translate("MainWindow", "Prefix:", None)) + self.label_52.setText(_translate("MainWindow", "Height range", None)) + self.label_50.setText(_translate("MainWindow", "Save", None)) + self.tabWidgetVoltage.setTabText(self.tabWidgetVoltage.indexOf(self.tabgraphVoltage), _translate("MainWindow", "Graphics", None)) + self.label_36.setText(_translate("MainWindow", "Type:", None)) + self.label_37.setText(_translate("MainWindow", "Path:", None)) + self.volOutputToolPath.setText(_translate("MainWindow", "...", None)) + self.volOutputComData.setItemText(0, _translate("MainWindow", ".rawdata", None)) + self.label_7.setText(_translate("MainWindow", "Blocks per File : ", None)) + self.label_35.setText(_translate("MainWindow", "Profiles per Block: ", None)) + self.tabWidgetVoltage.setTabText(self.tabWidgetVoltage.indexOf(self.taboutputVoltage), _translate("MainWindow", "Output", None)) + self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabVoltage), _translate("MainWindow", "Voltage", None)) + self.specOpOk.setText(_translate("MainWindow", "Ok", None)) + self.specGraphClear.setText(_translate("MainWindow", "Clear", None)) + self.specOpCebCrossSpectra.setText(_translate("MainWindow", "Select Cross Spectra", None)) + self.specOpComChannel.setItemText(0, _translate("MainWindow", "Value", None)) + self.specOpComChannel.setItemText(1, _translate("MainWindow", "Index", None)) + self.specOpComHeights.setItemText(0, _translate("MainWindow", "Value", None)) + self.specOpComHeights.setItemText(1, _translate("MainWindow", "Index", None)) + self.specOpCebRemoveDC.setText(_translate("MainWindow", "Remove DC", None)) + self.specOpCebHeights.setText(_translate("MainWindow", "Select Heights", None)) + self.specOpCebChannel.setText(_translate("MainWindow", "Select Channel", None)) + self.label_31.setText(_translate("MainWindow", "x-y pairs", None)) + self.label_26.setText(_translate("MainWindow", "nFFTPoints", None)) + self.specOpCebIncoherent.setText(_translate("MainWindow", "Incoherent Integration", None)) + self.specOpCobIncInt.setItemText(0, _translate("MainWindow", "Time Interval", None)) + self.specOpCobIncInt.setItemText(1, _translate("MainWindow", "Profiles", None)) + self.specOpCebRadarfrequency.setText(_translate("MainWindow", "Radar Frequency", None)) + self.label_21.setText(_translate("MainWindow", "Profiles", None)) + self.specOpCebRemoveInt.setText(_translate("MainWindow", "Remove Interference", None)) + self.label_70.setText(_translate("MainWindow", "IppFactor", None)) + self.specOpCebgetNoise.setText(_translate("MainWindow", "Get Noise", None)) + self.specOpComRemoveDC.setItemText(0, _translate("MainWindow", "Mode 1", None)) + self.specOpComRemoveDC.setItemText(1, _translate("MainWindow", "Mode 2", None)) + self.tabWidgetSpectra.setTabText(self.tabWidgetSpectra.indexOf(self.tabopSpectra), _translate("MainWindow", "Operation", None)) + self.label_44.setText(_translate("MainWindow", "Coherence Map", None)) + self.label_20.setText(_translate("MainWindow", "Tmin, Tmax:", None)) + self.label_25.setText(_translate("MainWindow", "Prefix", None)) + self.label_42.setText(_translate("MainWindow", "RTI Plot", None)) + self.label_16.setText(_translate("MainWindow", "Height range", None)) + self.label_17.setText(_translate("MainWindow", "dB range", None)) + self.label_18.setText(_translate("MainWindow", "Magnitud ", None)) + self.label_24.setText(_translate("MainWindow", "Path", None)) + self.label_46.setText(_translate("MainWindow", "Power Profile", None)) + self.label_22.setText(_translate("MainWindow", "Freq/Vel:", None)) + self.label_41.setText(_translate("MainWindow", "Cross Spectra Plot", None)) + self.specGraphToolPath.setText(_translate("MainWindow", "...", None)) + self.label_6.setText(_translate("MainWindow", "Channel List:", None)) + self.label_40.setText(_translate("MainWindow", "Spectra Plot", None)) + self.label_43.setText(_translate("MainWindow", "Show", None)) + self.label_29.setText(_translate("MainWindow", "Wr Period:", None)) + self.label_47.setText(_translate("MainWindow", "Save", None)) + self.label_19.setText(_translate("MainWindow", "ftp", None)) + self.label_45.setText(_translate("MainWindow", "Noise", None)) + self.label_48.setText(_translate("MainWindow", "Time Range:", None)) + self.tabWidgetSpectra.setTabText(self.tabWidgetSpectra.indexOf(self.tabgraphSpectra), _translate("MainWindow", "Graphics", None)) + self.label_39.setText(_translate("MainWindow", "Type:", None)) + self.specOutputComData.setItemText(0, _translate("MainWindow", ".pdata", None)) + self.label_34.setText(_translate("MainWindow", "Path:", None)) + self.specOutputToolPath.setText(_translate("MainWindow", "...", None)) + self.label_9.setText(_translate("MainWindow", "Blocks per File: ", None)) + self.label_38.setText(_translate("MainWindow", "Profile per Block: ", None)) + self.tabWidgetSpectra.setTabText(self.tabWidgetSpectra.indexOf(self.taboutputSpectra), _translate("MainWindow", "Output", None)) + self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabSpectra), _translate("MainWindow", "Spectra", None)) + self.specHeisGraphClear.setText(_translate("MainWindow", "Clear", None)) + self.specHeisOpOk.setText(_translate("MainWindow", "Ok", None)) + self.specHeisOpCobIncInt.setItemText(0, _translate("MainWindow", "Time Interval", None)) + self.specHeisOpCebIncoherent.setText(_translate("MainWindow", "Incoherent Intergration", None)) + self.tabWidgetSpectraHeis.setTabText(self.tabWidgetSpectraHeis.indexOf(self.tabopSpectraHeis), _translate("MainWindow", "Operation", None)) + self.label_54.setText(_translate("MainWindow", "Prefix", None)) + self.specHeisGraphToolPath.setText(_translate("MainWindow", "...", None)) + self.label_62.setText(_translate("MainWindow", "ymin - ymax", None)) + self.label_63.setText(_translate("MainWindow", "Tmin - Tmax:", None)) + self.label_64.setText(_translate("MainWindow", "Time Range:", None)) + self.label_65.setText(_translate("MainWindow", "Wr Period", None)) + self.label_60.setText(_translate("MainWindow", "Channel List:", None)) + self.label_61.setText(_translate("MainWindow", "xmin - xmax", None)) + self.label_56.setText(_translate("MainWindow", "Save", None)) + self.label_57.setText(_translate("MainWindow", "ftp", None)) + self.label_58.setText(_translate("MainWindow", "Spectra Plot", None)) + self.label_53.setText(_translate("MainWindow", "Path", None)) + self.label_55.setText(_translate("MainWindow", "Show", None)) + self.label_59.setText(_translate("MainWindow", "RTI PLot", None)) + self.tabWidgetSpectraHeis.setTabText(self.tabWidgetSpectraHeis.indexOf(self.tabgraphSpectraHeis), _translate("MainWindow", "Graphics", None)) + self.label_67.setText(_translate("MainWindow", "Path:", None)) + self.label_68.setText(_translate("MainWindow", "Blocks per File:", None)) + self.label_66.setText(_translate("MainWindow", "Type:", None)) + self.specHeisOutputToolPath.setText(_translate("MainWindow", "...", None)) + self.specHeisOutputComdata.setItemText(0, _translate("MainWindow", ".fits", None)) + self.label_69.setText(_translate("MainWindow", "Metada", None)) + self.specHeisOutputMetadaToolPath.setText(_translate("MainWindow", "...", None)) + self.tabWidgetSpectraHeis.setTabText(self.tabWidgetSpectraHeis.indexOf(self.taboutputSpectraHeis), _translate("MainWindow", "Output", None)) + self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabSpectraHeis), _translate("MainWindow", "SpectraHeis", None)) + self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tabopCorrelation), _translate("MainWindow", "Operation", None)) + self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tabopCorrelation1), _translate("MainWindow", "Graphics", None)) + self.tabWidgetProject.setTabText(self.tabWidgetProject.indexOf(self.tabCorrelation), _translate("MainWindow", "Correlation", None)) + self.tabConsole.setTabText(self.tabConsole.indexOf(self.tab_5), _translate("MainWindow", "Console", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabProjectProperty), _translate("MainWindow", "Project Property", None)) + self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar", None)) + self.menuProject.setTitle(_translate("MainWindow", "Project", None)) + self.menuRun.setTitle(_translate("MainWindow", "Run", None)) + self.menuOptions.setTitle(_translate("MainWindow", "Options", None)) + self.menuHelp.setTitle(_translate("MainWindow", "Help", None)) + self.actionOpen.setText(_translate("MainWindow", "Open", None)) + self.actionCreate.setText(_translate("MainWindow", "Create", None)) + self.actionSave.setText(_translate("MainWindow", "Save", None)) + self.actionClose.setText(_translate("MainWindow", "Close", None)) + self.actionStart.setText(_translate("MainWindow", "Start", None)) + self.actionPause.setText(_translate("MainWindow", "Pause", None)) + self.actionAbout.setText(_translate("MainWindow", "About", None)) + self.actionOpenToolbar.setText(_translate("MainWindow", "openToolbar", None)) + self.actionOpenToolbar.setToolTip(_translate("MainWindow", "Open Project", None)) + self.actionCreateToolbar.setText(_translate("MainWindow", "createToolbar", None)) + self.actionCreateToolbar.setToolTip(_translate("MainWindow", "Create Ṕroject", None)) + self.actionSaveToolbar.setText(_translate("MainWindow", "saveToolbar", None)) + self.actionSaveToolbar.setToolTip(_translate("MainWindow", "Save Project", None)) + self.actionStarToolbar.setText(_translate("MainWindow", "starToolbar", None)) + self.actionStarToolbar.setToolTip(_translate("MainWindow", "Start ", None)) + self.actionStopToolbar.setText(_translate("MainWindow", "stopToolbar", None)) + self.actionStopToolbar.setToolTip(_translate("MainWindow", "Stop", None)) + self.actionPauseToolbar.setText(_translate("MainWindow", "pauseToolbar", None)) + self.actionPauseToolbar.setToolTip(_translate("MainWindow", "Pause", None)) + self.actionAddPU.setText(_translate("MainWindow", "Add Processing Unit", None)) + self.actionFTP.setText(_translate("MainWindow", "FTP", None)) class Ui_BasicWindow(Ui_MainWindow): @@ -901,7 +1266,7 @@ class Ui_AdvancedWindow(Ui_MainWindow): Ui_MainWindow.retranslateUi(self, AdvancedWindow) -from PyQt4 import Qsci + if __name__ == "__main__": import sys @@ -911,3 +1276,4 @@ if __name__ == "__main__": ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_()) + diff --git a/schainpy/gui/viewer/ui_unitprocess.py b/schainpy/gui/viewer/ui_unitprocess.py index 9851648..63b61c8 100644 --- a/schainpy/gui/viewer/ui_unitprocess.py +++ b/schainpy/gui/viewer/ui_unitprocess.py @@ -1,95 +1,123 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'C:\Users\alex\ericworkspace\UIDOS\unitProcess.ui' -# -# Created: Tue Dec 18 15:34:51 2012 -# by: PyQt4 UI code generator 4.9.4 -# -# WARNING! All changes made in this file will be lost! - -from PyQt4 import QtCore, QtGui - -try: - _fromUtf8 = QtCore.QString.fromUtf8 -except AttributeError: - _fromUtf8 = lambda s: s - -class Ui_UnitProcess(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName(_fromUtf8("MainWindow")) - MainWindow.resize(212, 181) - self.centralWidget = QtGui.QWidget(MainWindow) - self.centralWidget.setObjectName(_fromUtf8("centralWidget")) - self.comboInputBox = QtGui.QComboBox(self.centralWidget) - self.comboInputBox.setGeometry(QtCore.QRect(80, 50, 121, 22)) - self.comboInputBox.setObjectName(_fromUtf8("comboInputBox")) - self.comboTypeBox = QtGui.QComboBox(self.centralWidget) - self.comboTypeBox.setGeometry(QtCore.QRect(80, 90, 121, 22)) - self.comboTypeBox.setObjectName(_fromUtf8("comboTypeBox")) - self.comboTypeBox.addItem(_fromUtf8("")) - self.comboTypeBox.addItem(_fromUtf8("")) - self.comboTypeBox.addItem(_fromUtf8("")) - self.nameUP = QtGui.QLabel(self.centralWidget) - self.nameUP.setGeometry(QtCore.QRect(50, 20, 111, 21)) - font = QtGui.QFont() - font.setPointSize(10) - font.setBold(False) - font.setWeight(50) - self.nameUP.setFont(font) - self.nameUP.setObjectName(_fromUtf8("nameUP")) - self.inputLabel = QtGui.QLabel(self.centralWidget) - self.inputLabel.setGeometry(QtCore.QRect(20, 50, 51, 31)) - font = QtGui.QFont() - font.setPointSize(10) - font.setBold(False) - font.setWeight(50) - self.inputLabel.setFont(font) - self.inputLabel.setObjectName(_fromUtf8("inputLabel")) - self.typeLabel = QtGui.QLabel(self.centralWidget) - self.typeLabel.setGeometry(QtCore.QRect(20, 90, 51, 21)) - font = QtGui.QFont() - font.setPointSize(10) - font.setBold(False) - font.setWeight(50) - self.typeLabel.setFont(font) - self.typeLabel.setObjectName(_fromUtf8("typeLabel")) - self.unitPokbut = QtGui.QPushButton(self.centralWidget) - self.unitPokbut.setGeometry(QtCore.QRect(10, 130, 91, 23)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.unitPokbut.setFont(font) - self.unitPokbut.setObjectName(_fromUtf8("unitPokbut")) - self.unitPcancelbut = QtGui.QPushButton(self.centralWidget) - self.unitPcancelbut.setGeometry(QtCore.QRect(110, 130, 91, 23)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.unitPcancelbut.setFont(font) - self.unitPcancelbut.setObjectName(_fromUtf8("unitPcancelbut")) - MainWindow.setCentralWidget(self.centralWidget) - - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8)) - self.comboTypeBox.setItemText(0, QtGui.QApplication.translate("MainWindow", "Voltage", None, QtGui.QApplication.UnicodeUTF8)) - self.comboTypeBox.setItemText(1, QtGui.QApplication.translate("MainWindow", "Spectra", None, QtGui.QApplication.UnicodeUTF8)) - self.comboTypeBox.setItemText(2, QtGui.QApplication.translate("MainWindow", "Correlation", None, QtGui.QApplication.UnicodeUTF8)) - self.nameUP.setText(QtGui.QApplication.translate("MainWindow", "PROCESSING UNIT", None, QtGui.QApplication.UnicodeUTF8)) - self.inputLabel.setText(QtGui.QApplication.translate("MainWindow", "Input:", None, QtGui.QApplication.UnicodeUTF8)) - self.typeLabel.setText(QtGui.QApplication.translate("MainWindow", "Type:", None, QtGui.QApplication.UnicodeUTF8)) - self.unitPokbut.setText(QtGui.QApplication.translate("MainWindow", "Ok", None, QtGui.QApplication.UnicodeUTF8)) - self.unitPcancelbut.setText(QtGui.QApplication.translate("MainWindow", "Cancel", None, QtGui.QApplication.UnicodeUTF8)) - - -if __name__ == "__main__": - import sys - app = QtGui.QApplication(sys.argv) - MainWindow = QtGui.QMainWindow() - ui = Ui_UnitProcess() - ui.setupUi(MainWindow) - MainWindow.show() - sys.exit(app.exec_()) - +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file '/home/alex/ui/unitProcess4.ui' +# +# Created: Fri May 24 05:23:03 2013 +# by: PyQt4 UI code generator 4.10 +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore, QtGui + +try: + _fromUtf8 = QtCore.QString.fromUtf8 +except AttributeError: + def _fromUtf8(s): + return s + +try: + _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig, _encoding) +except AttributeError: + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig) + +class Ui_UnitProcess(object): + def setupUi(self, MainWindow): + MainWindow.setObjectName(_fromUtf8("MainWindow")) + MainWindow.resize(312, 195) + self.centralWidget = QtGui.QWidget(MainWindow) + self.centralWidget.setObjectName(_fromUtf8("centralWidget")) + self.gridLayout = QtGui.QGridLayout(self.centralWidget) + self.gridLayout.setObjectName(_fromUtf8("gridLayout")) + self.inputLabel = QtGui.QLabel(self.centralWidget) + font = QtGui.QFont() + font.setPointSize(12) + font.setBold(False) + font.setWeight(50) + self.inputLabel.setFont(font) + self.inputLabel.setObjectName(_fromUtf8("inputLabel")) + self.gridLayout.addWidget(self.inputLabel, 2, 0, 1, 1) + self.unitPcancelbut = QtGui.QPushButton(self.centralWidget) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.unitPcancelbut.setFont(font) + self.unitPcancelbut.setObjectName(_fromUtf8("unitPcancelbut")) + self.gridLayout.addWidget(self.unitPcancelbut, 5, 2, 1, 2) + self.unitPokbut = QtGui.QPushButton(self.centralWidget) + font = QtGui.QFont() + font.setBold(False) + font.setWeight(50) + self.unitPokbut.setFont(font) + self.unitPokbut.setObjectName(_fromUtf8("unitPokbut")) + self.gridLayout.addWidget(self.unitPokbut, 5, 0, 1, 2) + self.typeLabel = QtGui.QLabel(self.centralWidget) + font = QtGui.QFont() + font.setPointSize(12) + font.setBold(False) + font.setWeight(50) + self.typeLabel.setFont(font) + self.typeLabel.setObjectName(_fromUtf8("typeLabel")) + self.gridLayout.addWidget(self.typeLabel, 3, 0, 1, 1) + self.nameUP = QtGui.QLabel(self.centralWidget) + font = QtGui.QFont() + font.setPointSize(13) + font.setBold(False) + font.setWeight(50) + self.nameUP.setFont(font) + self.nameUP.setObjectName(_fromUtf8("nameUP")) + self.gridLayout.addWidget(self.nameUP, 0, 1, 1, 2) + spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem, 0, 3, 1, 1) + self.comboInputBox = QtGui.QComboBox(self.centralWidget) + font = QtGui.QFont() + font.setPointSize(12) + self.comboInputBox.setFont(font) + self.comboInputBox.setObjectName(_fromUtf8("comboInputBox")) + self.gridLayout.addWidget(self.comboInputBox, 2, 1, 1, 3) + self.comboTypeBox = QtGui.QComboBox(self.centralWidget) + font = QtGui.QFont() + font.setPointSize(12) + self.comboTypeBox.setFont(font) + self.comboTypeBox.setObjectName(_fromUtf8("comboTypeBox")) + self.comboTypeBox.addItem(_fromUtf8("")) + self.comboTypeBox.addItem(_fromUtf8("")) + self.comboTypeBox.addItem(_fromUtf8("")) + self.gridLayout.addWidget(self.comboTypeBox, 3, 1, 1, 3) + spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) + self.gridLayout.addItem(spacerItem1, 0, 0, 1, 1) + spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) + self.gridLayout.addItem(spacerItem2, 4, 0, 1, 1) + self.line = QtGui.QFrame(self.centralWidget) + self.line.setFrameShape(QtGui.QFrame.HLine) + self.line.setFrameShadow(QtGui.QFrame.Sunken) + self.line.setObjectName(_fromUtf8("line")) + self.gridLayout.addWidget(self.line, 1, 0, 1, 4) + MainWindow.setCentralWidget(self.centralWidget) + + self.retranslateUi(MainWindow) + QtCore.QMetaObject.connectSlotsByName(MainWindow) + + def retranslateUi(self, MainWindow): + MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) + self.inputLabel.setText(_translate("MainWindow", "Input:", None)) + self.unitPcancelbut.setText(_translate("MainWindow", "Cancel", None)) + self.unitPokbut.setText(_translate("MainWindow", "Ok", None)) + self.typeLabel.setText(_translate("MainWindow", "Type:", None)) + self.nameUP.setText(_translate("MainWindow", "Processing Unit", None)) + self.comboTypeBox.setItemText(0, _translate("MainWindow", "Voltage", None)) + self.comboTypeBox.setItemText(1, _translate("MainWindow", "Spectra", None)) + self.comboTypeBox.setItemText(2, _translate("MainWindow", "Correlation", None)) + + +if __name__ == "__main__": + import sys + app = QtGui.QApplication(sys.argv) + MainWindow = QtGui.QMainWindow() + ui = Ui_UnitProcess() + ui.setupUi(MainWindow) + MainWindow.show() + sys.exit(app.exec_()) + diff --git a/schainpy/gui/viewer/ui_workspace.py b/schainpy/gui/viewer/ui_workspace.py index d59d006..3775c09 100644 --- a/schainpy/gui/viewer/ui_workspace.py +++ b/schainpy/gui/viewer/ui_workspace.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file '/home/roj-idl71/SignalChain/workspacev4.ui' +# Form implementation generated from reading ui file '/home/alex/ui/workspacev5.ui' # -# Created: Wed Mar 6 14:59:06 2013 -# by: PyQt4 UI code generator 4.8.6 +# Created: Sun May 12 16:45:47 2013 +# by: PyQt4 UI code generator 4.10 # # WARNING! All changes made in this file will be lost! @@ -12,43 +12,36 @@ from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: - _fromUtf8 = lambda s: s + def _fromUtf8(s): + return s + +try: + _encoding = QtGui.QApplication.UnicodeUTF8 + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig, _encoding) +except AttributeError: + def _translate(context, text, disambig): + return QtGui.QApplication.translate(context, text, disambig) class Ui_Workspace(object): def setupUi(self, Dialog): Dialog.setObjectName(_fromUtf8("Dialog")) - Dialog.resize(801, 309) - Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) - self.gridLayout_2 = QtGui.QGridLayout(Dialog) - self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) - self.gridLayout = QtGui.QGridLayout() - self.gridLayout.setObjectName(_fromUtf8("gridLayout")) + Dialog.setEnabled(True) + Dialog.resize(730, 295) + Dialog.setMinimumSize(QtCore.QSize(730, 295)) + Dialog.setMaximumSize(QtCore.QSize(730, 295)) self.dirLabel = QtGui.QTextEdit(Dialog) - self.dirLabel.setMaximumSize(QtCore.QSize(16777215, 75)) + self.dirLabel.setGeometry(QtCore.QRect(0, 0, 731, 71)) self.dirLabel.setReadOnly(True) - self.dirLabel.setHtml(QtGui.QApplication.translate("Dialog", "\n" -"\n" -"