Skip to content
Snippets Groups Projects
Commit 01a759e7 authored by Andi Walther's avatar Andi Walther :speech_balloon:
Browse files

add files

parent 922fb65f
No related branches found
No related tags found
No related merge requests found
...@@ -16,8 +16,7 @@ pro cws2::add_c, overpass = overpass, cth_reference = cth_reference, affi = affi ...@@ -16,8 +16,7 @@ pro cws2::add_c, overpass = overpass, cth_reference = cth_reference, affi = affi
orbit_2_time, overpass, year, month, day, hour, minute orbit_2_time, overpass, year, month, day, hour, minute
print, '... add data to AVAC-S level C file for '+affi+'/'+sensor+'/'+product+' ', year, month, day print, '... add data to AVAC-S level C file for '+affi+'/'+sensor+'/'+product+' ', year, month, day
endif endif
;default,day,13
;default,month,6
; read time from level B data ; read time from level B data
bTime = self->get_data(product='YDT',/data) bTime = self->get_data(product='YDT',/data)
...@@ -241,3 +240,22 @@ pro cws2::add_c, overpass = overpass, cth_reference = cth_reference, affi = affi ...@@ -241,3 +240,22 @@ pro cws2::add_c, overpass = overpass, cth_reference = cth_reference, affi = affi
print, '' print, ''
end end
pro _do_it
o=cws2()
prd_list = [ $
'cmb', 'ctp', 'cth', 'ctt', 'cod', 'ref', 'cph', 'lwp']
grp_list = ['CMS','EUM','OCA','MPF','FUB','DLR','MFR','RMB','AWG','UKM','GSF','LAR','COX','OCA2','KNM','TPS','SUI','CLV','LARN']
foreach grp, grp_list do begin
foreach prd, prd_list do begin
o.add_c,affi=grp,ov=11317, product=prd
endforeach
endforeach
end
...@@ -28,7 +28,8 @@ function cws2::_get_data, affi = affi, sensor = sensor, $ ...@@ -28,7 +28,8 @@ function cws2::_get_data, affi = affi, sensor = sensor, $
product = product, general = general product = product, general = general
COMMON FEEDBACK, quiet, verbose, debug COMMON FEEDBACK, quiet, verbose, debug
if not quiet then print, '... start cws2::_get_data (cws2__define.pro)'
; set defaults ; set defaults
if n_elements(affi) eq 0 then affi = self.affi if n_elements(affi) eq 0 then affi = self.affi
...@@ -189,43 +190,6 @@ end ...@@ -189,43 +190,6 @@ end
;+
;
;
;
;-
pro cws2::create_c
self->set_sensor,'_GENERAL'
; read number of x pixel in Seviri coordinates
xlin = self->get_data(product='XLIN',/data)
; read number of y pixel in Seviri coordinates
xele = self->get_data(product='XELE',/data)
; read time
time = self->get_data(product='YDT',/data)
; get C-file
cFile = self->get_cfile()
self->h5add,cfile,xele $
,Par_Name = 'Column on SEVIRI disk (x) ' $
,sensor='_GENERAL' $
,prd_code='XELE' $
,Par_Info='Column index of grid cell on SEVIRI disk' $
,/no_append
self->h5add,cfile,xlin $
,Par_Name = 'Row on SEVIRI disk (y) ' $
,sensor='_GENERAL' $
,prd_code = 'XLIN' $
,par_Info='Row index of grid cell on SEVIRI disk'
self->h5add,cfile,time $
,sensor='_GENERAL' $
,prd_code='YDT' $
,par_Name = 'Year, day and time' $
,par_Info='YDT given in seconds since midnight UT at the beginning of May 24 1968'
end
;+ ;+
; procedure ; procedure
......
;
;
;
pro cws_stats::caliop_profile, start , nr $ pro cws_stats::caliop_profile, start , nr $
,overpass=overpass $ ,overpass=overpass $
,cut = cut $ ,cut = cut $
,noPS = noPS $ ,noPS = noPS $
, group = group , group = group
COMMON FEEDBACK, quiet, verbose, debug
if not quiet then print, '... start caliop_profile' if not self.quiet then print, '... start caliop_profile'
default, noPs, 0 default, noPs, 0
;noPs=0 ;noPs=0
default, group, 'AWG' default, group, 'AWG'
if not quiet then print, '... group = ', group if not self.quiet then print, '... group = ', group
default, cut, 5 default, cut, 5
if not quiet then print, '... cut = ', cut if not self.quiet then print, '... cut = ', cut
; convert date to orbit number ; convert date to orbit number
orbt_nr = time_2_orbit( $ orbt_nr = time_2_orbit( $
julday(self.month,self.day,self.year,self.hour,self.minute)) julday(self.month,self.day,self.year,self.hour,self.minute))
default, overpass, orbt_nr default, overpass, orbt_nr
if not quiet then print, '... ATRAIN orbit number = ', orbt_nr if not self.quiet then print, '... ATRAIN orbit number = ', orbt_nr
; create cws2 object ; create cws2 object
oCwsAtrain = obj_new('cws2', overpass=overpass) oCwsAtrain = obj_new('cws2', overpass=overpass)
if verbose then print, '... read lon, lat, ydt' if self.verbose then print, '... read lon, lat, ydt'
lon = oCwsAtrain->get_data(prod='LON',/data) lon = oCwsAtrain->get_data(prod='LON',/data)
lat = oCwsAtrain->get_data(prod='LAT',/data) lat = oCwsAtrain->get_data(prod='LAT',/data)
ydt = oCwsAtrain->get_data(pr='YDT',/data) ydt = oCwsAtrain->get_data(pr='YDT',/data)
if verbose then print, '... convert (lon,lat) to pixel numbers' if self.verbose then print, '... convert (lon,lat) to pixel numbers'
pxl = geo_2_msg(lon,lat) pxl = geo_2_msg(lon,lat)
lidar = oCwsAtrain->get_data(sen='CALIOP', pro='TAB_0532', /DATA) lidar = oCwsAtrain->get_data(sen='CALIOP', pro='TAB_0532', /DATA)
...@@ -59,7 +61,7 @@ pro cws_stats::caliop_profile, start , nr $ ...@@ -59,7 +61,7 @@ pro cws_stats::caliop_profile, start , nr $
rfl = o->get_data(pro='RFL',sens='CPR',/data) rfl = o->get_data(pro='RFL',sens='CPR',/data)
lidar = o->get_data(sen='CALIOP' ,pro='TAB_0532',/DATA) lidar = o->get_data(sen='CALIOP' ,pro='TAB_0532',/DATA)
height = o->get_data(sen='CALIOP' ,pro='HGT',/DATA) height = o->get_data(sen='CALIOP' ,pro='HGT',/DATA)
; sfcbin = o->get_data(sen='CALIOP' ,pro='SHB',/DATA) sfcbin = o->get_data(sen='CALIOP' ,pro='SHB',/DATA)
time = o->get_data(pro='YDT',/DATA) time = o->get_data(pro='YDT',/DATA)
cth_cal = o->get_data(sen='CALIOP', prod='CTH',/data) cth_cal = o->get_data(sen='CALIOP', prod='CTH',/data)
...@@ -142,68 +144,107 @@ pro cws_stats::caliop_profile, start , nr $ ...@@ -142,68 +144,107 @@ pro cws_stats::caliop_profile, start , nr $
thisP = !p thisP = !p
!p.charsize=0.8 !p.charsize=0.8
if ~keyword_set(noPS) then startps,outname=outfile,xs=2,ys=2 ;if ~keyword_set(noPS) then startps,outname=outfile,xs=2,ys=2
w = window(dimension=[700,1200])
loadct,11
for p=2,160 do tvlct,fsc_color('gray',/triple),p
contour,r,l,h,/FILL,/color,NLEV=10,_EXTRA=_EXTRA,YRANGE=[0,20],$
YSTY=5,XStyle=5,XRANGE=[MIN(l),MAX(l)] $
,title=group,charsize=1., pos =[0.1,0.68,0.9,0.95],/norm
;stop
xyouts,0.05,0.96,'SEVIRI scene: '+self->get_date(/string),/normal,charsize=0.7
xyouts, 0.95,0.96,' CUT: '+string(cut,fo='(i2.2)') $
+' OVP: '+string(overpass,format='(i5.5)'),align=1.,/normal
loadct,39
oplot,cth_affi/1000.,color=fsc_color('white'),psym=1,symsize=0.44
oplot,height[sfcbin,indgen(nr_idx)]/1000.
axis,yax=0,yrange=[0,20] ,yticks=yticks,YSTY=1,ytitle='km'
axis,yax=1,yticks=yticks,ytickform='(A1)',yminor=1 ; draw right y axis w/o labels.
axis,xax=0,xticks=1,xtickform='(A1)',xminor=1 ; draw lower x axis w/o labels.
axis,xax=1,xticks=1,xtickform='(A1)',xminor=1 ; draw lower x axis w/o labels.
cloud_idx = where(cmb gt 1.5,c,compl=compl)
if c gt 0 then plots,cloud_idx,make_array(c,value=-0.5),color=fsc_color('blue'),psym=3
no_cloud_idx = where(cmb eq 1,cNoCloud) values = [-0.04,0.004,0.015,0.02,0.03,0.04,0.05,0.1,0.3]
if cNoCloud gt 0 then plots,compl,make_array(cNoCloud,value=-0.8),color=fsc_color('gold'),psym=1,symsize=0.12 levels = n_elements(values)
ctable = COLORTABLE([[085,026,139],[135,206,255],[0,255,0]], NCOLORS = levels, /TRANSPOSE)
ctable[*,0] = fsc_color('gray',/triple)
c= contour(r,l,reverse(h)/1000.,/current,pos =[0.1,0.68,0.9,0.95], yrange=[0,20] $
, c_value = values $
,c_color=ctable,/fill,/xstyle )
c['axis0'].SHOWTEXT = 0
c.title = group
t1 = text ( 0.05,0.96 , 'SEVIRI scene: '+self->get_date(/string))
t2 = text ( 0.95,0.96,' CUT: '+string(cut,fo='(i2.2)') $
+' OVP: '+string(overpass,format='(i5.5)'),align=1. )
cloud_idx = where(cmb gt 1.5,n_idx,compl=compl)
; if n_idx gt 0 then p00=plot(cloud_idx,make_array(n_idx,value=1.5),'b+',/overplot)
p01 = plot(indgen(n_elements(l)),make_array(n_elements(l),value=4),'y+',/current $
,pos = [0.1,0.64,0.9,0.68],/xstyle,/nodata , yrange=[0,5])
for ii = 0, 3 do (p01.axes)[ii].HIDE = 1
no_cloud_idx = where(cmb eq 1,cNoCloud)
if cNoCloud gt 0 then begin
p010=plot(compl,make_array(cNoCloud,value=1),'y+',/overplot )
endif
phase_idx_wat = where(cph eq 1,cWat ) phase_idx_wat = where(cph eq 1,cWat )
if cWat gt 1 then plots,phase_idx_wat,make_array(cWat,value=-1.3),color=fsc_color('green'),psym=3 if cWat gt 1 then begin
p011=plot(phase_idx_wat,make_array(cWat,value=2),'g+',/overplot )
endif
phase_idx_ice = where(cph eq 2,cIce ) phase_idx_ice = where(cph eq 2,cIce )
if cIce gt 1 then plots,phase_idx_ice,make_array(cIce,value=-1.8),color=fsc_color('red'),psym=1,symsize=0.12 if cIce gt 1 then begin
p012=plot(phase_idx_ice,make_array(cIce,value=3),'r+',/overplot )
endif
phase_idx_mix = where(cph eq 3,cMix ) phase_idx_mix = where(cph eq 3,cMix )
if cMix gt 1 then plots,phase_idx_mix,make_array(cMix,value=-2.3),color=fsc_color('purple'),psym=1,symsize=0.12 if cMix gt 1 then begin
p013=plot(phase_idx_mix,make_array(cMix,value=4),'purple+',/overplot )
endif
thisP = !P thisP = !P
!p.charsize /= 2.4 !p.charsize /= 2.4
xyouts,nr_idx+10, -0., 'Cl',color=fsc_color('blue')
xyouts,nr_idx+10,-0.8, 'NCl',color=fsc_color('gold') t30 = text ( nr_idx+10, -0. , 'Cl' , color='blue',/data)
xyouts,nr_idx+10,-1.6, 'Wat',color=fsc_color('green') t31 = text ( nr_idx+10, -0.8 , 'Cl' , color='gold',/data)
xyouts,nr_idx+10,-2.4, 'Ice',color=fsc_color('red') t32 = text ( nr_idx+10, -1.6 , 'Cl' , color='green',/data)
xyouts,nr_idx+10,-3.2, 'Mix',color=fsc_color('purple') t33 = text ( nr_idx+10, -2.4 , 'Cl' , color='red',/data)
t34 = text ( nr_idx+10, -3.2 , 'Cl' , color='purple',/data)
!p = thisP !p = thisP
cod_wat = cod * (cph eq 1) - 999.*(cph ne 1) cod_wat = cod * (cph eq 1) - 999.*(cph ne 1)
plot,indgen(n_elements(ind)),cod,pos=[0.1,0.46,0.9,0.62],/noerase $
, yRange=[0,50],psym=1 $ p1 = plot( indgen(n_elements(ind)),cod,/current,symbol ='.',/nodata, yrange=[0,50],/xstyle)
;, xTickformat='NOLABEL'$ ;!!!!!!!!!!!!!!!!! p1.position = [0.1,0.46,0.9,0.62]
, yTitle = 'cod []' $
, symsize=0.3,/nodata,/xstyle, xrange=[0,n_elements(ind)-1]
xyouts,0.5,0.627,'Cloud optical depth',charsize=.6,/normal,align=0.5 p1['axis1'].Title ='cod []'
oplot,indgen(n_elements(ind)),cod,psym=1 $ p1['axis1'].Axis_Range =[0,50]
,symsize=0.6,col=fsc_color('red') p1['axis0'].SHOWTEXT = 0
p10 = plot ( indgen(n_elements(ind)),cod ,'r+' ,/overplot,sym_size=0.5)
p11 = plot ( indgen(n_elements(ind)),cod_wat,'g+',/overplot,sym_size=0.5)
p12 = plot ( indgen(n_elements(ind)),cod_modis, 'b+',/overplot,sym_size=0.5)
t12 =text ( 0.5,0.627,'Cloud optical depth' , align = 0.5 )
oplot,indgen(n_elements(ind)),cod_wat,psym=1 $ ; plot,indgen(n_elements(ind)),cod,pos=[0.1,0.46,0.9,0.62],/noerase $
,symsize=0.6,col=fsc_color('green') ; , yRange=[0,50],psym=1 $
; ;, xTickformat='NOLABEL'$ ;!!!!!!!!!!!!!!!!!
oplot,indgen(n_elements(ind)),cod_modis,psym=1 $ ; , yTitle = 'cod []' $
,symsize=0.2,col=fsc_color('blue') ; , symsize=0.3,/nodata,/xstyle, xrange=[0,n_elements(ind)-1]
; xyouts,0.5,0.627,'Cloud optical depth',charsize=.6,/normal,align=0.5
; oplot,indgen(n_elements(ind)),cod,psym=1 $
; ,symsize=0.6,col=fsc_color('red')
;
; oplot,indgen(n_elements(ind)),cod_wat,psym=1 $
; ,symsize=0.6,col=fsc_color('green')
;
; oplot,indgen(n_elements(ind)),cod_modis,psym=1 $
; ,symsize=0.2,col=fsc_color('blue')
;
; !!!!!!!!!!!!!!!!! ; !!!!!!!!!!!!!!!!!
; legend,['Water', ' Ice', ' MODIS'] $ ; legend,['Water', ' Ice', ' MODIS'] $
; , psym = [1,1,1],color=[fsc_color('green')$ ; , psym = [1,1,1],color=[fsc_color('green')$
...@@ -214,72 +255,96 @@ pro cws_stats::caliop_profile, start , nr $ ...@@ -214,72 +255,96 @@ pro cws_stats::caliop_profile, start , nr $
if size(lwp_amsr,/tname) eq 'STRING' then lwp_amsr=make_array(size(lwp_amsr,/dim),val=0) if size(lwp_amsr,/tname) eq 'STRING' then lwp_amsr=make_array(size(lwp_amsr,/dim),val=0)
wat = where(cph eq 1,c) wat = where(cph eq 1,n_wat)
plot,lat[ind],(lwp_amsr>0)*1000. $
, pos=[0.1,0.06,0.9,0.22],/noerase $
, yRange=[00,300] ,symsize=0.3 $ p2 = plot( lat[ind],(lwp_amsr>0)*1000. $
, yTitle = 'lwp [g/m!U2!X]',/xstyle,xtitle='Latitude',/nodata , pos=[0.1,0.06,0.9,0.22] , /current,/xstyle,/nodata $
, yrange =[0,300])
xyouts,0.5,0.227,'Liquid water path',charsize=.6,/normal,align=0.5 p2['axis0'].TITLE = 'Latitude'
p2['axis1'].TITLE = 'lwp [g/m!U2!N]'
axis,xax=1,xrange=[0,n_elements(ind)-1], /xstyle $
; , xTickformat='NOLABEL' $ ; !!!!!!!!!!!!!!!!!
, /save t20= text ( 0.5,0.227,'Liquid water path',align=0.5)
if c gt 0 then begin
oplot,(indgen(n_elements(ind)))[wat],(lwp[wat]>0) $ ; ax0 = Axis('x',axis_range= [0,n_elements(ind)-1],style = 0)
, color=fsc_color('green') $
, symsize=0.5,psym=1 if n_wat gt 0 then begin
p20 = plot ( (indgen(n_elements(ind)))[wat],(lwp[wat]>0) $
oplot,(indgen(n_elements(ind)))[wat],(lwp_amsr[wat]>0)*1000. $ , 'g+' $
, color=fsc_color('blue'),psym=1 , symsize=0.5 , sym_size=0.5,/current, pos=[0.1,0.06,0.9,0.22] $
, axis_style = 0 )
p21 = plot((indgen(n_elements(ind)))[wat],(lwp_amsr[wat]>0)*1000. $
, 'b+', sym_size=0.5, /current , pos=[0.1,0.06,0.9,0.22] $
, axis_style = 0 )
endif endif
; !!!!!!!!!!!!!!!!! if add_legend_lwp ne '' then t21 = text ( 0.1,0.01,'+ calculated from COD and REF ',font_size=0.3)
;legend,[group + ' !U+!X', 'AMSR-E' ], linestyle = [0,0], charsize = 0.5 $ if add_legend_lwp eq '' then t22 = text ( 0.1,0.01,'+ LWP provided by group ',font_size=0.3)
; , box = 0, spacing = 0.3, color=[fsc_color('green')$
; , fsc_color('blue')] ,/clear, pos=[0.1,0.252],/norm
if add_legend_lwp ne '' then xyouts,0.1,0.01,'+ calculated from COD and REF ',/normal,charsize=0.3
if add_legend_lwp eq '' then xyouts,0.1,0.01,'+ LWP provided by group ',/normal,charsize=0.3
ref_idx = where(ref le 0,cRef) ref_idx = where(ref le 0,cRef)
if cRef gt 0 then ref[ref_idx] = -999. if cRef gt 0 then ref[ref_idx] = -999.
ref_wat = ref * (cph eq 1) - 999.*(cph ne 1) ref_wat = ref * (cph eq 1) - 999.*(cph ne 1)
ref_ice = ref * (cph ne 1) - 999.*(cph eq 1) ref_ice = ref * (cph ne 1) - 999.*(cph eq 1)
plot,indgen(n_elements(ind)),ref $
, pos=[0.1,0.26,0.9,0.42],/noerase $
, yRange=[00,50],psym=1 ,symsize=0.3 $ p3 = plot(indgen(n_elements(ind)),ref $
, yTitle = 'ref ['+textoidl('\mu')+'m]',/nodata $ , pos=[0.1,0.26,0.9,0.42] $
;, xTickformat='NOLABEL' $ ; !!!!!!!!!!!!!!!!! , /current,/xstyle, yrange=[0,50],/nodata $
, /xstyle, xrange=[0,n_elements(ind)-1] , xrange = [0,n_elements(ind)-1] )
xyouts,0.5,0.427,'Cloud effective radius',charsize=.6,/normal,align=0.5
; !!!!!!!!!!!!!!!!!
;legend,['Water', ' Ice',' MODIS'] $
; , psym = [1,1,1],color=[fsc_color('green')$
; ,fsc_color('red'),fsc_color('blue')] $
; , charsize = 0.5 $
; , box = 0 $
; , spacing = 0.5 ,/Fill , /clear
ref_modis = float(ref_modis)
oplot,indgen(n_elements(ind)),ref_modis,psym=1 $
,symsize=0.2,col=fsc_color('blue')
oplot,indgen(n_elements(ind)),ref_ice,psym=1 $
,symsize=0.6,col=fsc_color('red')
oplot,indgen(n_elements(ind)),ref_wat,psym=1 $
,symsize=0.6,col=fsc_color('green')
if ~keyword_set(noPS) then begin p3['axis1'].TITLE = "ref [$\mu$m]"
spawn,'convert -density 200 '+outfile+'.eps '+outfile+'.jpg' p3['axis0'].SHOWTEXT = 0
spawn, 'rm -f '+outfile+'.eps' t30 = text ( 0.5,0.427,'Cloud effective radius', align = 0.5 )
endps
endif ref_modis = float(ref_modis)
p30 = plot ( indgen(n_elements(ind)),ref_modis,'b+' $
,sym_size=0.5,/overplot )
p31 = plot ( indgen(n_elements(ind)),ref_ice,'r+' $
,sym_size=0.5,/overplot )
p32 = plot ( indgen(n_elements(ind)),ref_wat, 'g+' $
,sym_size=0.5,/overplot )
;
; plot,indgen(n_elements(ind)),ref $
; , pos=[0.1,0.26,0.9,0.42],/noerase $
; , yRange=[00,50],psym=1 ,symsize=0.3 $
; , yTitle = 'ref ['+textoidl('\mu')+'m]',/nodata $
; ;, xTickformat='NOLABEL' $ ; !!!!!!!!!!!!!!!!!
; , /xstyle, xrange=[0,n_elements(ind)-1]
;
;
; xyouts,0.5,0.427,'Cloud effective radius',charsize=.6,/normal,align=0.5
;
; ; !!!!!!!!!!!!!!!!!
; ;legend,['Water', ' Ice',' MODIS'] $
; ; , psym = [1,1,1],color=[fsc_color('green')$
; ; ,fsc_color('red'),fsc_color('blue')] $
; ; , charsize = 0.5 $
; ; , box = 0 $
; ; , spacing = 0.5 ,/Fill , /clear
;
; ref_modis = float(ref_modis)
;
; oplot,indgen(n_elements(ind)),ref_modis,psym=1 $
; ,symsize=0.2,col=fsc_color('blue')
; oplot,indgen(n_elements(ind)),ref_ice,psym=1 $
; ,symsize=0.6,col=fsc_color('red')
; oplot,indgen(n_elements(ind)),ref_wat,psym=1 $
; ,symsize=0.6,col=fsc_color('green')
;
w.save,outFile+'.png'
print,outFile+'.png'
end end
......
...@@ -12,16 +12,16 @@ pro cws_stats_do_it $ ...@@ -12,16 +12,16 @@ pro cws_stats_do_it $
error_n=0 error_n=0
; if n_elements(hour) eq 0 and n_elements(cut) eq 1 then begin if n_elements(hour) eq 0 and n_elements(cut) eq 1 then begin
; case cut of case cut of
; 2: hour = 1230 2: hour = 1230
; 3: hour = 1345 3: hour = 1345
; 4: hour = 1345 4: hour = 1345
; 5: hour = 1345 5: hour = 1345
; 6: hour = 1400 6: hour = 1400
; else: hour=1200 else: hour=1200
; endcase endcase
; endif endif
default, cut, 0 default, cut, 0
default, product, 'cod' default, product, 'cod'
...@@ -79,7 +79,7 @@ pro cws_stats_do_it $ ...@@ -79,7 +79,7 @@ pro cws_stats_do_it $
group =['CMS','EUM','OCA','MPF','FUB','DLR','MFR','AWG','UKM','GSF','LAR'] group =['CMS','EUM','OCA','MPF','FUB','DLR','MFR','AWG','UKM','GSF','LAR']
for tt=0,n_elements(group) -1 do $ for tt=0,n_elements(group) -1 do $
o->caliop_profile, group=group[tt], cut=cut, _extra=_extra o->caliop_profile, group=group[tt], cut=cut, _extra=_extra
endif else o->caliop_profile, cut=cut, _extra=_extra endif else o->caliop_profile, cut=cut, _extra=_extra,group=group
end end
13: o->cth_all, cut=cut 13: o->cth_all, cut=cut
14: o->lwp_all, cut=cut 14: o->lwp_all, cut=cut
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment