##// END OF EJS Templates
07/09/2017
ebocanegra -
r1027:f11c2da27e74
parent child
Show More
@@ -7,8 +7,11 import os
7 7 import datetime
8 8 import numpy
9 9
10 import matplotlib.pyplot as plt
11
10 12 from figure import Figure, isRealtime, isTimeInHourRange
11 13 from plotting_codes import *
14 from matplotlib.pyplot import savefig
12 15
13 16 class SpectraPlot(Figure):
14 17
@@ -39,6 +42,8 class SpectraPlot(Figure):
39 42
40 43 self.__xfilter_ena = False
41 44 self.__yfilter_ena = False
45
46 self.indice=1
42 47
43 48 def getSubplots(self):
44 49
@@ -149,6 +154,27 class SpectraPlot(Figure):
149 154
150 155 thisDatetime = datetime.datetime.utcfromtimestamp(dataOut.getTimeRange()[0])
151 156 title = wintitle + " Spectra"
157
158
159
160 print 'len de X',len(x), numpy.shape(x), 'len de spc line',len(dataOut.data_spc[1,:,15]), numpy.shape(dataOut.data_spc)
161 print 'Altura:', y[0], y[1], y[13], y[14], y[10]
162 #a=z[1,:,15]
163
164 # fig = plt.figure(10+self.indice)
165 # plt.plot( x[0:128], zdB[0,:,10] )
166 # plt.axis([-12, 12, 15, 50])
167 # plt.title(" %s" %( '%s %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S"))) )
168 # plt.ylabel('Intensidad [dB]')
169 # plt.xlabel('Velocidad [m/s]')
170 # fig.savefig('/home/erick/Documents/Pics/to{}.png'.format(self.indice))
171 #
172 # plt.show()
173 #
174 # self.indice=self.indice+1
175
176
177
152 178 if ((dataOut.azimuth!=None) and (dataOut.zenith!=None)):
153 179 title = title + '_' + 'azimuth,zenith=%2.2f,%2.2f'%(dataOut.azimuth, dataOut.zenith)
154 180
@@ -217,6 +243,7 class SpectraPlot(Figure):
217 243 ftp=ftp,
218 244 wr_period=wr_period,
219 245 thisDatetime=thisDatetime)
246
220 247
221 248 class CrossSpectraPlot(Figure):
222 249
@@ -244,6 +271,8 class CrossSpectraPlot(Figure):
244 271 self.EXP_CODE = None
245 272 self.SUB_EXP_CODE = None
246 273 self.PLOT_POS = None
274
275 self.indice=0
247 276
248 277 def getSubplots(self):
249 278
@@ -385,6 +414,7 class CrossSpectraPlot(Figure):
385 414 self.isConfig = True
386 415
387 416 self.setWinTitle(title)
417
388 418
389 419 for i in range(self.nplots):
390 420 pair = dataOut.pairsList[pairsIndexList[i]]
@@ -413,6 +443,19 class CrossSpectraPlot(Figure):
413 443 coherence = numpy.abs(coherenceComplex)
414 444 # phase = numpy.arctan(-1*coherenceComplex.imag/coherenceComplex.real)*180/numpy.pi
415 445 phase = numpy.arctan2(coherenceComplex.imag, coherenceComplex.real)*180/numpy.pi
446
447
448 # print 'FASE', numpy.shape(phase), y[10]
449 # fig = plt.figure(10+self.indice)
450 # plt.plot( x[0:128],phase[:,10] )
451 # #plt.axis([-12, 12, 15, 50])
452 # plt.title("%s" %( '%s %s, Channel %s'%(thisDatetime.strftime("%Y/%m/%d"),thisDatetime.strftime("%H:%M:%S") , i)))
453 # plt.ylabel('Desfase [grados]')
454 # plt.xlabel('Velocidad [m/s]')
455 # fig.savefig('/home/erick/Documents/Pics/to{}.png'.format(self.indice))
456 #
457 # plt.show()
458 # self.indice=self.indice+1
416 459
417 460 title = "Coherence Ch%d * Ch%d" %(pair[0], pair[1])
418 461 axes0 = self.axesList[i*self.__nsubplots+2]
1 NO CONTENT: modified file, binary diff hidden
@@ -762,6 +762,7 class BLTRReader (ProcessingUnit, FileHeaderBLTR, RecordHeaderBLTR, JRODataReade
762 762 #print ' '
763 763 #print ' '
764 764 #Height=35
765
765 766 for i in range(self.nRdPairs):
766 767
767 768 chan_index0 = self.dataOut.pairsList[i][0]
1 NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
@@ -1006,14 +1006,14 class PrecipitationProc(Operation):
1006 1006 """
1007 1007 Constants:
1008 1008
1009 Pt: Transmission Power dB
1010 Gt: Transmission Gain dB
1011 Gr: Reception Gain dB
1012 Lambda: Wavelenght m
1013 aL: Attenuation loses dB
1014 tauW: Width of transmission pulse s
1015 ThetaT: Transmission antenna bean angle rad
1016 ThetaR: Reception antenna beam angle rad
1009 Pt: Transmission Power dB 5kW
1010 Gt: Transmission Gain dB 24.7 dB
1011 Gr: Reception Gain dB 18.5 dB
1012 Lambda: Wavelenght m 0.6741 m
1013 aL: Attenuation loses dB
1014 tauW: Width of transmission pulse s
1015 ThetaT: Transmission antenna bean angle rad 0.1656317 rad
1016 ThetaR: Reception antenna beam angle rad 0.36774087 rad
1017 1017
1018 1018 """
1019 1019 Numerator = ( (4*numpy.pi)**3 * aL**2 * 16 * numpy.log(2) )
@@ -1077,7 +1077,7 class FullSpectralAnalysis(Operation):
1077 1077
1078 1078 data = dataOut.data_pre
1079 1079 noise = dataOut.noise
1080 print 'noise',noise
1080 #print 'noise',noise
1081 1081 #SNRdB = 10*numpy.log10(dataOut.data_SNR)
1082 1082
1083 1083 FirstMoment = numpy.average(dataOut.data_param[:,1,:],0)
@@ -1093,25 +1093,28 class FullSpectralAnalysis(Operation):
1093 1093 velocityX=[]
1094 1094 velocityY=[]
1095 1095 velocityV=[]
1096 PhaseLine=[]
1096 1097
1097 1098 dbSNR = 10*numpy.log10(dataSNR)
1098 1099 dbSNR = numpy.average(dbSNR,0)
1099 1100 for Height in range(nHeights):
1100 1101
1101 [Vzon,Vmer,Vver, GaussCenter]= self.WindEstimation(spc, cspc, pairsList, ChanDist, Height, noise, VelRange, dbSNR[Height], SNRlimit)
1102 [Vzon,Vmer,Vver, GaussCenter, PhaseSlope]= self.WindEstimation(spc, cspc, pairsList, ChanDist, Height, noise, VelRange, dbSNR[Height], SNRlimit)
1103
1104 PhaseLine = numpy.append(PhaseLine, PhaseSlope)
1102 1105
1103 1106 if abs(Vzon)<100. and abs(Vzon)> 0.:
1104 1107 velocityX=numpy.append(velocityX, Vzon)#Vmag
1105 1108
1106 1109 else:
1107 print 'Vzon',Vzon
1110 #print 'Vzon',Vzon
1108 1111 velocityX=numpy.append(velocityX, numpy.NaN)
1109 1112
1110 1113 if abs(Vmer)<100. and abs(Vmer) > 0.:
1111 1114 velocityY=numpy.append(velocityY, Vmer)#Vang
1112 1115
1113 1116 else:
1114 print 'Vmer',Vmer
1117 #print 'Vmer',Vmer
1115 1118 velocityY=numpy.append(velocityY, numpy.NaN)
1116 1119
1117 1120 if dbSNR[Height] > SNRlimit:
@@ -1123,7 +1126,8 class FullSpectralAnalysis(Operation):
1123 1126 # FirstMoment[Height] = numpy.NaN
1124 1127 # velocityX[Height] = numpy.NaN
1125 1128 # velocityY[Height] = numpy.NaN
1126
1129
1130
1127 1131
1128 1132 data_output[0]=numpy.array(velocityX)
1129 1133 data_output[1]=numpy.array(velocityY)
@@ -1135,6 +1139,7 class FullSpectralAnalysis(Operation):
1135 1139 print 'velocityX',data_output[0]
1136 1140 print ' '
1137 1141 print 'velocityY',data_output[1]
1142 print 'PhaseLine',PhaseLine
1138 1143 #print numpy.array(velocityY)
1139 1144 print ' '
1140 1145 #print 'SNR'
@@ -1144,6 +1149,7 class FullSpectralAnalysis(Operation):
1144 1149
1145 1150
1146 1151 dataOut.data_output=data_output
1152
1147 1153 return
1148 1154
1149 1155
@@ -1164,7 +1170,7 class FullSpectralAnalysis(Operation):
1164 1170 phase=numpy.ones([spc.shape[0],spc.shape[1]])
1165 1171 CSPCSamples=numpy.ones([spc.shape[0],spc.shape[1]],dtype=numpy.complex_)
1166 1172 coherence=numpy.ones([spc.shape[0],spc.shape[1]])
1167 PhaseSlope=numpy.ones(spc.shape[0])
1173 PhaseSlope=numpy.zeros(spc.shape[0])
1168 1174 PhaseInter=numpy.ones(spc.shape[0])
1169 1175 xFrec=VelRange
1170 1176
@@ -1202,11 +1208,11 class FullSpectralAnalysis(Operation):
1202 1208 print ' '
1203 1209
1204 1210 #print 'dataSNR', dbSNR.shape, dbSNR[0,40:120]
1205 print 'SmoothSPC', SmoothSPC.shape, SmoothSPC[0:20]
1206 print 'noise',noise
1207 print 'zline',zline.shape, zline[0:20]
1208 print 'FactNorm',FactNorm.shape, FactNorm[0:20]
1209 print 'FactNorm suma', numpy.sum(FactNorm)
1211 #print 'SmoothSPC', SmoothSPC.shape, SmoothSPC[0:20]
1212 #print 'noise',noise
1213 #print 'zline',zline.shape, zline[0:20]
1214 #print 'FactNorm',FactNorm.shape, FactNorm[0:20]
1215 #print 'FactNorm suma', numpy.sum(FactNorm)
1210 1216
1211 1217 for i in range(spc.shape[0]):
1212 1218
@@ -1227,12 +1233,12 class FullSpectralAnalysis(Operation):
1227 1233
1228 1234 phase[i] = self.moving_average( numpy.arctan2(CSPCSamples[i].imag, CSPCSamples[i].real),N=1)#*180/numpy.pi
1229 1235
1230 print 'cspcLine', cspcLine.shape, cspcLine[0:20]
1231 print 'CSPCFactor', CSPCFactor#, CSPCFactor[0:20]
1232 print numpy.sum(ySamples[chan_index0]), numpy.sum(ySamples[chan_index1]), -noise[i]
1233 print 'CSPCNorm', CSPCNorm.shape, CSPCNorm[0:20]
1234 print 'CSPCNorm suma', numpy.sum(CSPCNorm)
1235 print 'CSPCSamples', CSPCSamples.shape, CSPCSamples[0,0:20]
1236 #print 'cspcLine', cspcLine.shape, cspcLine[0:20]
1237 #print 'CSPCFactor', CSPCFactor#, CSPCFactor[0:20]
1238 #print numpy.sum(ySamples[chan_index0]), numpy.sum(ySamples[chan_index1]), -noise[i]
1239 #print 'CSPCNorm', CSPCNorm.shape, CSPCNorm[0:20]
1240 #print 'CSPCNorm suma', numpy.sum(CSPCNorm)
1241 #print 'CSPCSamples', CSPCSamples.shape, CSPCSamples[0,0:20]
1236 1242
1237 1243 '''****** Getting fij width ******'''
1238 1244
@@ -1246,17 +1252,17 class FullSpectralAnalysis(Operation):
1246 1252 meanGauss=sum(xSamples*yMean) / len(xSamples)
1247 1253 sigma=sum(yMean*(xSamples-meanGauss)**2) / len(xSamples)
1248 1254
1249 print '****************************'
1250 print 'len(xSamples): ',len(xSamples)
1251 print 'yMean: ', yMean.shape, yMean[0:20]
1252 print 'ySamples', ySamples.shape, ySamples[0,0:20]
1253 print 'xSamples: ',xSamples.shape, xSamples[0:20]
1255 #print '****************************'
1256 #print 'len(xSamples): ',len(xSamples)
1257 #print 'yMean: ', yMean.shape, yMean[0:20]
1258 #print 'ySamples', ySamples.shape, ySamples[0,0:20]
1259 #print 'xSamples: ',xSamples.shape, xSamples[0:20]
1254 1260
1255 print 'meanGauss',meanGauss
1256 print 'sigma',sigma
1261 #print 'meanGauss',meanGauss
1262 #print 'sigma',sigma
1257 1263
1258 1264 #if (abs(meanGauss/sigma**2) > 0.0001) : #0.000000001):
1259 if dbSNR > SNRlimit :
1265 if dbSNR > SNRlimit and abs(meanGauss/sigma**2) > 0.0001:
1260 1266 try:
1261 1267 popt,pcov = curve_fit(self.gaus,xSamples,yMean,p0=[1,meanGauss,sigma])
1262 1268
@@ -1302,9 +1308,9 class FullSpectralAnalysis(Operation):
1302 1308 else:
1303 1309 Range = numpy.array([0,0])
1304 1310
1305 print ' '
1306 print 'GCpos',GCpos, ( len(xFrec)- len(xFrec)*0.1)
1307 print 'Rangpos',Rangpos
1311 #print ' '
1312 #print 'GCpos',GCpos, ( len(xFrec)- len(xFrec)*0.1)
1313 #print 'Rangpos',Rangpos
1308 1314 print 'RANGE: ', Range
1309 1315 FrecRange=xFrec[Range[0]:Range[1]]
1310 1316
@@ -1363,8 +1369,9 class FullSpectralAnalysis(Operation):
1363 1369 Vmag=numpy.sqrt(Vzon**2+Vmer**2)
1364 1370 Vang=numpy.arctan2(Vmer,Vzon)
1365 1371 Vver=xFrec[Vpos]
1372 print 'Height',Height
1366 1373 print 'vzon y vmer', Vzon, Vmer
1367 return Vzon, Vmer, Vver, GaussCenter
1374 return Vzon, Vmer, Vver, GaussCenter, PhaseSlope
1368 1375
1369 1376 class SpectralMoments(Operation):
1370 1377
1 NO CONTENT: modified file, binary diff hidden
@@ -1,1 +1,1
1 <Project description="read bltr data sswma file" id="191" name="test1"><ReadUnit datatype="testBLTRReader" id="1911" inputId="0" name="testBLTRReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="testBLTRReader" /><Parameter format="str" id="191112" name="path" value="/media/erick/6F60F7113095A154/BLTR" /><Parameter format="date" id="191113" name="startDate" value="2017/01/17" /><Parameter format="date" id="191114" name="endDate" value="2018/01/01" /><Parameter format="time" id="191115" name="startTime" value="00:00:00" /><Parameter format="time" id="191116" name="endTime" value="23:59:59" /><Parameter format="str" id="191118" name="ext" value="sswma" /></Operation></ReadUnit><ProcUnit datatype="BLTRProcess" id="1912" inputId="1911" name="BLTRProcess"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="SnrFilter" priority="2" type="self"><Parameter format="float" id="191221" name="snr_val" value="-20" /><Parameter format="int" id="191222" name="modetofilter" value="2" /></Operation><Operation id="19123" name="OutliersFilter" priority="3" type="self"><Parameter format="str" id="191231" name="svalue" value="meridional" /><Parameter format="str" id="191232" name="svalue2" value="inTime" /><Parameter format="float" id="191233" name="method" value="0" /><Parameter format="float" id="191234" name="factor" value="2" /><Parameter format="float" id="191235" name="filter" value="0" /><Parameter format="float" id="191236" name="npoints" value="9" /><Parameter format="int" id="191237" name="modetofilter" value="2" /></Operation><Operation id="19124" name="OutliersFilter" priority="4" type="self"><Parameter format="str" id="191241" name="svalue" value="zonal" /><Parameter format="str" id="191242" name="svalue2" value="inTime" /><Parameter format="float" id="191243" name="method" value="0" /><Parameter format="float" id="191244" name="factor" value="2" /><Parameter format="float" id="191245" name="filter" value="0" /><Parameter format="float" id="191246" name="npoints" value="9" /><Parameter format="int" id="191247" name="modetofilter" value="2" /></Operation><Operation id="19125" name="OutliersFilter" priority="5" type="self"><Parameter format="str" id="191251" name="svalue" value="vertical" /><Parameter format="str" id="191252" name="svalue2" value="inHeight" /><Parameter format="float" id="191253" name="method" value="0" /><Parameter format="float" id="191254" name="factor" value="2" /><Parameter format="float" id="191255" name="filter" value="0" /><Parameter format="float" id="191256" name="npoints" value="9" /><Parameter format="int" id="191257" name="modetofilter" value="2" /></Operation><Operation id="19126" name="prePlot" priority="6" type="self"><Parameter format="int" id="191261" name="modeselect" value="1" /></Operation><Operation id="19127" name="WindProfilerPlot" priority="7" type="other"><Parameter format="int" id="191271" name="id" value="1" /><Parameter format="str" id="191272" name="wintitle" value="" /><Parameter format="intlist" id="191273" name="channelList" value="0" /><Parameter format="int" id="191274" name="SNRmin" value="-10" /><Parameter format="int" id="191275" name="SNRmax" value="50" /><Parameter format="float" id="191276" name="SNRthresh" value="0" /><Parameter format="float" id="191277" name="xmin" value="0" /><Parameter format="float" id="191278" name="xmax" value="24" /><Parameter format="float" id="191279" name="ymax" value="3" /><Parameter format="float" id="191280" name="zmin" value="-20" /><Parameter format="float" id="191281" name="zmax" value="20" /><Parameter format="float" id="191282" name="zmin_ver" value="-200" /><Parameter format="float" id="191283" name="zmax_ver" value="200" /></Operation><Operation id="19128" name="prePlot" priority="8" type="self"><Parameter format="int" id="191281" name="modeselect" value="2" /></Operation><Operation id="19129" name="WindProfilerPlot" priority="9" type="other"><Parameter format="int" id="191291" name="id" value="2" /><Parameter format="str" id="191292" name="wintitle" value="" /><Parameter format="bool" id="191293" name="save" value="1" /><Parameter format="str" id="191294" name="figpath" value="/media/erick/6F60F7113095A154/BLTR/" /><Parameter format="int" id="191295" name="SNRmin" value="-20" /><Parameter format="int" id="191296" name="SNRmax" value="40" /><Parameter format="float" id="191297" name="SNRthresh" value="0" /><Parameter format="float" id="191298" name="xmin" value="0" /><Parameter format="float" id="191299" name="xmax" value="24" /><Parameter format="float" id="191300" name="ymin" value="0" /><Parameter format="float" id="191301" name="ymax" value="10" /><Parameter format="float" id="191302" name="zmin" value="-4" /><Parameter format="float" id="191303" name="zmax" value="4" /><Parameter format="float" id="191304" name="zmin_ver" value="-200" /><Parameter format="float" id="191305" name="zmax_ver" value="200" /></Operation></ProcUnit></Project> No newline at end of file
1 <Project description="Segundo Test" id="191" name="test01"><ReadUnit datatype="VoltageReader" id="1911" inputId="0" name="VoltageReader"><Operation id="19111" name="run" priority="1" type="self"><Parameter format="str" id="191111" name="datatype" value="VoltageReader" /><Parameter format="str" id="191112" name="path" value="/home/erick/Documents/Data/Claire_Data/raw" /><Parameter format="date" id="191113" name="startDate" value="2017/07/26" /><Parameter format="date" id="191114" name="endDate" value="2017/07/26" /><Parameter format="time" id="191115" name="startTime" value="10:02:00" /><Parameter format="time" id="191116" name="endTime" value="10:11:00" /><Parameter format="int" id="191118" name="online" value="0" /><Parameter format="int" id="191119" name="walk" value="1" /></Operation><Operation id="19112" name="printNumberOfBlock" priority="2" type="self" /></ReadUnit><ProcUnit datatype="SpectraProc" id="1913" inputId="1912" name="SpectraProc"><Operation id="19131" name="run" priority="1" type="self"><Parameter format="int" id="191311" name="nFFTPoints" value="128" /><Parameter format="pairslist" id="191312" name="pairsList" value="(0,1),(0,2),(1,2)" /></Operation><Operation id="19132" name="removeDC" priority="2" type="self" /><Operation id="19133" name="IncohInt" priority="3" type="external"><Parameter format="float" id="191331" name="n" value="30" /></Operation><Operation id="19134" name="CrossSpectraPlot" priority="4" type="other"><Parameter format="str" id="191341" name="phase_cmap" value="bwr" /><Parameter format="int" id="191342" name="id" value="2005" /><Parameter format="str" id="191343" name="wintitle" value="CrossSpectraPlot_ShortPulse" /><Parameter format="str" id="191344" name="xaxis" value="Velocity" /><Parameter format="float" id="191345" name="ymin" value="1" /><Parameter format="int" id="191346" name="ymax" value="7" /><Parameter format="int" id="191347" name="zmin" value="15" /><Parameter format="int" id="191348" name="zmax" value="60" /><Parameter format="int" id="191349" name="save" value="2" /><Parameter format="str" id="191350" name="figpath" value="/media/erick/6F60F7113095A154/CLAIRE/CLAIRE_WINDS_2MHZ/Images" /></Operation></ProcUnit><ProcUnit datatype="VoltageProc" id="1912" inputId="1911" name="VoltageProc"><Operation id="19121" name="run" priority="1" type="self" /><Operation id="19122" name="setRadarFrequency" priority="2" type="self"><Parameter format="float" id="191221" name="frequency" value="445.09e6" /></Operation><Operation id="19123" name="selectHeights" priority="3" type="self"><Parameter format="float" id="191231" name="minHei" value="0" /><Parameter format="float" id="191232" name="maxHei" value="64" /></Operation></ProcUnit><ProcUnit datatype="Parameters" id="1914" inputId="1913" name="ParametersProc"><Operation id="19141" name="run" priority="1" type="self" /><Operation id="19142" name="GaussianFit" priority="2" type="other" /></ProcUnit></Project> No newline at end of file
@@ -151,7 +151,7 opObj10.addParameter(name='SNRthresh', value='0', format='float')
151 151 opObj10.addParameter(name='xmin', value='0', format='float')
152 152 opObj10.addParameter(name='xmax', value='24', format='float')
153 153 opObj10.addParameter(name='ymin', value='0', format='float')
154 opObj10.addParameter(name='ymax', value='10', format='float')
154 opObj10.addParameter(name='ymax', value='7', format='float')
155 155 opObj10.addParameter(name='zmin', value='-4', format='float')
156 156 opObj10.addParameter(name='zmax', value='4', format='float')
157 157 opObj10.addParameter(name='zmin_ver', value='-200', format='float')
@@ -101,6 +101,7 opObj11.addParameter(name='xaxis', value='Velocity', format='str')
101 101 procUnitConfObj2 = controllerObj.addProcUnit(datatype='Parameters', inputId=procUnitConfObj1.getId())
102 102 opObj11 = procUnitConfObj2.addOperation(name='SpectralMoments', optype='other')
103 103 opObj22 = procUnitConfObj2.addOperation(name='FullSpectralAnalysis', optype='other')
104 opObj22.addParameter(name='SNRlimit', value='-4', format='float')
104 105 #
105 106 opObj22 = procUnitConfObj2.addOperation(name='WindProfilerPlot', optype='other')
106 107 opObj22.addParameter(name='id', value='4', format='int')
@@ -115,8 +116,8 opObj22.addParameter(name='zmax_ver', value='250', format='float')
115 116 opObj22.addParameter(name='SNRmin', value='-5', format='int')
116 117 opObj22.addParameter(name='SNRmax', value='30', format='int')
117 118 # opObj22.addParameter(name='SNRthresh', value='-3.5', format='float')
118 opObj22.addParameter(name='xmin', value=0, format='float')
119 opObj22.addParameter(name='xmax', value=24, format='float')
119 opObj22.addParameter(name='xmin', value='0', format='float')
120 opObj22.addParameter(name='xmax', value='24', format='float')
120 121 opObj22.addParameter(name='ymin', value='225', format='float')
121 122 #opObj22.addParameter(name='ymax', value='2000', format='float')
122 123 opObj22.addParameter(name='save', value='1', format='int')
General Comments 0
You need to be logged in to leave comments. Login now