gphys 1.2.2.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +8 -17
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/ChangeLog +5762 -753
- data/LICENSE.txt +30 -18
- data/Rakefile +1 -0
- data/bin/console +14 -0
- data/bin/gpcat +43 -2
- data/bin/gpcut +16 -0
- data/bin/gpvect +167 -15
- data/bin/gpview +254 -51
- data/bin/setup +7 -0
- data/dim_op.c +1220 -0
- data/doc/attribute.html +19 -0
- data/doc/attributenetcdf.html +15 -0
- data/doc/axis.html +387 -0
- data/doc/coordmapping.html +111 -0
- data/doc/coordtransform.html +36 -0
- data/doc/dclext.html +821 -0
- data/doc/derivative/gphys-derivative.html +100 -0
- data/doc/derivative/index.html +21 -0
- data/doc/derivative/index.rd +14 -0
- data/doc/derivative/math-doc/document.pdf +0 -0
- data/doc/derivative/math-doc/document.tex +158 -0
- data/doc/derivative/math-doc/document/document.css +30 -0
- data/doc/derivative/math-doc/document/document.html +57 -0
- data/doc/derivative/math-doc/document/images.aux +1 -0
- data/doc/derivative/math-doc/document/images.log +385 -0
- data/doc/derivative/math-doc/document/images.pl +186 -0
- data/doc/derivative/math-doc/document/images.tex +364 -0
- data/doc/derivative/math-doc/document/img1.png +0 -0
- data/doc/derivative/math-doc/document/img10.png +0 -0
- data/doc/derivative/math-doc/document/img11.png +0 -0
- data/doc/derivative/math-doc/document/img12.png +0 -0
- data/doc/derivative/math-doc/document/img13.png +0 -0
- data/doc/derivative/math-doc/document/img14.png +0 -0
- data/doc/derivative/math-doc/document/img15.png +0 -0
- data/doc/derivative/math-doc/document/img16.png +0 -0
- data/doc/derivative/math-doc/document/img17.png +0 -0
- data/doc/derivative/math-doc/document/img18.png +0 -0
- data/doc/derivative/math-doc/document/img19.png +0 -0
- data/doc/derivative/math-doc/document/img2.png +0 -0
- data/doc/derivative/math-doc/document/img20.png +0 -0
- data/doc/derivative/math-doc/document/img21.png +0 -0
- data/doc/derivative/math-doc/document/img22.png +0 -0
- data/doc/derivative/math-doc/document/img23.png +0 -0
- data/doc/derivative/math-doc/document/img24.png +0 -0
- data/doc/derivative/math-doc/document/img25.png +0 -0
- data/doc/derivative/math-doc/document/img26.png +0 -0
- data/doc/derivative/math-doc/document/img27.png +0 -0
- data/doc/derivative/math-doc/document/img28.png +0 -0
- data/doc/derivative/math-doc/document/img29.png +0 -0
- data/doc/derivative/math-doc/document/img3.png +0 -0
- data/doc/derivative/math-doc/document/img30.png +0 -0
- data/doc/derivative/math-doc/document/img4.png +0 -0
- data/doc/derivative/math-doc/document/img5.png +0 -0
- data/doc/derivative/math-doc/document/img6.png +0 -0
- data/doc/derivative/math-doc/document/img7.png +0 -0
- data/doc/derivative/math-doc/document/img8.png +0 -0
- data/doc/derivative/math-doc/document/img9.png +0 -0
- data/doc/derivative/math-doc/document/index.html +57 -0
- data/doc/derivative/math-doc/document/labels.pl +13 -0
- data/doc/derivative/math-doc/document/next.png +0 -0
- data/doc/derivative/math-doc/document/next_g.png +0 -0
- data/doc/derivative/math-doc/document/node1.html +238 -0
- data/doc/derivative/math-doc/document/node2.html +75 -0
- data/doc/derivative/math-doc/document/prev.png +0 -0
- data/doc/derivative/math-doc/document/prev_g.png +0 -0
- data/doc/derivative/math-doc/document/up.png +0 -0
- data/doc/derivative/math-doc/document/up_g.png +0 -0
- data/doc/derivative/numru-derivative.html +158 -0
- data/doc/ep_flux/ep_flux.html +469 -0
- data/doc/ep_flux/ggraph_on_merdional_section.html +71 -0
- data/doc/ep_flux/index.html +31 -0
- data/doc/ep_flux/index.rd +24 -0
- data/doc/ep_flux/math-doc/document.pdf +0 -0
- data/doc/ep_flux/math-doc/document.tex +2018 -0
- data/doc/ep_flux/math-doc/document/WARNINGS +1 -0
- data/doc/ep_flux/math-doc/document/contents.png +0 -0
- data/doc/ep_flux/math-doc/document/crossref.png +0 -0
- data/doc/ep_flux/math-doc/document/document.css +30 -0
- data/doc/ep_flux/math-doc/document/document.html +101 -0
- data/doc/ep_flux/math-doc/document/images.aux +1 -0
- data/doc/ep_flux/math-doc/document/images.log +1375 -0
- data/doc/ep_flux/math-doc/document/images.pl +1328 -0
- data/doc/ep_flux/math-doc/document/images.tex +1471 -0
- data/doc/ep_flux/math-doc/document/img1.png +0 -0
- data/doc/ep_flux/math-doc/document/img10.png +0 -0
- data/doc/ep_flux/math-doc/document/img100.png +0 -0
- data/doc/ep_flux/math-doc/document/img101.png +0 -0
- data/doc/ep_flux/math-doc/document/img102.png +0 -0
- data/doc/ep_flux/math-doc/document/img103.png +0 -0
- data/doc/ep_flux/math-doc/document/img104.png +0 -0
- data/doc/ep_flux/math-doc/document/img105.png +0 -0
- data/doc/ep_flux/math-doc/document/img106.png +0 -0
- data/doc/ep_flux/math-doc/document/img107.png +0 -0
- data/doc/ep_flux/math-doc/document/img108.png +0 -0
- data/doc/ep_flux/math-doc/document/img109.png +0 -0
- data/doc/ep_flux/math-doc/document/img11.png +0 -0
- data/doc/ep_flux/math-doc/document/img110.png +0 -0
- data/doc/ep_flux/math-doc/document/img111.png +0 -0
- data/doc/ep_flux/math-doc/document/img112.png +0 -0
- data/doc/ep_flux/math-doc/document/img113.png +0 -0
- data/doc/ep_flux/math-doc/document/img114.png +0 -0
- data/doc/ep_flux/math-doc/document/img115.png +0 -0
- data/doc/ep_flux/math-doc/document/img116.png +0 -0
- data/doc/ep_flux/math-doc/document/img117.png +0 -0
- data/doc/ep_flux/math-doc/document/img118.png +0 -0
- data/doc/ep_flux/math-doc/document/img119.png +0 -0
- data/doc/ep_flux/math-doc/document/img12.png +0 -0
- data/doc/ep_flux/math-doc/document/img120.png +0 -0
- data/doc/ep_flux/math-doc/document/img121.png +0 -0
- data/doc/ep_flux/math-doc/document/img122.png +0 -0
- data/doc/ep_flux/math-doc/document/img123.png +0 -0
- data/doc/ep_flux/math-doc/document/img124.png +0 -0
- data/doc/ep_flux/math-doc/document/img125.png +0 -0
- data/doc/ep_flux/math-doc/document/img126.png +0 -0
- data/doc/ep_flux/math-doc/document/img127.png +0 -0
- data/doc/ep_flux/math-doc/document/img128.png +0 -0
- data/doc/ep_flux/math-doc/document/img129.png +0 -0
- data/doc/ep_flux/math-doc/document/img13.png +0 -0
- data/doc/ep_flux/math-doc/document/img130.png +0 -0
- data/doc/ep_flux/math-doc/document/img131.png +0 -0
- data/doc/ep_flux/math-doc/document/img132.png +0 -0
- data/doc/ep_flux/math-doc/document/img133.png +0 -0
- data/doc/ep_flux/math-doc/document/img134.png +0 -0
- data/doc/ep_flux/math-doc/document/img135.png +0 -0
- data/doc/ep_flux/math-doc/document/img136.png +0 -0
- data/doc/ep_flux/math-doc/document/img137.png +0 -0
- data/doc/ep_flux/math-doc/document/img138.png +0 -0
- data/doc/ep_flux/math-doc/document/img139.png +0 -0
- data/doc/ep_flux/math-doc/document/img14.png +0 -0
- data/doc/ep_flux/math-doc/document/img140.png +0 -0
- data/doc/ep_flux/math-doc/document/img141.png +0 -0
- data/doc/ep_flux/math-doc/document/img142.png +0 -0
- data/doc/ep_flux/math-doc/document/img143.png +0 -0
- data/doc/ep_flux/math-doc/document/img144.png +0 -0
- data/doc/ep_flux/math-doc/document/img145.png +0 -0
- data/doc/ep_flux/math-doc/document/img146.png +0 -0
- data/doc/ep_flux/math-doc/document/img147.png +0 -0
- data/doc/ep_flux/math-doc/document/img148.png +0 -0
- data/doc/ep_flux/math-doc/document/img149.png +0 -0
- data/doc/ep_flux/math-doc/document/img15.png +0 -0
- data/doc/ep_flux/math-doc/document/img150.png +0 -0
- data/doc/ep_flux/math-doc/document/img151.png +0 -0
- data/doc/ep_flux/math-doc/document/img152.png +0 -0
- data/doc/ep_flux/math-doc/document/img153.png +0 -0
- data/doc/ep_flux/math-doc/document/img154.png +0 -0
- data/doc/ep_flux/math-doc/document/img155.png +0 -0
- data/doc/ep_flux/math-doc/document/img156.png +0 -0
- data/doc/ep_flux/math-doc/document/img157.png +0 -0
- data/doc/ep_flux/math-doc/document/img158.png +0 -0
- data/doc/ep_flux/math-doc/document/img159.png +0 -0
- data/doc/ep_flux/math-doc/document/img16.png +0 -0
- data/doc/ep_flux/math-doc/document/img160.png +0 -0
- data/doc/ep_flux/math-doc/document/img161.png +0 -0
- data/doc/ep_flux/math-doc/document/img162.png +0 -0
- data/doc/ep_flux/math-doc/document/img163.png +0 -0
- data/doc/ep_flux/math-doc/document/img164.png +0 -0
- data/doc/ep_flux/math-doc/document/img165.png +0 -0
- data/doc/ep_flux/math-doc/document/img166.png +0 -0
- data/doc/ep_flux/math-doc/document/img167.png +0 -0
- data/doc/ep_flux/math-doc/document/img168.png +0 -0
- data/doc/ep_flux/math-doc/document/img169.png +0 -0
- data/doc/ep_flux/math-doc/document/img17.png +0 -0
- data/doc/ep_flux/math-doc/document/img170.png +0 -0
- data/doc/ep_flux/math-doc/document/img171.png +0 -0
- data/doc/ep_flux/math-doc/document/img172.png +0 -0
- data/doc/ep_flux/math-doc/document/img173.png +0 -0
- data/doc/ep_flux/math-doc/document/img174.png +0 -0
- data/doc/ep_flux/math-doc/document/img175.png +0 -0
- data/doc/ep_flux/math-doc/document/img176.png +0 -0
- data/doc/ep_flux/math-doc/document/img177.png +0 -0
- data/doc/ep_flux/math-doc/document/img178.png +0 -0
- data/doc/ep_flux/math-doc/document/img179.png +0 -0
- data/doc/ep_flux/math-doc/document/img18.png +0 -0
- data/doc/ep_flux/math-doc/document/img180.png +0 -0
- data/doc/ep_flux/math-doc/document/img181.png +0 -0
- data/doc/ep_flux/math-doc/document/img182.png +0 -0
- data/doc/ep_flux/math-doc/document/img183.png +0 -0
- data/doc/ep_flux/math-doc/document/img184.png +0 -0
- data/doc/ep_flux/math-doc/document/img185.png +0 -0
- data/doc/ep_flux/math-doc/document/img186.png +0 -0
- data/doc/ep_flux/math-doc/document/img187.png +0 -0
- data/doc/ep_flux/math-doc/document/img188.png +0 -0
- data/doc/ep_flux/math-doc/document/img189.png +0 -0
- data/doc/ep_flux/math-doc/document/img19.png +0 -0
- data/doc/ep_flux/math-doc/document/img190.png +0 -0
- data/doc/ep_flux/math-doc/document/img191.png +0 -0
- data/doc/ep_flux/math-doc/document/img192.png +0 -0
- data/doc/ep_flux/math-doc/document/img193.png +0 -0
- data/doc/ep_flux/math-doc/document/img194.png +0 -0
- data/doc/ep_flux/math-doc/document/img195.png +0 -0
- data/doc/ep_flux/math-doc/document/img196.png +0 -0
- data/doc/ep_flux/math-doc/document/img197.png +0 -0
- data/doc/ep_flux/math-doc/document/img198.png +0 -0
- data/doc/ep_flux/math-doc/document/img199.png +0 -0
- data/doc/ep_flux/math-doc/document/img2.png +0 -0
- data/doc/ep_flux/math-doc/document/img20.png +0 -0
- data/doc/ep_flux/math-doc/document/img200.png +0 -0
- data/doc/ep_flux/math-doc/document/img21.png +0 -0
- data/doc/ep_flux/math-doc/document/img22.png +0 -0
- data/doc/ep_flux/math-doc/document/img23.png +0 -0
- data/doc/ep_flux/math-doc/document/img24.png +0 -0
- data/doc/ep_flux/math-doc/document/img25.png +0 -0
- data/doc/ep_flux/math-doc/document/img26.png +0 -0
- data/doc/ep_flux/math-doc/document/img27.png +0 -0
- data/doc/ep_flux/math-doc/document/img28.png +0 -0
- data/doc/ep_flux/math-doc/document/img29.png +0 -0
- data/doc/ep_flux/math-doc/document/img3.png +0 -0
- data/doc/ep_flux/math-doc/document/img30.png +0 -0
- data/doc/ep_flux/math-doc/document/img31.png +0 -0
- data/doc/ep_flux/math-doc/document/img32.png +0 -0
- data/doc/ep_flux/math-doc/document/img33.png +0 -0
- data/doc/ep_flux/math-doc/document/img34.png +0 -0
- data/doc/ep_flux/math-doc/document/img35.png +0 -0
- data/doc/ep_flux/math-doc/document/img36.png +0 -0
- data/doc/ep_flux/math-doc/document/img37.png +0 -0
- data/doc/ep_flux/math-doc/document/img38.png +0 -0
- data/doc/ep_flux/math-doc/document/img39.png +0 -0
- data/doc/ep_flux/math-doc/document/img4.png +0 -0
- data/doc/ep_flux/math-doc/document/img40.png +0 -0
- data/doc/ep_flux/math-doc/document/img41.png +0 -0
- data/doc/ep_flux/math-doc/document/img42.png +0 -0
- data/doc/ep_flux/math-doc/document/img43.png +0 -0
- data/doc/ep_flux/math-doc/document/img44.png +0 -0
- data/doc/ep_flux/math-doc/document/img45.png +0 -0
- data/doc/ep_flux/math-doc/document/img46.png +0 -0
- data/doc/ep_flux/math-doc/document/img47.png +0 -0
- data/doc/ep_flux/math-doc/document/img48.png +0 -0
- data/doc/ep_flux/math-doc/document/img49.png +0 -0
- data/doc/ep_flux/math-doc/document/img5.png +0 -0
- data/doc/ep_flux/math-doc/document/img50.png +0 -0
- data/doc/ep_flux/math-doc/document/img51.png +0 -0
- data/doc/ep_flux/math-doc/document/img52.png +0 -0
- data/doc/ep_flux/math-doc/document/img53.png +0 -0
- data/doc/ep_flux/math-doc/document/img54.png +0 -0
- data/doc/ep_flux/math-doc/document/img55.png +0 -0
- data/doc/ep_flux/math-doc/document/img56.png +0 -0
- data/doc/ep_flux/math-doc/document/img57.png +0 -0
- data/doc/ep_flux/math-doc/document/img58.png +0 -0
- data/doc/ep_flux/math-doc/document/img59.png +0 -0
- data/doc/ep_flux/math-doc/document/img6.png +0 -0
- data/doc/ep_flux/math-doc/document/img60.png +0 -0
- data/doc/ep_flux/math-doc/document/img61.png +0 -0
- data/doc/ep_flux/math-doc/document/img62.png +0 -0
- data/doc/ep_flux/math-doc/document/img63.png +0 -0
- data/doc/ep_flux/math-doc/document/img64.png +0 -0
- data/doc/ep_flux/math-doc/document/img65.png +0 -0
- data/doc/ep_flux/math-doc/document/img66.png +0 -0
- data/doc/ep_flux/math-doc/document/img67.png +0 -0
- data/doc/ep_flux/math-doc/document/img68.png +0 -0
- data/doc/ep_flux/math-doc/document/img69.png +0 -0
- data/doc/ep_flux/math-doc/document/img7.png +0 -0
- data/doc/ep_flux/math-doc/document/img70.png +0 -0
- data/doc/ep_flux/math-doc/document/img71.png +0 -0
- data/doc/ep_flux/math-doc/document/img72.png +0 -0
- data/doc/ep_flux/math-doc/document/img73.png +0 -0
- data/doc/ep_flux/math-doc/document/img74.png +0 -0
- data/doc/ep_flux/math-doc/document/img75.png +0 -0
- data/doc/ep_flux/math-doc/document/img76.png +0 -0
- data/doc/ep_flux/math-doc/document/img77.png +0 -0
- data/doc/ep_flux/math-doc/document/img78.png +0 -0
- data/doc/ep_flux/math-doc/document/img79.png +0 -0
- data/doc/ep_flux/math-doc/document/img8.png +0 -0
- data/doc/ep_flux/math-doc/document/img80.png +0 -0
- data/doc/ep_flux/math-doc/document/img81.png +0 -0
- data/doc/ep_flux/math-doc/document/img82.png +0 -0
- data/doc/ep_flux/math-doc/document/img83.png +0 -0
- data/doc/ep_flux/math-doc/document/img84.png +0 -0
- data/doc/ep_flux/math-doc/document/img85.png +0 -0
- data/doc/ep_flux/math-doc/document/img86.png +0 -0
- data/doc/ep_flux/math-doc/document/img87.png +0 -0
- data/doc/ep_flux/math-doc/document/img88.png +0 -0
- data/doc/ep_flux/math-doc/document/img89.png +0 -0
- data/doc/ep_flux/math-doc/document/img9.png +0 -0
- data/doc/ep_flux/math-doc/document/img90.png +0 -0
- data/doc/ep_flux/math-doc/document/img91.png +0 -0
- data/doc/ep_flux/math-doc/document/img92.png +0 -0
- data/doc/ep_flux/math-doc/document/img93.png +0 -0
- data/doc/ep_flux/math-doc/document/img94.png +0 -0
- data/doc/ep_flux/math-doc/document/img95.png +0 -0
- data/doc/ep_flux/math-doc/document/img96.png +0 -0
- data/doc/ep_flux/math-doc/document/img97.png +0 -0
- data/doc/ep_flux/math-doc/document/img98.png +0 -0
- data/doc/ep_flux/math-doc/document/img99.png +0 -0
- data/doc/ep_flux/math-doc/document/index.html +101 -0
- data/doc/ep_flux/math-doc/document/internals.pl +258 -0
- data/doc/ep_flux/math-doc/document/labels.pl +265 -0
- data/doc/ep_flux/math-doc/document/next.png +0 -0
- data/doc/ep_flux/math-doc/document/next_g.png +0 -0
- data/doc/ep_flux/math-doc/document/node1.html +104 -0
- data/doc/ep_flux/math-doc/document/node10.html +164 -0
- data/doc/ep_flux/math-doc/document/node11.html +86 -0
- data/doc/ep_flux/math-doc/document/node12.html +166 -0
- data/doc/ep_flux/math-doc/document/node13.html +897 -0
- data/doc/ep_flux/math-doc/document/node14.html +1065 -0
- data/doc/ep_flux/math-doc/document/node15.html +72 -0
- data/doc/ep_flux/math-doc/document/node16.html +81 -0
- data/doc/ep_flux/math-doc/document/node2.html +82 -0
- data/doc/ep_flux/math-doc/document/node3.html +91 -0
- data/doc/ep_flux/math-doc/document/node4.html +149 -0
- data/doc/ep_flux/math-doc/document/node5.html +330 -0
- data/doc/ep_flux/math-doc/document/node6.html +99 -0
- data/doc/ep_flux/math-doc/document/node7.html +98 -0
- data/doc/ep_flux/math-doc/document/node8.html +83 -0
- data/doc/ep_flux/math-doc/document/node9.html +140 -0
- data/doc/ep_flux/math-doc/document/prev.png +0 -0
- data/doc/ep_flux/math-doc/document/prev_g.png +0 -0
- data/doc/ep_flux/math-doc/document/up.png +0 -0
- data/doc/ep_flux/math-doc/document/up_g.png +0 -0
- data/doc/gdir.html +412 -0
- data/doc/gdir_client.html +16 -0
- data/doc/gdir_connect_ftp-like.html +61 -0
- data/doc/gdir_server.html +45 -0
- data/doc/ggraph.html +1119 -0
- data/doc/gpcat.html +45 -0
- data/doc/gpcut.html +47 -0
- data/doc/gphys.html +624 -0
- data/doc/gphys_fft.html +324 -0
- data/doc/gphys_grads_io.html +69 -0
- data/doc/gphys_grib_io.html +82 -0
- data/doc/gphys_io.html +183 -0
- data/doc/gphys_io_common.html +18 -0
- data/doc/gphys_netcdf_io.html +283 -0
- data/doc/gplist.html +24 -0
- data/doc/gpmath.html +52 -0
- data/doc/gpmaxmin.html +32 -0
- data/doc/gpprint.html +35 -0
- data/doc/gpview.html +349 -0
- data/doc/grads2nc_with_gphys.html +21 -0
- data/doc/grads_gridded.html +307 -0
- data/doc/grib.html +149 -0
- data/doc/grid.html +224 -0
- data/doc/index.html +145 -0
- data/doc/index.rd +138 -0
- data/doc/netcdf_convention.html +136 -0
- data/doc/unumeric.html +176 -0
- data/doc/update +69 -0
- data/doc/update_rdoc +8 -0
- data/doc/varray.html +299 -0
- data/doc/varraycomposite.html +67 -0
- data/ext_init.c +1 -0
- data/extconf.rb +16 -6
- data/gphys.gemspec +33 -26
- data/interpo.c +1 -1
- data/lib/numru/dclext.rb +718 -546
- data/lib/numru/derivative.rb +2 -0
- data/lib/numru/ganalysis.rb +38 -0
- data/lib/numru/ganalysis/beta_plane.rb +103 -0
- data/lib/numru/ganalysis/eof.rb +3 -2
- data/lib/numru/ganalysis/fitting.rb +559 -0
- data/lib/numru/ganalysis/histogram.rb +36 -19
- data/lib/numru/ganalysis/log_p.rb +130 -0
- data/lib/numru/ganalysis/met.rb +396 -2
- data/lib/numru/ganalysis/met_z.rb +300 -0
- data/lib/numru/ganalysis/planet.rb +17 -7
- data/lib/numru/ganalysis/qg.rb +685 -0
- data/lib/numru/ganalysis/sigma_coord.rb +90 -0
- data/lib/numru/gdir.rb +2 -1
- data/lib/numru/ggraph.rb +204 -60
- data/lib/numru/ggraph_on_merdional_section.rb +1 -1
- data/lib/numru/gphys.rb +6 -0
- data/lib/numru/gphys/assoccoords.rb +18 -3
- data/lib/numru/gphys/axis.rb +209 -8
- data/lib/numru/gphys/derivative.rb +11 -0
- data/lib/numru/gphys/gphys.rb +539 -48
- data/lib/numru/gphys/gphys_dim_op.rb +331 -0
- data/lib/numru/gphys/gphys_fft.rb +48 -2
- data/lib/numru/gphys/gphys_io.rb +241 -13
- data/lib/numru/gphys/gphys_netcdf_io.rb +77 -39
- data/lib/numru/gphys/gphys_nusdas_io.rb +3 -0
- data/lib/numru/gphys/grib.rb +133 -54
- data/lib/numru/gphys/grib_params.rb +26 -3
- data/lib/numru/gphys/grid.rb +75 -34
- data/lib/numru/gphys/interpolate.rb +24 -10
- data/lib/numru/gphys/mdstorage.rb +160 -0
- data/lib/numru/gphys/netcdf_convention.rb +4 -2
- data/lib/numru/gphys/subsetmapping.rb +0 -1
- data/lib/numru/gphys/unumeric.rb +50 -5
- data/lib/numru/gphys/varray.rb +15 -30
- data/lib/numru/gphys/varraycomposite.rb +107 -24
- data/lib/numru/gphys/varraynetcdf.rb +9 -3
- data/lib/numru/gphys/version.rb +5 -0
- data/sample/druby_cli1.rb +2 -0
- data/sample/druby_cli2.rb +0 -6
- data/sample/druby_serv2.rb +0 -13
- data/spec/gphys_spec.rb +11 -0
- data/spec/spec_helper.rb +2 -0
- data/test/test_assoccoords.rb +102 -0
- data/test/test_axis.rb +61 -0
- data/test/test_fitting.rb +116 -0
- data/test/test_gphys.rb +20 -0
- data/test/test_met_z.rb +96 -0
- data/test/test_sigma_coord.rb +50 -0
- data/{test → test_old}/eof_slp.rb +0 -0
- data/{test → test_old}/mltbit.dat +0 -0
- data/{test → test_old}/test_ep_flux.rb +0 -0
- data/{test → test_old}/test_multibitIO.rb +0 -0
- metadata +530 -191
- data/README.md +0 -29
- data/lib/gphys.rb +0 -2
- data/lib/numru/dclext_datetime_ax.rb +0 -220
- data/lib/version.rb +0 -3
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<?xml version="1.0" ?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
5
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
6
|
+
<head>
|
|
7
|
+
<title>../lib/numru/gphys/varraycomposite.rb</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<h1><a name="label-0" id="label-0">class NumRu::VArrayComposite < NumRu::VArray</a></h1><!-- RDLabel: "class NumRu::VArrayComposite < NumRu::VArray" -->
|
|
11
|
+
<p>a VArray that consists of multiple VArrays tiled regularly
|
|
12
|
+
(possibly in multi-dimension). Except for the constructer
|
|
13
|
+
"new" and <!-- Reference, RDLabel "attr_update" doesn't exist --><em class="label-not-found">attr_update</em><!-- Reference end -->, the usage of this class is the same as VArray.</p>
|
|
14
|
+
<p>Note that the name and the attributes of a VArrayComposite is
|
|
15
|
+
borrowed form one of the VArrays contained (actually, the first one
|
|
16
|
+
is used). Currently, no check is made
|
|
17
|
+
regarding whether the names and attributes are the same among the
|
|
18
|
+
VArrays contained. If you rename a VArrayComposite, the change will
|
|
19
|
+
be made with all the VArrays contained. However, currently,
|
|
20
|
+
change of the attributes are only reflected only in the first
|
|
21
|
+
VArray. You have to call <!-- Reference, RDLabel "attr_update" doesn't exist --><em class="label-not-found">attr_update</em><!-- Reference end --> separately.</p>
|
|
22
|
+
<h2><a name="label-1" id="label-1">Class methods</a></h2><!-- RDLabel: "Class methods" -->
|
|
23
|
+
<dl>
|
|
24
|
+
<dt><h4><a name="label-2" id="label-2"><code>VArrayComposite.new(<var>varrays</var>)</code></a></h4></dt><!-- RDLabel: "VArrayComposite.new" -->
|
|
25
|
+
<dd>
|
|
26
|
+
<p>Constructor</p>
|
|
27
|
+
<p>ARGUMENTS</p>
|
|
28
|
+
<ul>
|
|
29
|
+
<li>varrays (NArray of VArray) : VArrays to be included, gridded
|
|
30
|
+
regularly in a NArray.</li>
|
|
31
|
+
</ul>
|
|
32
|
+
<p>RETURN VALUE</p>
|
|
33
|
+
<ul>
|
|
34
|
+
<li>a VArrayComposite</li>
|
|
35
|
+
</ul>
|
|
36
|
+
<p>EXAMPLES</p>
|
|
37
|
+
<ul>
|
|
38
|
+
<li><p>Suppose that you have VArrays va00, va01, va10, va00,
|
|
39
|
+
with va00 and va10 having a same 0th dimension length,
|
|
40
|
+
va01 and va11 having a same 0th dimension length,
|
|
41
|
+
and va00 and va01 having a same 1st dimention length.</p>
|
|
42
|
+
<pre>varrays = NArray[ [ va00, va01 ],
|
|
43
|
+
[ va10, va11 ] ]
|
|
44
|
+
vac = VArrayComposite.new(varrays)</pre>
|
|
45
|
+
<p>This will create a composite VArray tiled two-dimensionally.</p></li>
|
|
46
|
+
<li><p>You can create a VArray that lacks one or more VArrays as
|
|
47
|
+
long as the shape is unambiguous:</p>
|
|
48
|
+
<pre>vac = VArrayComposite.new( NArray[ [ va00, va01 ],
|
|
49
|
+
[ va10, nil ] ] )</pre>
|
|
50
|
+
<p>is allowed, but </p>
|
|
51
|
+
<pre>vac = VArrayComposite.new( NArray[ [ va00, nil ],
|
|
52
|
+
[ va10, nil ] ] )</pre>
|
|
53
|
+
<p>is prohibited.</p>
|
|
54
|
+
<p>NOTICE: At this moment, handling of such nil-contianing
|
|
55
|
+
VArrayComposite is very limited, and many methods do not work.</p></li>
|
|
56
|
+
<li><p>Suppose that you have 3D VArrays va0, va1, va2, va3,
|
|
57
|
+
and you want to concatenate them with the 3rd dimension.</p>
|
|
58
|
+
<pre>varrays = NArray[ va0,va1,va2,va3 ].newdim(0,0)</pre>
|
|
59
|
+
<p>This will create a 3D NArray with a shape of [1,1,4].
|
|
60
|
+
Then you can make the composite as follows:</p>
|
|
61
|
+
<pre>vac = VArrayComposite.new(varrays)</pre></li>
|
|
62
|
+
</ul></dd>
|
|
63
|
+
</dl>
|
|
64
|
+
<p>Usage of all the other class methods are the same as in VArray.</p>
|
|
65
|
+
|
|
66
|
+
</body>
|
|
67
|
+
</html>
|
data/ext_init.c
CHANGED
data/extconf.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require "rubygems" unless defined?(Gem)
|
|
1
2
|
require "mkmf"
|
|
2
3
|
$extout_prefix = '/numru'
|
|
3
4
|
alias __install_dirs install_dirs
|
|
@@ -7,12 +8,21 @@ def install_dirs
|
|
|
7
8
|
dirs
|
|
8
9
|
end
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
narray_include =
|
|
14
|
-
narray_lib =
|
|
15
|
-
|
|
11
|
+
if Gem.respond_to?(:find_files)
|
|
12
|
+
require "rbconfig"
|
|
13
|
+
so = RbConfig::CONFIG["DLEXT"]
|
|
14
|
+
narray_include = File.expand_path(File.dirname(Gem.find_files("narray.h")[0]))
|
|
15
|
+
narray_lib = File.expand_path(File.dirname(Gem.find_files("narray." + so)[0]))
|
|
16
|
+
else
|
|
17
|
+
gem_home=(`gem environment GEM_HOME`).chomp
|
|
18
|
+
narray_dir = Dir.glob("#{gem_home}/gems/narray-*").sort[-1]
|
|
19
|
+
if narray_dir
|
|
20
|
+
narray_include = narray_lib = narray_dir
|
|
21
|
+
else
|
|
22
|
+
narray_include = narray_lib = [ $sitearchdir, $vendorarchdir]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
dir_config('narray', narray_include, narray_lib)
|
|
16
26
|
|
|
17
27
|
if ( ! ( have_header("narray.h") && have_header("narray_config.h") ) ) then
|
|
18
28
|
print <<EOS
|
data/gphys.gemspec
CHANGED
|
@@ -1,34 +1,41 @@
|
|
|
1
|
-
#
|
|
1
|
+
# coding: utf-8
|
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require 'version'
|
|
4
|
+
require 'numru/gphys/version'
|
|
5
5
|
|
|
6
|
-
Gem::Specification.new do |
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "gphys"
|
|
8
|
+
spec.version = NumRu::GPhys::VERSION
|
|
9
|
+
spec.authors = ["Takeshi Horinouchi", "Ryo Mizuta",\
|
|
10
10
|
"Daisuke Tsukahara", "Seiya Nishizawa", "Shin-ichi Takehiro"]
|
|
11
|
-
|
|
12
|
-
gem.description = %q{comprehensive library for self-descriptive gridded physical data (in NetCDF, GrADS, or on memory) with graphicsgraphicsgraphicsgraphics.}
|
|
13
|
-
gem.summary = %q{a multi-purpose class to handle Gridded Physical quantities}
|
|
14
|
-
gem.homepage = 'http://www.gfd-dennou.org/arch/ruby/products/gphys/'
|
|
11
|
+
spec.email = ["eriko@gfd-dennou.org"]
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
gem.require_paths = ["lib"]
|
|
20
|
-
gem.extensions << "extconf.rb"
|
|
13
|
+
#if spec.respond_to?(:metadata)
|
|
14
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
|
15
|
+
#end
|
|
21
16
|
|
|
22
|
-
|
|
17
|
+
spec.summary = %q{a multi-purpose class to handle Gridded Physical quantities}
|
|
18
|
+
spec.description = %q{comprehensive library for self-descriptive gridded physical data (in NetCDF, GrADS, or on memory) with graphicsgraphicsgraphicsgraphics.}
|
|
19
|
+
spec.homepage = 'http://www.gfd-dennou.org/arch/ruby/products/gphys/'
|
|
20
|
+
spec.licenses = ["GFD Dennou Club"]
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
23
|
+
spec.bindir = "bin"
|
|
24
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
25
|
+
spec.require_paths = ["lib"]
|
|
26
|
+
spec.test_files = spec.files.grep(%r{^(test|test_old|sample|testdata)/})
|
|
27
|
+
spec.extensions << "extconf.rb"
|
|
28
|
+
|
|
29
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 1.8")
|
|
30
|
+
|
|
31
|
+
spec.add_runtime_dependency(%q<narray>, [">= 0.5.7"])
|
|
32
|
+
spec.add_runtime_dependency(%q<numru-misc>, [">= 0.1.0"])
|
|
33
|
+
spec.add_runtime_dependency(%q<numru-units>, [">= 1.7"])
|
|
34
|
+
spec.add_runtime_dependency(%q<narray_miss>, [">= 1.2.4"])
|
|
35
|
+
spec.add_runtime_dependency(%q<ruby-netcdf>, [">= 0.6.6"])
|
|
36
|
+
spec.add_runtime_dependency(%q<ruby-dcl>, [">= 1.6.1"])
|
|
37
|
+
spec.add_runtime_dependency(%q<ruby-fftw3>, [">= 0.3"])
|
|
38
|
+
spec.add_runtime_dependency(%q<gsl>, [">= 1.14"])
|
|
39
|
+
spec.add_runtime_dependency(%q<ruby-lapack>, [">= 1.5"])
|
|
40
|
+
spec.add_development_dependency(%q<rb-grib>, [">= 0.2.0"])
|
|
34
41
|
end
|
data/interpo.c
CHANGED
|
@@ -211,7 +211,7 @@ interpo_do(obj, shape_to, idxmap, val_from, missval, extrapo)
|
|
|
211
211
|
kf += idfc*cshf;
|
|
212
212
|
cshf *= shf[j];
|
|
213
213
|
}
|
|
214
|
-
if (
|
|
214
|
+
if (pt[it] == vmiss) {break;}
|
|
215
215
|
if (nomiss || pf[kf] != vmiss){
|
|
216
216
|
pt[it] += a*pf[kf];
|
|
217
217
|
} else {
|
data/lib/numru/dclext.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require "numru/dcl"
|
|
2
2
|
require "numru/misc"
|
|
3
|
-
require "
|
|
3
|
+
require "date" # needs ruby >= 1.8 for DateTime class
|
|
4
4
|
require "narray_miss"
|
|
5
5
|
|
|
6
6
|
############################################################
|
|
@@ -322,6 +322,55 @@ GRPH2
|
|
|
322
322
|
|
|
323
323
|
==Original methods:
|
|
324
324
|
|
|
325
|
+
===Date and time axes
|
|
326
|
+
|
|
327
|
+
---datetime_ax(date_from, date_to, options=nil)
|
|
328
|
+
Draw axes with date and hours.
|
|
329
|
+
The DCL window must have been defined in the units "days"
|
|
330
|
+
and to start with 0 (regarding the direction to draw the axis).
|
|
331
|
+
|
|
332
|
+
ARGUMENTS
|
|
333
|
+
* date_from (DateTime) : date&time to beggin
|
|
334
|
+
* date_to (DateTime) : date&time to end
|
|
335
|
+
* options (Hash) : options to change the default behavior if specified:
|
|
336
|
+
option name default value # description:
|
|
337
|
+
'yax' false # true => y-axis, false => x-axis
|
|
338
|
+
'cside' nil # "b", "t", "l", "r", nil (=>left/bottom),
|
|
339
|
+
# or false (=>right/top)'
|
|
340
|
+
'dtick1' 1 # small tick interval in hours
|
|
341
|
+
'dtick2' nil # large tick (with hour labels) interval in hours
|
|
342
|
+
'year' false # true => add year to date label
|
|
343
|
+
'month' true # true => add month to date label
|
|
344
|
+
|
|
345
|
+
---date_ax(date_from, date_to, options=nil)
|
|
346
|
+
Similar to ((<datetime_ax>)) but
|
|
347
|
+
draws a calendar axis in terms of date (not hours).
|
|
348
|
+
This method uses DCL's UCPACK (DCL.uc[xy]acl) when appropritate;
|
|
349
|
+
i.e., when the period is short enough (typically with in a few
|
|
350
|
+
years) so that year labels are written. Unfortunately,
|
|
351
|
+
the current uc[xy]acl (or uc[xy]yr) suppress year labels
|
|
352
|
+
when the period is long to write year albels for each year.
|
|
353
|
+
In such a case, this method uses DCLExt.year_ax.
|
|
354
|
+
Note that future uc[xy]acl may cover all the situation,
|
|
355
|
+
so this method will not be needed.
|
|
356
|
+
|
|
357
|
+
ARGUMENTS
|
|
358
|
+
* date_from (DateTime) : date&time to beggin
|
|
359
|
+
* date_to (DateTime) : date&time to end
|
|
360
|
+
* options (Hash) : options to change the default behavior if specified:
|
|
361
|
+
option name default value # description:
|
|
362
|
+
"yax" false # true => y-axis, false => x-axis
|
|
363
|
+
"cside" nil # "b", "t", "l", "r", nil (=>left/bottom), or false
|
|
364
|
+
# (=>right/top)
|
|
365
|
+
"margin_factor" 0.9 # Factor to control the extent to use
|
|
366
|
+
# UCPACK; The smaller, the less, requiring more
|
|
367
|
+
# space between year labels
|
|
368
|
+
"dtick1" nil # (For long time series) small tick interval
|
|
369
|
+
# (years)
|
|
370
|
+
"dtick2" nil # (For long time series) large tick with year
|
|
371
|
+
# labels (years)
|
|
372
|
+
"help" false # show help message if true
|
|
373
|
+
|
|
325
374
|
===Longitude/Latitude Axes
|
|
326
375
|
---lon_ax( options=nil )
|
|
327
376
|
|
|
@@ -558,11 +607,12 @@ By default it is shown in the right margin of the viewport.
|
|
|
558
607
|
* dx: length of the legend line (not used if mark).
|
|
559
608
|
* nil : internally determined
|
|
560
609
|
* Float && > 0 : set explicitly
|
|
561
|
-
* vy: vy of the legend
|
|
610
|
+
* vy: vy of the legend
|
|
562
611
|
* nil : internally determined
|
|
563
612
|
* Float && > 0 : set explicitly
|
|
564
613
|
* Float && < 0 : move it relatively lower from the default
|
|
565
|
-
* first : if false
|
|
614
|
+
* first : if it is false and vy is nil, vy is internally determined
|
|
615
|
+
relatively from the previous vy setting.
|
|
566
616
|
* mark_size : size of the mark. if nil, size is used.
|
|
567
617
|
|
|
568
618
|
---quasi_log_levels_z(vals, nlev=nil, max=nil, min=nil, cycle=1)
|
|
@@ -653,23 +703,17 @@ module NumRu
|
|
|
653
703
|
# maximum data values (Integer)
|
|
654
704
|
# 'clr_max' 99 (if coloring) maximum color number for the
|
|
655
705
|
# maximum data values (Integer)
|
|
656
|
-
options
|
|
706
|
+
options ||= @@empty_hash
|
|
657
707
|
raise TypeError, "options must be a Hash" if !options.is_a?(Hash)
|
|
658
708
|
min = options['min']
|
|
659
709
|
max = options['max']
|
|
660
710
|
nlev = options['nlev']
|
|
661
711
|
interval = options['interval']
|
|
662
712
|
nozero = options['nozero']
|
|
663
|
-
|
|
664
|
-
dx = interval
|
|
665
|
-
elsif nlev
|
|
666
|
-
dx = -nlev
|
|
667
|
-
else
|
|
668
|
-
dx = 0
|
|
669
|
-
end
|
|
713
|
+
dx = interval || (nlev ? -nlev : 0)
|
|
670
714
|
if min || max
|
|
671
|
-
min
|
|
672
|
-
max
|
|
715
|
+
min ||= v.min
|
|
716
|
+
max ||= v.max
|
|
673
717
|
DCL.udgcla(min, max, dx)
|
|
674
718
|
else
|
|
675
719
|
DCL.udgclb(v, dx)
|
|
@@ -801,16 +845,10 @@ module NumRu
|
|
|
801
845
|
max = options['max']
|
|
802
846
|
nlev = options['nlev']
|
|
803
847
|
interval = options['interval']
|
|
804
|
-
|
|
805
|
-
dx = interval
|
|
806
|
-
elsif nlev
|
|
807
|
-
dx = -nlev
|
|
808
|
-
else
|
|
809
|
-
dx = 0
|
|
810
|
-
end
|
|
848
|
+
dx = interval || (nlev ? -nlev : 0)
|
|
811
849
|
if min || max
|
|
812
|
-
min
|
|
813
|
-
max
|
|
850
|
+
min ||= v.min
|
|
851
|
+
max ||= v.max
|
|
814
852
|
DCL.uegtla(min, max, dx)
|
|
815
853
|
else
|
|
816
854
|
v = v.reshape(v.length,1) if v.rank==1
|
|
@@ -866,42 +904,272 @@ module NumRu
|
|
|
866
904
|
# RELATIVELY INDEPENDENT OF DCL SUBLIBRARIES
|
|
867
905
|
############################################################
|
|
868
906
|
|
|
869
|
-
# <<<
|
|
907
|
+
# <<< Date and time axes (moved from dclext_datetime_ax.rb) >>>
|
|
870
908
|
|
|
871
|
-
@@
|
|
909
|
+
@@datetime_ax_options = Misc::KeywordOptAutoHelp.new(
|
|
872
910
|
['yax', false, 'true => y-axis, false => x-axis'],
|
|
873
911
|
['cside', nil, '"b", "t", "l", "r", nil (=>left/bottom), or false (=>right/top)'],
|
|
874
|
-
['dtick1',
|
|
875
|
-
['dtick2', nil, '
|
|
912
|
+
['dtick1', 1, 'small tick interval in hours'],
|
|
913
|
+
['dtick2', nil, 'large tick (with hour labels) interval in hours'],
|
|
914
|
+
['year', false, 'true => add year to date label'],
|
|
915
|
+
['month', true, 'true => add month to date label']
|
|
876
916
|
)
|
|
877
917
|
|
|
878
|
-
def
|
|
879
|
-
|
|
918
|
+
def datetime_ax(date_from, date_to, options=nil)
|
|
919
|
+
# date_from [a DateTime] : start on this date&time
|
|
920
|
+
# date_to [a DateTime] : end on this date&time
|
|
921
|
+
|
|
922
|
+
opt = @@datetime_ax_options.interpret(options)
|
|
880
923
|
|
|
881
924
|
yax = opt['yax']
|
|
882
925
|
xax = !yax
|
|
883
926
|
if xax
|
|
884
|
-
|
|
927
|
+
xy='x'
|
|
885
928
|
else
|
|
886
|
-
|
|
929
|
+
xy='y'
|
|
887
930
|
end
|
|
888
931
|
|
|
889
932
|
if opt['cside']
|
|
890
|
-
|
|
933
|
+
cside = opt['cside']
|
|
891
934
|
elsif opt['cside'].nil?
|
|
935
|
+
if xax
|
|
936
|
+
cside='b'
|
|
937
|
+
else
|
|
938
|
+
cside='l'
|
|
939
|
+
end
|
|
940
|
+
else
|
|
941
|
+
if xax
|
|
942
|
+
cside='t'
|
|
943
|
+
else
|
|
944
|
+
cside='r'
|
|
945
|
+
end
|
|
946
|
+
end
|
|
947
|
+
|
|
948
|
+
if opt['year']
|
|
949
|
+
datefmt = '%Y/%m/%d'
|
|
950
|
+
elsif opt['month']
|
|
951
|
+
datefmt = '%m/%d'
|
|
952
|
+
else
|
|
953
|
+
datefmt = '%d'
|
|
954
|
+
end
|
|
955
|
+
|
|
956
|
+
# < window parameters >
|
|
957
|
+
|
|
958
|
+
ux1,ux2,uy1,uy2 = DCL.sgqwnd
|
|
959
|
+
if xax
|
|
960
|
+
u1, u2 = ux1, ux2
|
|
961
|
+
else
|
|
962
|
+
u1, u2 = uy1, uy2
|
|
963
|
+
end
|
|
964
|
+
if u1 > u2
|
|
965
|
+
u1, u2 = u2, u1
|
|
966
|
+
end
|
|
967
|
+
|
|
968
|
+
loffset_save = DCL.uzpget('loffset')
|
|
969
|
+
xyfact_save = DCL.uzpget(xy+'fact')
|
|
970
|
+
xyoffset_save = DCL.uzpget(xy+'offset')
|
|
971
|
+
|
|
972
|
+
tu1 = date_from.day_fraction.to_f
|
|
973
|
+
range_day = date_to - date_from # time btwn start and end (in days)
|
|
974
|
+
tu2 = tu1 + range_day
|
|
975
|
+
|
|
976
|
+
# < axis in hours >
|
|
977
|
+
|
|
978
|
+
DCL.uzpset('loffset',true)
|
|
979
|
+
|
|
980
|
+
DCL.uzpset(xy+'fact',24.0)
|
|
981
|
+
DCL.uzpset(xy+'offset',(tu1-u1)*24)
|
|
982
|
+
|
|
983
|
+
dtick1 = opt['dtick1']
|
|
984
|
+
if opt['dtick2']
|
|
985
|
+
dtick2 = opt['dtick2']
|
|
986
|
+
else
|
|
987
|
+
if range_day >= 4
|
|
988
|
+
dtick2 = 24
|
|
989
|
+
elsif range_day >= 2
|
|
990
|
+
dtick2 = 12
|
|
991
|
+
elsif range_day >= 1
|
|
992
|
+
dtick2 = 6
|
|
993
|
+
elsif range_day >= 0.5
|
|
994
|
+
dtick2 = 3
|
|
995
|
+
elsif range_day >= 0.25
|
|
996
|
+
dtick2 = 2
|
|
997
|
+
else
|
|
998
|
+
dtick2 = 1
|
|
999
|
+
end
|
|
1000
|
+
end
|
|
1001
|
+
|
|
1002
|
+
str_hour = (tu1*24).ceil
|
|
1003
|
+
end_hour = (tu2*24).floor
|
|
1004
|
+
tick1=Array.new
|
|
1005
|
+
tick2=Array.new
|
|
1006
|
+
labels=Array.new
|
|
1007
|
+
h1 = str_hour + (-str_hour % dtick1)
|
|
1008
|
+
(h1..end_hour).step(dtick1){|i| tick1.push(i)}
|
|
1009
|
+
h2 = str_hour + (-str_hour % dtick2)
|
|
1010
|
+
(h2..end_hour).step(dtick2) do |i|
|
|
1011
|
+
tick2.push(i)
|
|
1012
|
+
labels.push((i%24).to_s)
|
|
1013
|
+
end
|
|
1014
|
+
if xax
|
|
1015
|
+
DCL.uxaxlb(cside, tick1, tick2, labels, 2)
|
|
1016
|
+
else
|
|
1017
|
+
irotl_save = DCL.uzpget('irotly'+cside)
|
|
1018
|
+
icent_save = DCL.uzpget('icenty'+cside)
|
|
1019
|
+
DCL.uzpset('irotly'+cside,1)
|
|
1020
|
+
DCL.uzpset('icenty'+cside,0)
|
|
1021
|
+
DCL.uyaxlb(cside, tick1, tick2, labels, 2)
|
|
1022
|
+
end
|
|
1023
|
+
|
|
1024
|
+
# < labels in days >
|
|
1025
|
+
|
|
1026
|
+
if DCL.uzpget('label'+xy+cside)
|
|
1027
|
+
DCL.uzpset(xy+'fact',1.0)
|
|
1028
|
+
DCL.uzpset(xy+'offset',0.0)
|
|
1029
|
+
|
|
1030
|
+
str_day = tu1.floor
|
|
1031
|
+
end_day = tu2.floor
|
|
1032
|
+
pos=Array.new
|
|
1033
|
+
labels=Array.new
|
|
1034
|
+
(str_day..end_day).step(1) do |i|
|
|
1035
|
+
u = i.to_f + 0.5 + (u1- tu1)
|
|
1036
|
+
u = (u1+u+0.5)/2 if u < u1
|
|
1037
|
+
u = (u2+u-0.5)/2 if u > u2
|
|
1038
|
+
pos.push(u)
|
|
1039
|
+
str = (date_from+i).strftime(datefmt)
|
|
1040
|
+
str.sub!(/^0/,'') if !opt['year'] && opt['month']
|
|
1041
|
+
labels.push(str)
|
|
1042
|
+
end
|
|
1043
|
+
|
|
892
1044
|
if xax
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
1045
|
+
DCL.uxsaxz(cside,DCL.uzpget('roffx'+cside))
|
|
1046
|
+
DCL.uxplbl(cside,1,pos,labels,10)
|
|
1047
|
+
else
|
|
1048
|
+
DCL.uysaxz(cside,DCL.uzpget('roffy'+cside))
|
|
1049
|
+
DCL.uyplbl(cside,1,pos,labels,10)
|
|
1050
|
+
# DCL.uzpset('irotly'+cside,irotl_save)
|
|
1051
|
+
# DCL.uzpset('icenty'+cside,icent_save)
|
|
1052
|
+
end
|
|
1053
|
+
|
|
1054
|
+
end
|
|
1055
|
+
|
|
1056
|
+
if xax
|
|
1057
|
+
else
|
|
1058
|
+
DCL.uzpset('irotly'+cside,irotl_save)
|
|
1059
|
+
DCL.uzpset('icenty'+cside,icent_save)
|
|
1060
|
+
end
|
|
1061
|
+
|
|
1062
|
+
# < to finish >
|
|
1063
|
+
|
|
1064
|
+
DCL.uzpset('loffset',loffset_save)
|
|
1065
|
+
DCL.uzpset(xy+'fact',xyfact_save)
|
|
1066
|
+
DCL.uzpset(xy+'offset',xyoffset_save)
|
|
1067
|
+
|
|
1068
|
+
end
|
|
1069
|
+
|
|
1070
|
+
# <<< Date axes >>>
|
|
1071
|
+
|
|
1072
|
+
@@date_ax_options = Misc::KeywordOptAutoHelp.new(
|
|
1073
|
+
['yax', false, 'true => y-axis, false => x-axis'],
|
|
1074
|
+
['cside', nil, '"b", "t", "l", "r", nil (=>left/bottom), or false (=>right/top)'],
|
|
1075
|
+
['margin_factor', 0.9, 'Factor to control the extent to use UCPACK; The smaller, the less, requiring more space between year labels'],
|
|
1076
|
+
['dtick1', nil, '(For long time series) small tick interval (years)'],
|
|
1077
|
+
['dtick2', nil, '(For long time series) large tick with year labels (years)']
|
|
1078
|
+
)
|
|
1079
|
+
|
|
1080
|
+
def date_ax(date_from, date_to, options=nil)
|
|
1081
|
+
# < intepret the options >
|
|
1082
|
+
opt = @@date_ax_options.interpret(options)
|
|
1083
|
+
|
|
1084
|
+
mfact = opt['margin_factor']
|
|
1085
|
+
|
|
1086
|
+
yax = opt['yax']
|
|
1087
|
+
xax = !yax
|
|
1088
|
+
if xax
|
|
1089
|
+
xy = 'x'
|
|
1090
|
+
cside= opt['cside'] || 'b'
|
|
897
1091
|
else
|
|
1092
|
+
xy = 'y'
|
|
1093
|
+
cside= opt['cside'] || 'l'
|
|
1094
|
+
end
|
|
1095
|
+
|
|
1096
|
+
# < examine the time period to see wheterh to use UCPACK >
|
|
1097
|
+
irot = DCL.uzpget("irotc"+xy+cside)
|
|
1098
|
+
rsize = DCL.uzpget("rsizel2")
|
|
1099
|
+
nday = date_to - date_from
|
|
1100
|
+
ny = nday / 365.25
|
|
1101
|
+
if (xax && irot%2 == 0) || (yax && irot%2 == 1)
|
|
1102
|
+
cw = (rsize*0.82)*4 # approximate width for 4 digits
|
|
1103
|
+
else
|
|
1104
|
+
cw = rsize
|
|
1105
|
+
end
|
|
1106
|
+
vx1,vx2,vy1,vy2 = DCL::sgqvpt
|
|
1107
|
+
if xax
|
|
1108
|
+
vw = (vx2-vx1)/ny
|
|
1109
|
+
else
|
|
1110
|
+
vw = (vy2-vy1)/ny
|
|
1111
|
+
end
|
|
1112
|
+
|
|
1113
|
+
use_ucpack = (cw <= vw*mfact)
|
|
1114
|
+
|
|
1115
|
+
# < draw the axes >
|
|
1116
|
+
if use_ucpack
|
|
1117
|
+
jd0 = date_from.strftime('%Y%m%d').to_i
|
|
898
1118
|
if xax
|
|
899
|
-
cside
|
|
1119
|
+
DCL.ucxacl(cside,jd0,nday)
|
|
900
1120
|
else
|
|
901
|
-
cside
|
|
1121
|
+
DCL.ucyacl(cside,jd0,nday)
|
|
902
1122
|
end
|
|
1123
|
+
else
|
|
1124
|
+
year_ax(xax, cside, date_from, date_to)
|
|
903
1125
|
end
|
|
904
1126
|
|
|
1127
|
+
end
|
|
1128
|
+
|
|
1129
|
+
def year_ax(xax, cside, date_from, date_to)
|
|
1130
|
+
y0 = date_from.year
|
|
1131
|
+
d0 = date_from.yday
|
|
1132
|
+
ry0 = y0 + ( date_from.leap? ? d0/366.0 : d0 / 365.0 )
|
|
1133
|
+
y1 = date_to.year
|
|
1134
|
+
d1 = date_to.yday
|
|
1135
|
+
ry1 = y1 + ( date_to.leap? ? d1/366.0 : d1 / 365.0 )
|
|
1136
|
+
if xax
|
|
1137
|
+
DCL.uzpset("xoffset",ry0)
|
|
1138
|
+
ux0,ux1, = DCL.sgqwnd
|
|
1139
|
+
DCL.uzpset("xfact",(ry1-ry0)/(ux1-ux0))
|
|
1140
|
+
DCL.usxaxs(cside)
|
|
1141
|
+
DCL.uzpset("xoffset",0.0)
|
|
1142
|
+
DCL.uzpset("xfact",1.0)
|
|
1143
|
+
else
|
|
1144
|
+
DCL.uzpset("yoffset",ry0)
|
|
1145
|
+
ux0,ux1,uy0,uy1 = DCL.sgqwnd
|
|
1146
|
+
DCL.uzpset("yfact",(ry1-ry0)/(uy1-uy0))
|
|
1147
|
+
DCL.usyaxs(cside)
|
|
1148
|
+
DCL.uzpset("yoffset",0.0)
|
|
1149
|
+
DCL.uzpset("yfact",1.0)
|
|
1150
|
+
end
|
|
1151
|
+
end
|
|
1152
|
+
|
|
1153
|
+
# <<< longitude/latitude axes package >>>
|
|
1154
|
+
|
|
1155
|
+
@@lon_ax_options = Misc::KeywordOptAutoHelp.new(
|
|
1156
|
+
['yax', false, 'true => y-axis, false => x-axis'],
|
|
1157
|
+
['cside', nil, '"b", "t", "l", "r", nil (=>left/bottom), or false (=>right/top)'],
|
|
1158
|
+
['dtick1', nil, 'Interval of small tickmark (if nil, internally determined)'],
|
|
1159
|
+
['dtick2', nil, 'Interval of large tickmark with labels (if nil, internally determined)']
|
|
1160
|
+
)
|
|
1161
|
+
|
|
1162
|
+
def lon_ax(options=nil)
|
|
1163
|
+
opt = @@lon_ax_options.interpret(options)
|
|
1164
|
+
|
|
1165
|
+
yax = opt['yax']
|
|
1166
|
+
xax = !yax
|
|
1167
|
+
xy = (xax ? 'x' : 'y')
|
|
1168
|
+
|
|
1169
|
+
cside = opt['cside']
|
|
1170
|
+
cside = (xax ? 'b' : 'l') if cside.nil?
|
|
1171
|
+
cside ||= (xax ? 't' : 'r') ### cside is false
|
|
1172
|
+
|
|
905
1173
|
vxmin, vxmax, vymin, vymax = DCL.sgqvpt
|
|
906
1174
|
uxmin, uxmax, uymin, uymax = DCL.sgqwnd
|
|
907
1175
|
if xax
|
|
@@ -930,38 +1198,30 @@ module NumRu
|
|
|
930
1198
|
|
|
931
1199
|
# generate numbers for small tickmarks
|
|
932
1200
|
nn = 0
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
x = rx
|
|
936
|
-
else
|
|
937
|
-
x = rx + dtick1
|
|
938
|
-
end
|
|
1201
|
+
x = DCL.irle(umin / dtick1) * dtick1
|
|
1202
|
+
x += dtick1 unless DCL.lreq(umin, x)
|
|
939
1203
|
u1 = []
|
|
940
1204
|
while DCL.lrle(x,umax)
|
|
941
1205
|
if x.abs < dtick1*repsl*nn
|
|
942
1206
|
x = 0.0
|
|
943
1207
|
end
|
|
944
1208
|
u1[nn] = x
|
|
945
|
-
nn
|
|
946
|
-
x
|
|
1209
|
+
nn += 1
|
|
1210
|
+
x += dtick1
|
|
947
1211
|
end
|
|
948
1212
|
|
|
949
1213
|
# generate numbers for large tickmarks and labels
|
|
950
1214
|
nn = 0
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
x = rx
|
|
954
|
-
else
|
|
955
|
-
x = rx + dtick2
|
|
956
|
-
end
|
|
1215
|
+
x = DCL.irle(umin / dtick2) * dtick2
|
|
1216
|
+
x += dtick2 unless DCL.lreq(umin, x)
|
|
957
1217
|
u2 = []
|
|
958
1218
|
while DCL.lrle(x,umax)
|
|
959
1219
|
if x.abs < dtick2*repsl*nn
|
|
960
1220
|
x = 0
|
|
961
1221
|
end
|
|
962
1222
|
u2[nn] = x
|
|
963
|
-
nn
|
|
964
|
-
x
|
|
1223
|
+
nn += 1
|
|
1224
|
+
x += dtick2
|
|
965
1225
|
end
|
|
966
1226
|
|
|
967
1227
|
# generate labels
|
|
@@ -981,11 +1241,9 @@ module NumRu
|
|
|
981
1241
|
nc = c2.collect{|c| c.size}.max
|
|
982
1242
|
|
|
983
1243
|
# call DCL.u[xy]axlb
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
DCL.uyaxlb(cside,u1,u2,c2,nc)
|
|
988
|
-
end
|
|
1244
|
+
DCL.__send__(xax ? :uxaxlb : :uyaxlb , cside, u1, u2, c2, nc)
|
|
1245
|
+
|
|
1246
|
+
DCL.glpset('lepsl', lepsl) # restore original value
|
|
989
1247
|
end
|
|
990
1248
|
|
|
991
1249
|
@@lat_ax_options = Misc::KeywordOptAutoHelp.new(
|
|
@@ -1000,27 +1258,11 @@ module NumRu
|
|
|
1000
1258
|
|
|
1001
1259
|
xax = opt['xax']
|
|
1002
1260
|
yax = !xax
|
|
1003
|
-
|
|
1004
|
-
xy='x'
|
|
1005
|
-
else
|
|
1006
|
-
xy='y'
|
|
1007
|
-
end
|
|
1261
|
+
xy = (xax ? 'x' : 'y')
|
|
1008
1262
|
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
if xax
|
|
1013
|
-
cside='b'
|
|
1014
|
-
else
|
|
1015
|
-
cside='l'
|
|
1016
|
-
end
|
|
1017
|
-
else
|
|
1018
|
-
if xax
|
|
1019
|
-
cside='t'
|
|
1020
|
-
else
|
|
1021
|
-
cside='r'
|
|
1022
|
-
end
|
|
1023
|
-
end
|
|
1263
|
+
cside = opt['cside']
|
|
1264
|
+
cside = (xax ? 'b' : 'l') if cside.nil?
|
|
1265
|
+
cside ||= (xax ? 't' : 'r') ### cside is false
|
|
1024
1266
|
|
|
1025
1267
|
vxmin, vxmax, vymin, vymax = DCL.sgqvpt
|
|
1026
1268
|
uxmin, uxmax, uymin, uymax = DCL.sgqwnd
|
|
@@ -1050,38 +1292,30 @@ module NumRu
|
|
|
1050
1292
|
|
|
1051
1293
|
# generate numbers for small tickmarks
|
|
1052
1294
|
nn = 0
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
x = rx
|
|
1056
|
-
else
|
|
1057
|
-
x = rx + dtick1
|
|
1058
|
-
end
|
|
1295
|
+
x = DCL.irle(umin / dtick1) * dtick1
|
|
1296
|
+
x += dtick1 unless DCL.lreq(umin, x)
|
|
1059
1297
|
u1 = []
|
|
1060
1298
|
while DCL.lrle(x,umax)
|
|
1061
1299
|
if x.abs < dtick1*repsl*nn
|
|
1062
1300
|
x = 0.0
|
|
1063
1301
|
end
|
|
1064
1302
|
u1[nn] = x
|
|
1065
|
-
nn
|
|
1066
|
-
x
|
|
1303
|
+
nn += 1
|
|
1304
|
+
x += dtick1
|
|
1067
1305
|
end
|
|
1068
1306
|
|
|
1069
1307
|
# generate numbers for large tickmarks and labels
|
|
1070
1308
|
nn = 0
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
x = rx
|
|
1074
|
-
else
|
|
1075
|
-
x = rx + dtick2
|
|
1076
|
-
end
|
|
1309
|
+
x = DCL.irle(umin / dtick2) * dtick2
|
|
1310
|
+
x += dtick2 unless DCL.lreq(umin, x)
|
|
1077
1311
|
u2 = []
|
|
1078
1312
|
while DCL.lrle(x,umax)
|
|
1079
1313
|
if x.abs < dtick2*repsl*nn
|
|
1080
1314
|
x = 0
|
|
1081
1315
|
end
|
|
1082
1316
|
u2[nn] = x
|
|
1083
|
-
nn
|
|
1084
|
-
x
|
|
1317
|
+
nn += 1
|
|
1318
|
+
x += dtick2
|
|
1085
1319
|
end
|
|
1086
1320
|
|
|
1087
1321
|
# generate labels
|
|
@@ -1098,11 +1332,9 @@ module NumRu
|
|
|
1098
1332
|
nc = c2.collect{|c| c.size}.max
|
|
1099
1333
|
|
|
1100
1334
|
# call DCL.u[xy]axlb
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
DCL.uyaxlb(cside,u1,u2,c2,nc)
|
|
1105
|
-
end
|
|
1335
|
+
DCL.__send__(xax ? :uxaxlb : :uyaxlb , cside, u1, u2, c2, nc)
|
|
1336
|
+
|
|
1337
|
+
DCL.glpset('lepsl', lepsl) # restore original value
|
|
1106
1338
|
end
|
|
1107
1339
|
|
|
1108
1340
|
# <<< flow vector package >>>
|
|
@@ -1163,19 +1395,23 @@ module NumRu
|
|
|
1163
1395
|
|
|
1164
1396
|
#< unit vector >
|
|
1165
1397
|
if fxunit
|
|
1166
|
-
vxunit = vxfxratio * fxunit
|
|
1398
|
+
vxunit = (vxfxratio * fxunit).abs
|
|
1167
1399
|
else
|
|
1168
1400
|
fxunit = vxunit / vxfxratio
|
|
1169
1401
|
end
|
|
1170
1402
|
if fyunit
|
|
1171
|
-
vyunit = vyfyratio * fyunit
|
|
1403
|
+
vyunit = (vyfyratio * fyunit).abs
|
|
1172
1404
|
else
|
|
1173
1405
|
fyunit = vyunit / vyfyratio
|
|
1174
1406
|
end
|
|
1175
|
-
fxunit
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1407
|
+
if fxunit != 0
|
|
1408
|
+
fxunit = __truncate( (uxusv=fxunit) )
|
|
1409
|
+
vxunit = vxunit * (fxunit/uxusv)
|
|
1410
|
+
end
|
|
1411
|
+
if fyunit != 0
|
|
1412
|
+
fyunit = __truncate( (uyusv=fyunit) )
|
|
1413
|
+
vyunit = vyunit * (fyunit/uyusv)
|
|
1414
|
+
end
|
|
1179
1415
|
if !(vxuloc && vyuloc)
|
|
1180
1416
|
vx0,vx1,vy0,vy1 = DCL.sgqvpt
|
|
1181
1417
|
vxuloc = vx1 + opt['vxuoff'] if !vxuloc
|
|
@@ -1189,10 +1425,14 @@ module NumRu
|
|
|
1189
1425
|
sfyunit = sprintf("%.2g",fyunit)
|
|
1190
1426
|
rsizet = DCL.uzpget('rsizel1') if !rsizet
|
|
1191
1427
|
if opt['inplace']
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1428
|
+
if vxunit != 0
|
|
1429
|
+
DCL.sgtxzv(vxuloc, vyuloc-1.2*rsizet,
|
|
1430
|
+
sfxunit, rsizet, 0, -1, index)
|
|
1431
|
+
end
|
|
1432
|
+
if vyunit != 0
|
|
1433
|
+
DCL.sgtxzv(vxuloc+1.2*rsizet, vyuloc+0.5*rsizet,
|
|
1434
|
+
sfyunit, rsizet, 90, -1, index)
|
|
1435
|
+
end
|
|
1196
1436
|
else
|
|
1197
1437
|
msg= "UNIT VECTOR X:#{sfxunit} Y:#{sfyunit}"
|
|
1198
1438
|
before = uz_set_params({'rsizec1'=>rsizet})
|
|
@@ -1226,8 +1466,7 @@ module NumRu
|
|
|
1226
1466
|
vlen = vfratio * flen
|
|
1227
1467
|
label = DCL.chval("B",flen)
|
|
1228
1468
|
|
|
1229
|
-
lclip_bk =
|
|
1230
|
-
DCL::sglset("lclip", false)
|
|
1469
|
+
lclip_bk = DCLExt.sg_set_params("lclip" => false)
|
|
1231
1470
|
if vertical
|
|
1232
1471
|
DCL.sglazv( vxuloc, vyuloc, vxuloc, vyuloc+vlen, 1, index )
|
|
1233
1472
|
DCL.sgtxzv( vxuloc+1.2*rsizet, vyuloc+0.4*vlen,
|
|
@@ -1237,7 +1476,7 @@ module NumRu
|
|
|
1237
1476
|
DCL.sgtxzv( vxuloc+0.4*vlen, vyuloc-1.2*rsizet,
|
|
1238
1477
|
label, rsizet, 0, 0, index)
|
|
1239
1478
|
end
|
|
1240
|
-
|
|
1479
|
+
DCLExt.sg_set_params(lclip_bk)
|
|
1241
1480
|
nil
|
|
1242
1481
|
end
|
|
1243
1482
|
|
|
@@ -1274,7 +1513,7 @@ module NumRu
|
|
|
1274
1513
|
fymx = fy.abs.max
|
|
1275
1514
|
raise "fx has no data or all zero" if fxmx == 0
|
|
1276
1515
|
raise "fy has no data or all zero" if fymx == 0
|
|
1277
|
-
cn = [ dvx/(ax*fxmx), dvy/(ay*fymx) ].min #
|
|
1516
|
+
cn = [ (dvx/(ax*fxmx)).abs, (dvy/(ay*fymx)).abs ].min # normalztn const
|
|
1278
1517
|
vxfxratio = factor*cn*ax if !vxfxratio
|
|
1279
1518
|
vyfyratio = factor*cn*ay if !vyfyratio
|
|
1280
1519
|
before = ug_set_params( {'LNRMAL'=>false, 'LMSG'=>false,
|
|
@@ -1287,7 +1526,7 @@ module NumRu
|
|
|
1287
1526
|
|
|
1288
1527
|
def flow_vect_anyproj(fx, fy, xg, yg,
|
|
1289
1528
|
factor=1.0, xintv=1, yintv=1,
|
|
1290
|
-
distvect_map=true, vfratio=nil, polar_thinning=nil)
|
|
1529
|
+
distvect_map=true, vfratio=nil, flenmax=nil, polar_thinning=nil)
|
|
1291
1530
|
|
|
1292
1531
|
#< parameters to handle singularity of the projection >
|
|
1293
1532
|
|
|
@@ -1355,8 +1594,13 @@ module NumRu
|
|
|
1355
1594
|
else
|
|
1356
1595
|
ux0,ux1,uy0,uy1 = wnd
|
|
1357
1596
|
end
|
|
1597
|
+
|
|
1358
1598
|
flen = Misc::EMath.sqrt( fx*fx + fy*fy )
|
|
1359
|
-
|
|
1599
|
+
|
|
1600
|
+
if !flenmax
|
|
1601
|
+
flenmax = flen.max
|
|
1602
|
+
end
|
|
1603
|
+
|
|
1360
1604
|
if !vfratio
|
|
1361
1605
|
vx0,vx1,vy0,vy1 = DCL.sgqvpt
|
|
1362
1606
|
dvf = Math::sqrt( (vx1-vx0)*(vy1-vy0)/nx/ny )
|
|
@@ -1408,8 +1652,8 @@ module NumRu
|
|
|
1408
1652
|
(0...nx).step(xstep) do |i|
|
|
1409
1653
|
x = ( xg.rank==1 ? xg[i] : xg[i,j] )
|
|
1410
1654
|
y = ( yg.rank==1 ? yg[j] : yg[i,j] )
|
|
1411
|
-
if ( ( fx.is_a?(NArrayMiss) && !fx.valid?
|
|
1412
|
-
( fy.is_a?(NArrayMiss) && !fy.valid?
|
|
1655
|
+
if ( ( fx.is_a?(NArrayMiss) && !fx.valid?[i,j] ) ||
|
|
1656
|
+
( fy.is_a?(NArrayMiss) && !fy.valid?[i,j] ) )
|
|
1413
1657
|
DCL.sgpmzu([x],[y],itype2,index,rsizem) if lmissp
|
|
1414
1658
|
next
|
|
1415
1659
|
end
|
|
@@ -1556,7 +1800,7 @@ module NumRu
|
|
|
1556
1800
|
end
|
|
1557
1801
|
|
|
1558
1802
|
def level_chval_fmt(max,min,dx)
|
|
1559
|
-
# returns a format for DCL.chval suitable for color-
|
|
1803
|
+
# returns a format for DCL.chval suitable for color-bar labels
|
|
1560
1804
|
dxabs = dx.abs
|
|
1561
1805
|
eps = 1e-4 * dxabs
|
|
1562
1806
|
order = log10_or_0(dxabs).floor
|
|
@@ -1602,11 +1846,7 @@ module NumRu
|
|
|
1602
1846
|
fg = 'f'
|
|
1603
1847
|
else
|
|
1604
1848
|
n = log10_or_0(x.abs).floor
|
|
1605
|
-
|
|
1606
|
-
fg = 'f'
|
|
1607
|
-
else
|
|
1608
|
-
fg = 'g'
|
|
1609
|
-
end
|
|
1849
|
+
fg = ((0 <= n) && (n <= 4)) ? 'f' : 'g'
|
|
1610
1850
|
end
|
|
1611
1851
|
eps = 1e-6
|
|
1612
1852
|
if ( dx.abs % 10**log10_or_0(dx.abs) < eps )
|
|
@@ -1627,6 +1867,136 @@ module NumRu
|
|
|
1627
1867
|
sprintf(fmt,x).sub(/\.0*$/,'')
|
|
1628
1868
|
end
|
|
1629
1869
|
|
|
1870
|
+
def get_proj_params
|
|
1871
|
+
{ :itr => DCL::sgqtrn,
|
|
1872
|
+
:vpt => DCL::sgqvpt,
|
|
1873
|
+
:wnd => DCL::sgqwnd,
|
|
1874
|
+
:sim => DCL::sgqsim,
|
|
1875
|
+
:cnt => DCL::umqcnt,
|
|
1876
|
+
:lglobe => DCL::umpget('lglobe'),
|
|
1877
|
+
:rsat => DCL::sgpget("rsat"),
|
|
1878
|
+
:txy => %w(txmin txmax tymin tymax).map{|key| DCL::sgrget(key)} }
|
|
1879
|
+
end
|
|
1880
|
+
|
|
1881
|
+
def restore_proj_params(hash) # hash: OUTPUT OF DCLExt::get_proj_params
|
|
1882
|
+
DCL::grsvpt(*(hash[:vpt]))
|
|
1883
|
+
DCL::grswnd(*(hash[:wnd]))
|
|
1884
|
+
if hash[:itr] <= 4
|
|
1885
|
+
DCL::grstrn(hash[:itr])
|
|
1886
|
+
elsif hash[:itr] <= 9
|
|
1887
|
+
DCL::sgssim(*(hash[:sim]))
|
|
1888
|
+
DCL::grstrn(hash[:itr])
|
|
1889
|
+
elsif hash[:itr] <= 34
|
|
1890
|
+
DCL::sgstrn(hash[:itr])
|
|
1891
|
+
DCL::umpset("lglobe", hash[:lglobe])
|
|
1892
|
+
DCL::grstxy(*(hash[:txy]))
|
|
1893
|
+
DCL::umscnt(*(hash[:cnt]))
|
|
1894
|
+
DCL::sgpset("rsat", hash[:rsat])
|
|
1895
|
+
DCL::umpfit
|
|
1896
|
+
DCL::sgssim(*(hash[:sim]))
|
|
1897
|
+
end
|
|
1898
|
+
DCL::grstrf
|
|
1899
|
+
end
|
|
1900
|
+
|
|
1901
|
+
def color_bar_draw_infinity(vxmin, vxmax, vymin, vymax, vwidth, portrait, inffact, sign, ipat, index)
|
|
1902
|
+
sign = (sign > 0) ? 1 : -1
|
|
1903
|
+
win = [vxmin, vxmax, vymin, vymax]
|
|
1904
|
+
win = win[2..3] + win[0..1] if portrait
|
|
1905
|
+
base = ((sign < 0) ? win[0] : win[1])
|
|
1906
|
+
v3 = [[base, base + vwidth * inffact * sign, base],
|
|
1907
|
+
[win[2], (win[2] + win[3]) / 2, win[3]]]
|
|
1908
|
+
v3 = [v3[1], v3[0]] if portrait
|
|
1909
|
+
DCL.sgtnzv(v3[0], v3[1], ipat)
|
|
1910
|
+
DCL.sgplzv(v3[0], v3[1], 1, index)
|
|
1911
|
+
end
|
|
1912
|
+
|
|
1913
|
+
def color_bar_title_units(vxmin, vxmax, vymin, vymax, portrait, voff, title, units, title_voff, units_voff)
|
|
1914
|
+
rsizel1 = DCL::uzrget('rsizel1')
|
|
1915
|
+
charindex = DCL::uziget('indexl1')
|
|
1916
|
+
pad1 = DCL::uzrget('pad1')
|
|
1917
|
+
if portrait
|
|
1918
|
+
if voff > 0
|
|
1919
|
+
# title
|
|
1920
|
+
DCL::sgtxzr(vxmin - (0.5 + pad1) * rsizel1, (vymin + vymax) / 2.0 + title_voff, title, rsizel1, 90, 0, charindex) if title
|
|
1921
|
+
# units
|
|
1922
|
+
DCL::sgtxzr(vxmax + pad1 * rsizel1, vymax + 2.6 * rsizel1 + units_voff, units, rsizel1, 0, -1, charindex) if units
|
|
1923
|
+
else
|
|
1924
|
+
# title
|
|
1925
|
+
DCL::sgtxzr(vxmax + (0.5 + pad1) * rsizel1, (vymin + vymax) / 2.0 - title_voff, title, rsizel1, -90, 0, charindex) if title
|
|
1926
|
+
# units
|
|
1927
|
+
DCL::sgtxzr(vxmin - pad1 * rsizel1, vymax + 2.6 * rsizel1 + units_voff, units, rsizel1, 0, 1, charindex) if units
|
|
1928
|
+
end
|
|
1929
|
+
else
|
|
1930
|
+
spacer = (0.5 + pad1) * rsizel1
|
|
1931
|
+
tmpvy = [vymin - spacer, vymax + spacer]
|
|
1932
|
+
tmpvy = [tmpvy[1], tmpvy[0]] if voff <= 0
|
|
1933
|
+
# title
|
|
1934
|
+
DCL::sgtxzr((vxmin + vxmax) / 2.0 + title_voff, tmpvy[0], title, rsizel1, 0, 0, charindex) if title
|
|
1935
|
+
# units
|
|
1936
|
+
DCL::sgtxzr(vxmax + 2.6 * rsizel1 + units_voff, tmpvy[1], units, rsizel1, 0, -1, charindex) if units
|
|
1937
|
+
end
|
|
1938
|
+
end
|
|
1939
|
+
|
|
1940
|
+
def color_bar_dual_log(levels, lv, patterns, portrait, opt)
|
|
1941
|
+
rmiss = DCL::glrget("rmiss")
|
|
1942
|
+
vx1, vx2, vy1, vy2 = DCL::sgqvpt
|
|
1943
|
+
iturn = 0
|
|
1944
|
+
for i in 0...levels.length
|
|
1945
|
+
if levels[i] != rmiss
|
|
1946
|
+
if levels[i] * lv[0] < 0
|
|
1947
|
+
iturn = i
|
|
1948
|
+
break
|
|
1949
|
+
end
|
|
1950
|
+
end
|
|
1951
|
+
end
|
|
1952
|
+
opt['vlength'] /= 2
|
|
1953
|
+
vc0 = opt['vcent'] || ( portrait && (vy1 + vy2) / 2) || (vx1 + vx2) / 2
|
|
1954
|
+
|
|
1955
|
+
zs = (portrait ? (opt["left"] ? "yl" : 'yr') : (opt["top"] ? "xt" : 'xb'))
|
|
1956
|
+
zssign = (zs == "xb" || zs == "yl") ? -1 : 1
|
|
1957
|
+
opt["voff"] ||=
|
|
1958
|
+
DCL.uzrget('pad1') * DCL::uzrget("rsizec2") + DCL::uzrget("roff#{zs}") * zssign
|
|
1959
|
+
|
|
1960
|
+
vsep2 = 0.02
|
|
1961
|
+
|
|
1962
|
+
has_zero = (levels[iturn - 1] == 0) # zero might be located just before the sign changes
|
|
1963
|
+
opt['levels'] = levels[0..(iturn - (has_zero ? 2 : 1))]
|
|
1964
|
+
opt['patterns'] = patterns[0..(iturn - (has_zero ? 3 : 2))]
|
|
1965
|
+
opt['vcent'] = vc0 - opt['vlength'] / 2 - vsep2
|
|
1966
|
+
units = opt['units']
|
|
1967
|
+
opt['units'] = nil
|
|
1968
|
+
DCLExt.color_bar(opt)
|
|
1969
|
+
|
|
1970
|
+
opt['levels'] = levels[iturn..-1]
|
|
1971
|
+
opt['patterns'] = patterns[iturn..-1]
|
|
1972
|
+
opt['vcent'] = vc0 + opt['vlength'] / 2 + vsep2
|
|
1973
|
+
opt['units'] = units
|
|
1974
|
+
DCLExt.color_bar(opt)
|
|
1975
|
+
|
|
1976
|
+
# fill between the two bars
|
|
1977
|
+
bk = DCLExt.sg_set_params('lclip' => false)
|
|
1978
|
+
(has_zero ? 2 : 1).times{|i|
|
|
1979
|
+
if portrait
|
|
1980
|
+
sign = opt["left"] ? -1 : 1
|
|
1981
|
+
base = opt["left"] ? vx1 : vx2
|
|
1982
|
+
x1 = base + opt["voff"] * sign
|
|
1983
|
+
x2 = x1 + opt['vwidth'] * sign
|
|
1984
|
+
y1 = vc0 - ((has_zero && (i == 0)) ? 0 : vsep2)
|
|
1985
|
+
y2 = vc0 + ((has_zero && (i == 1)) ? 0 : vsep2)
|
|
1986
|
+
else
|
|
1987
|
+
x1 = vc0 - ((has_zero && (i == 0)) ? 0 : vsep2)
|
|
1988
|
+
x2 = vc0 + ((has_zero && (i == 1)) ? 0 : vsep2)
|
|
1989
|
+
sign = opt["top"] ? 1 : -1
|
|
1990
|
+
base = opt["top"] ? vy2 : vy1
|
|
1991
|
+
y1 = base + opt["voff"] * sign
|
|
1992
|
+
y2 = y1 + opt['vwidth'] * sign
|
|
1993
|
+
end
|
|
1994
|
+
DCL.sgtnzv([x1, x2, x2, x1], [y1, y1, y2, y2], patterns[iturn - 1 - (has_zero ? i : 0)])
|
|
1995
|
+
DCL.sgplzv([x1, x2, x2, x1, x1], [y1, y1, y2, y2, y1], 1, 3)
|
|
1996
|
+
}
|
|
1997
|
+
DCLExt.sg_set_params(bk)
|
|
1998
|
+
end
|
|
1999
|
+
|
|
1630
2000
|
def color_bar(options=nil)
|
|
1631
2001
|
|
|
1632
2002
|
# < set parameters >
|
|
@@ -1644,55 +2014,34 @@ module NumRu
|
|
|
1644
2014
|
end
|
|
1645
2015
|
|
|
1646
2016
|
landscape = opt["landscape"] || !opt["portrait"]
|
|
1647
|
-
portrait = !
|
|
2017
|
+
portrait = !landscape
|
|
1648
2018
|
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
end
|
|
2019
|
+
|
|
2020
|
+
ue_set_tone(levels, patterns) if !levels.nil?
|
|
1652
2021
|
|
|
1653
2022
|
labels_ud = opt["labels_ud"]
|
|
1654
|
-
if !labels_ud.nil?
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
end
|
|
1667
|
-
|
|
1668
|
-
if opt["index"]
|
|
1669
|
-
index = opt["index"]
|
|
1670
|
-
index = 1 if index <= 0
|
|
1671
|
-
else
|
|
1672
|
-
index = DCL::uziget("indext2")
|
|
1673
|
-
end
|
|
1674
|
-
indext1_bk = DCL::uziget("indext1")
|
|
1675
|
-
indext2_bk = DCL::uziget("indext2")
|
|
1676
|
-
DCL::uziset("indext1",index)
|
|
1677
|
-
DCL::uziset("indext2",index)
|
|
1678
|
-
|
|
1679
|
-
if opt["charindex"]
|
|
1680
|
-
charindex = opt["charindex"]
|
|
1681
|
-
charindex = 1 if charindex <= 0
|
|
1682
|
-
else
|
|
1683
|
-
charindex = DCL::uziget("indexl1")
|
|
1684
|
-
end
|
|
1685
|
-
indexl1_bk = DCL::uziget("indexl1")
|
|
1686
|
-
DCL::uziset("indexl1",charindex)
|
|
1687
|
-
|
|
2023
|
+
if (!labels_ud.nil? &&
|
|
2024
|
+
((labels_ud.class != Array) ||
|
|
2025
|
+
labels_ud.empty? ||
|
|
2026
|
+
labels_ud.map{|lud| lud.class == String}.include?(false)))
|
|
2027
|
+
raise ArgumentError, "'labels_ud' must be an Array of String"
|
|
2028
|
+
end
|
|
2029
|
+
|
|
2030
|
+
# apply optional parameters for axes and labels
|
|
2031
|
+
index = opt["index"] || DCL::uziget("indext2")
|
|
2032
|
+
index = 1 if index <= 0
|
|
2033
|
+
charindex = opt["charindex"] || DCL::uziget("indexl1")
|
|
2034
|
+
charindex = 1 if charindex <= 0
|
|
1688
2035
|
charfact = opt["charfact"]
|
|
1689
|
-
|
|
1690
|
-
DCL::
|
|
2036
|
+
charfact = 1 if charfact < 0
|
|
2037
|
+
rsizel1 = charfact * DCL::uzrget("rsizel1")
|
|
2038
|
+
axparam_bk = DCLExt.uz_set_params("indext1" => index,
|
|
2039
|
+
"indext2" => index,
|
|
2040
|
+
"indexl1" => charindex,
|
|
2041
|
+
"rsizel1" => rsizel1)
|
|
1691
2042
|
|
|
1692
2043
|
nton = DCL::ueqntl
|
|
1693
|
-
if nton==0
|
|
1694
|
-
raise "no tone patern was set\n"
|
|
1695
|
-
end
|
|
2044
|
+
raise "no tone patern was set\n" if nton == 0
|
|
1696
2045
|
lev1 = Array.new
|
|
1697
2046
|
lev2 = Array.new
|
|
1698
2047
|
patterns = Array.new if !opt['patterns']
|
|
@@ -1710,7 +2059,7 @@ module NumRu
|
|
|
1710
2059
|
# raise "levels is not in order\n"
|
|
1711
2060
|
#end
|
|
1712
2061
|
|
|
1713
|
-
levels
|
|
2062
|
+
levels ||= lev1.push(lev2[-1])
|
|
1714
2063
|
levels = NArray.to_na(levels) if levels.is_a?(Array)
|
|
1715
2064
|
patterns = NArray.to_na(patterns) if patterns.is_a?(Array)
|
|
1716
2065
|
|
|
@@ -1718,91 +2067,32 @@ module NumRu
|
|
|
1718
2067
|
|
|
1719
2068
|
if opt['log']
|
|
1720
2069
|
lv = levels[levels.ne(rmiss).where]
|
|
1721
|
-
if lv.length >= 4 && lv[0]*lv[-1]<0
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
if levels[i] != rmiss
|
|
1725
|
-
if levels[i]*lv[0] < 0
|
|
1726
|
-
iturn = i
|
|
1727
|
-
break
|
|
1728
|
-
end
|
|
1729
|
-
end
|
|
1730
|
-
end
|
|
1731
|
-
opt['vlength'] /= 2
|
|
1732
|
-
vc0 = opt['vcent'] || ( portrait && (vy1+vy2)/2) || (vx1+vx2)/2
|
|
1733
|
-
|
|
1734
|
-
opt["voff"] ||=
|
|
1735
|
-
DCL.uzrget('pad1')*DCL::uzrget("rsizec2") +
|
|
1736
|
-
( portrait ? DCL.uzrget('roffyr') : - DCL.uzrget('roffxb') )
|
|
1737
|
-
|
|
1738
|
-
vsep2 = 0.02
|
|
1739
|
-
|
|
1740
|
-
opt['levels'] = levels[0..iturn-1]
|
|
1741
|
-
opt['patterns'] = patterns[0..iturn-2]
|
|
1742
|
-
opt['vcent'] = vc0 - opt['vlength']/2 - vsep2
|
|
1743
|
-
units = opt['units']
|
|
1744
|
-
opt['units'] = nil
|
|
1745
|
-
color_bar(opt)
|
|
1746
|
-
|
|
1747
|
-
opt['levels'] = levels[iturn..-1]
|
|
1748
|
-
opt['patterns'] = patterns[iturn..-1]
|
|
1749
|
-
opt['vcent'] = vc0 + opt['vlength']/2 + vsep2
|
|
1750
|
-
opt['units'] = units
|
|
1751
|
-
color_bar(opt)
|
|
1752
|
-
|
|
1753
|
-
# fill between the two bars
|
|
1754
|
-
if portrait
|
|
1755
|
-
x1 = vx2 + opt["voff"]
|
|
1756
|
-
x2 = x1 + opt['vwidth']
|
|
1757
|
-
y1 = vc0 - vsep2
|
|
1758
|
-
y2 = vc0 + vsep2
|
|
1759
|
-
else
|
|
1760
|
-
x1 = vc0 - vsep2
|
|
1761
|
-
x2 = vc0 + vsep2
|
|
1762
|
-
y1 = vy1 - opt["voff"]
|
|
1763
|
-
y2 = y1 - opt['vwidth']
|
|
1764
|
-
end
|
|
1765
|
-
bk = DCLExt.sg_set_params({'lclip'=>false})
|
|
1766
|
-
DCL.sgtnzv([x1,x2,x2,x1],[y1,y1,y2,y2],patterns[iturn-1])
|
|
1767
|
-
DCL.sgplzv([x1,x2,x2,x1,x1],[y1,y1,y2,y2,y1],1,3)
|
|
1768
|
-
DCLExt.sg_set_params(bk)
|
|
2070
|
+
if lv.length >= 4 && lv[0] * lv[-1] < 0 # log for both positive and negative
|
|
2071
|
+
DCLExt.color_bar_dual_log(levels, lv, patterns, portrait, opt)
|
|
2072
|
+
DCLExt.uz_set_params(axparam_bk)
|
|
1769
2073
|
return
|
|
1770
2074
|
end
|
|
1771
2075
|
end
|
|
1772
2076
|
|
|
1773
2077
|
if levels.length <= 1
|
|
1774
2078
|
$stderr.print( "WARNING #{__FILE__}:#{__LINE__}: # of levels <= 1. No color bar is drawn." )
|
|
2079
|
+
DCLExt.uz_set_params(axparam_bk)
|
|
1775
2080
|
return
|
|
1776
2081
|
end
|
|
1777
2082
|
|
|
1778
|
-
# BACKUP
|
|
1779
|
-
itrsv = DCL::sgqtrn
|
|
1780
|
-
if itrsv <= 4
|
|
1781
|
-
ux1sv, ux2sv, uy1sv, uy2sv = DCL.sgqwnd
|
|
1782
|
-
elsif itrsv <= 9
|
|
1783
|
-
simfacsv, vxoffsv, vyoffsv = DCL.sgqsim
|
|
1784
|
-
else
|
|
1785
|
-
ux1sv, ux2sv, uy1sv, uy2sv = DCL.sgqwnd
|
|
1786
|
-
simfacsv, vxoffsv, vyoffsv = DCL.sgqsim
|
|
1787
|
-
#plxsv, plysv, plrotsv = DCL.sgqmpl()
|
|
1788
|
-
plxsv, plysv, plrotsv = DCL.umqcnt
|
|
1789
|
-
lglobesv = DCL::umpget('lglobe')
|
|
1790
|
-
grstxysv = %w(txmin txmax tymin tymax).map{|key| DCL::sgrget(key)}
|
|
1791
|
-
end
|
|
1792
|
-
# END OF BACKUP
|
|
2083
|
+
proj_params = DCLExt.get_proj_params # BACKUP PARAMS FOR PROJECTION
|
|
1793
2084
|
|
|
1794
2085
|
vwidth = opt["vwidth"]
|
|
1795
2086
|
vlength = opt["vlength"]
|
|
1796
2087
|
|
|
2088
|
+
# compute offset from main diagram
|
|
1797
2089
|
if portrait
|
|
1798
|
-
if !opt["left"]
|
|
1799
|
-
# left
|
|
2090
|
+
if !opt["left"] # right
|
|
1800
2091
|
voff = opt["voff"] ||
|
|
1801
2092
|
DCL.uzrget('roffyr') + DCL.uzrget('pad1')*DCL::uzrget("rsizec2")
|
|
1802
2093
|
vxmin = vx2 + voff
|
|
1803
2094
|
vxmax = vx2 + voff + vwidth
|
|
1804
|
-
else
|
|
1805
|
-
# right
|
|
2095
|
+
else # left
|
|
1806
2096
|
voff = opt["voff"] ? -opt["voff"] : \
|
|
1807
2097
|
DCL.uzrget('roffyl') - DCL.uzrget('pad1')*DCL::uzrget("rsizec2")
|
|
1808
2098
|
vxmax = vx1 + voff
|
|
@@ -1811,16 +2101,14 @@ module NumRu
|
|
|
1811
2101
|
vymin =( opt["vcent"] ? opt["vcent"]-vlength/2 : vy1 )
|
|
1812
2102
|
vymax =( opt["vcent"] ? opt["vcent"]+vlength/2 : vy1+vlength )
|
|
1813
2103
|
else ## landscape ##
|
|
1814
|
-
vxmin =(
|
|
1815
|
-
vxmax =(
|
|
1816
|
-
if opt["top"]
|
|
1817
|
-
# top
|
|
2104
|
+
vxmin = (opt["vcent"] || ((vx1 + vx2) / 2)) - vlength / 2
|
|
2105
|
+
vxmax = (opt["vcent"] || ((vx1 + vx2) / 2)) + vlength / 2
|
|
2106
|
+
if opt["top"] # top
|
|
1818
2107
|
voff = opt["voff"] ||
|
|
1819
2108
|
DCL.uzrget('roffxt') + DCL.uzrget('pad1')*DCL::uzrget("rsizec2")
|
|
1820
2109
|
vymin = vy2 + voff
|
|
1821
2110
|
vymax = vy2 + voff + vwidth
|
|
1822
|
-
else
|
|
1823
|
-
# bottom
|
|
2111
|
+
else # bottom
|
|
1824
2112
|
voff = opt["voff"] ? -opt["voff"] : \
|
|
1825
2113
|
DCL.uzrget('roffxb') - DCL.uzrget('pad1')*DCL::uzrget("rsizec2")
|
|
1826
2114
|
vymax = vy1 + voff
|
|
@@ -1830,146 +2118,75 @@ module NumRu
|
|
|
1830
2118
|
|
|
1831
2119
|
min = levels[levels.ne(rmiss).where].min
|
|
1832
2120
|
max = levels[levels.ne(rmiss).where].max
|
|
1833
|
-
if levels[0] == rmiss
|
|
1834
|
-
inf0 = true
|
|
2121
|
+
if (inf0 = (levels[0] == rmiss))
|
|
1835
2122
|
dummy1,dummy2,ipat0 = DCL::ueqtlv(1)
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
2123
|
+
if levels.length==2
|
|
2124
|
+
DCLExt.uz_set_params(axparam_bk)
|
|
2125
|
+
return
|
|
2126
|
+
end
|
|
1839
2127
|
end
|
|
1840
|
-
if levels[-1] == rmiss
|
|
1841
|
-
inf1 = true
|
|
2128
|
+
if (inf1 = (levels[-1] == rmiss))
|
|
1842
2129
|
dummy1,dummy2,ipat1 = DCL::ueqtlv(nton)
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
2130
|
+
if levels.length==2
|
|
2131
|
+
DCLExt.uz_set_params(axparam_bk)
|
|
2132
|
+
return
|
|
2133
|
+
end
|
|
1846
2134
|
end
|
|
1847
2135
|
|
|
1848
2136
|
# < paint color tones >
|
|
1849
2137
|
|
|
1850
|
-
lclip_bk =
|
|
1851
|
-
DCL::sglset("lclip", false)
|
|
2138
|
+
lclip_bk = DCLExt.sg_set_params("lclip" => false)
|
|
1852
2139
|
|
|
1853
2140
|
inffact = opt["inffact"]
|
|
2141
|
+
# paint color tones for infinity (with drawing frame)
|
|
2142
|
+
if inf0
|
|
2143
|
+
DCLExt.color_bar_draw_infinity(vxmin, vxmax, vymin, vymax, vwidth, portrait, inffact, -1, ipat0, index)
|
|
2144
|
+
end
|
|
2145
|
+
if inf1
|
|
2146
|
+
DCLExt.color_bar_draw_infinity(vxmin, vxmax, vymin, vymax, vwidth, portrait, inffact, 1, ipat1, index)
|
|
2147
|
+
end
|
|
2148
|
+
# paint color tones for each range (with drawing long-side frame)
|
|
1854
2149
|
if opt["constwidth"]
|
|
1855
2150
|
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
patterns = patterns[1..-1]
|
|
1859
|
-
end
|
|
1860
|
-
if inf1
|
|
1861
|
-
levels = levels[0..-2]
|
|
1862
|
-
patterns = patterns[0..-2]
|
|
1863
|
-
end
|
|
2151
|
+
levels = levels[(inf0 ? 1 : 0)..(inf1 ? -2 : -1)]
|
|
2152
|
+
patterns = patterns[(inf0 ? 1 : 0)..(inf1 ? -2 : -1)]
|
|
1864
2153
|
nlev = levels.length
|
|
1865
2154
|
npat = patterns.length
|
|
1866
2155
|
|
|
1867
2156
|
if portrait
|
|
1868
2157
|
vy = (NArray.sfloat(npat+1).indgen!)*(vymax-vymin)/npat + vymin
|
|
1869
|
-
|
|
1870
|
-
# paint color tones for infinity (with drawing frame)
|
|
1871
|
-
if inf0
|
|
1872
|
-
vy3 = [vymin, vymin-vwidth*inffact, vymin]
|
|
1873
|
-
vx3 = [vxmax, (vxmax+vxmin)/2, vxmin]
|
|
1874
|
-
DCL.sgtnzv(vx3,vy3,ipat0)
|
|
1875
|
-
DCL.sgplzv(vx3,vy3,1,index)
|
|
1876
|
-
end
|
|
1877
|
-
if inf1
|
|
1878
|
-
vy3 = [vymax, vymax+vwidth*inffact, vymax]
|
|
1879
|
-
vx3 = [vxmax, (vxmax+vxmin)/2, vxmin]
|
|
1880
|
-
DCL.sgtnzv(vx3,vy3,ipat1)
|
|
1881
|
-
DCL.sgplzv(vx3,vy3,1,index)
|
|
1882
|
-
end
|
|
1883
|
-
|
|
1884
2158
|
# paint color tones for each range (with drawing long-side frame)
|
|
1885
2159
|
for i in 0..npat-1
|
|
1886
|
-
DCL::sgtnzv([vxmin,vxmax,vxmax,vxmin],
|
|
1887
|
-
DCL::sgplzv([vxmin,vxmin],[vy[i],vy[i+1]],1,index)
|
|
1888
|
-
DCL::sgplzv([vxmax,vxmax],[vy[i],vy[i+1]],1,index)
|
|
2160
|
+
DCL::sgtnzv([vxmin, vxmax, vxmax, vxmin], vy[[i, i, i + 1, i + 1]], patterns[i])
|
|
1889
2161
|
end
|
|
2162
|
+
[vxmin, vxmax].each{|x| DCL::sgplzv([x] * 2, vy[[0, -1]], 1, index)}
|
|
1890
2163
|
|
|
1891
2164
|
else ## landscape ##
|
|
1892
2165
|
vx = (NArray.sfloat(npat+1).indgen!)*(vxmax-vxmin)/npat + vxmin
|
|
1893
|
-
|
|
1894
|
-
# paint color tones for infinity (with drawing frame)
|
|
1895
|
-
if inf0
|
|
1896
|
-
vx3 = [vxmin, vxmin-vwidth*inffact, vxmin]
|
|
1897
|
-
vy3 = [vymax, (vymax+vymin)/2, vymin]
|
|
1898
|
-
DCL.sgtnzv(vx3,vy3,ipat0)
|
|
1899
|
-
DCL.sgplzv(vx3,vy3,1,index)
|
|
1900
|
-
end
|
|
1901
|
-
if inf1
|
|
1902
|
-
vx3 = [vxmax, vxmax+vwidth*inffact, vxmax]
|
|
1903
|
-
vy3 = [vymax, (vymax+vymin)/2, vymin]
|
|
1904
|
-
DCL.sgtnzv(vx3,vy3,ipat1)
|
|
1905
|
-
DCL.sgplzv(vx3,vy3,1,index)
|
|
1906
|
-
end
|
|
1907
|
-
|
|
1908
2166
|
# paint color tones for each range (with drawing long-side frame)
|
|
1909
2167
|
for i in 0..npat-1
|
|
1910
|
-
DCL::sgtnzv(
|
|
1911
|
-
DCL::sgplzv([vx[i],vx[i+1]],[vymin,vymin],1,index)
|
|
1912
|
-
DCL::sgplzv([vx[i],vx[i+1]],[vymax,vymax],1,index)
|
|
2168
|
+
DCL::sgtnzv(vx[[i, i, i + 1, i + 1]], [vymin, vymax, vymax, vymin], patterns[i])
|
|
1913
2169
|
end
|
|
2170
|
+
[vymin, vymax].each{|y| DCL::sgplzv(vx[[0, -1]], [y] * 2, 1, index)}
|
|
1914
2171
|
end
|
|
1915
2172
|
|
|
1916
2173
|
else ### opt["constwidth"] == false ###
|
|
1917
|
-
|
|
1918
|
-
# paint color tones for infinity (with drawing frame)
|
|
1919
|
-
if portrait
|
|
1920
|
-
if inf0
|
|
1921
|
-
vy3 = [vymin, vymin-vwidth*inffact, vymin]
|
|
1922
|
-
vx3 = [vxmax, (vxmax+vxmin)/2, vxmin]
|
|
1923
|
-
DCL.sgtnzv(vx3,vy3,ipat0)
|
|
1924
|
-
DCL.sgplzv(vx3,vy3,1,index)
|
|
1925
|
-
end
|
|
1926
|
-
if inf1
|
|
1927
|
-
vy3 = [vymax, vymax+vwidth*inffact, vymax]
|
|
1928
|
-
vx3 = [vxmax, (vxmax+vxmin)/2, vxmin]
|
|
1929
|
-
DCL.sgtnzv(vx3,vy3,ipat1)
|
|
1930
|
-
DCL.sgplzv(vx3,vy3,1,index)
|
|
1931
|
-
end
|
|
1932
|
-
else ## landscape ##
|
|
1933
|
-
if inf0
|
|
1934
|
-
vx3 = [vxmin, vxmin-vwidth*inffact, vxmin]
|
|
1935
|
-
vy3 = [vymax, (vymax+vymin)/2, vymin]
|
|
1936
|
-
DCL.sgtnzv(vx3,vy3,ipat0)
|
|
1937
|
-
DCL.sgplzv(vx3,vy3,1,index)
|
|
1938
|
-
end
|
|
1939
|
-
if inf1
|
|
1940
|
-
vx3 = [vxmax, vxmax+vwidth*inffact, vxmax]
|
|
1941
|
-
vy3 = [vymax, (vymax+vymin)/2, vymin]
|
|
1942
|
-
DCL.sgtnzv(vx3,vy3,ipat1)
|
|
1943
|
-
DCL.sgplzv(vx3,vy3,1,index)
|
|
1944
|
-
end
|
|
1945
|
-
end
|
|
1946
|
-
|
|
1947
2174
|
# paint color tones for each range
|
|
1948
2175
|
nbar = 100
|
|
1949
2176
|
bar = NArray.float(nbar,2)
|
|
1950
2177
|
for i in 0..nbar-1
|
|
1951
2178
|
bar[i,true] = min + (max-min).to_f/(nbar-1)*i
|
|
1952
2179
|
end
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
2180
|
+
|
|
2181
|
+
labelxbyl_bk = DCLExt.uz_set_params("labelxb" => landscape,
|
|
2182
|
+
"labelyl" => portrait)
|
|
1956
2183
|
if portrait
|
|
1957
|
-
|
|
1958
|
-
xmax = 1.0
|
|
1959
|
-
ymin = min
|
|
1960
|
-
ymax = max
|
|
1961
|
-
DCL::uzlset("labelxb",false)
|
|
1962
|
-
DCL::uzlset("labelyl",true)
|
|
2184
|
+
cbwindow = [0.0, 1.0, min, max]
|
|
1963
2185
|
bar = bar.transpose(-1,0)
|
|
1964
2186
|
DCL::uwsgxa([0,1])
|
|
1965
2187
|
DCL::uwsgya(bar[0,true])
|
|
1966
2188
|
else
|
|
1967
|
-
|
|
1968
|
-
xmax = max
|
|
1969
|
-
ymin = 0.0
|
|
1970
|
-
ymax = 1.0
|
|
1971
|
-
DCL::uzlset("labelxb",true)
|
|
1972
|
-
DCL::uzlset("labelyl",false)
|
|
2189
|
+
cbwindow = [min, max, 0.0, 1.0]
|
|
1973
2190
|
DCL::uwsgxa(bar[true,0])
|
|
1974
2191
|
DCL::uwsgya([0,1])
|
|
1975
2192
|
end
|
|
@@ -1982,7 +2199,7 @@ module NumRu
|
|
|
1982
2199
|
|
|
1983
2200
|
DCL::grfig
|
|
1984
2201
|
DCL::grsvpt(vxmin,vxmax,vymin,vymax)
|
|
1985
|
-
DCL::grswnd(
|
|
2202
|
+
DCL::grswnd(*cbwindow)
|
|
1986
2203
|
DCL::grstrn(type)
|
|
1987
2204
|
DCL::grstrf
|
|
1988
2205
|
|
|
@@ -2000,26 +2217,14 @@ module NumRu
|
|
|
2000
2217
|
ntn = nton
|
|
2001
2218
|
ntn -= 1 if inf0
|
|
2002
2219
|
ntn -= 1 if inf1
|
|
2003
|
-
|
|
2004
|
-
labelintv = (ntn-1) / 9 + 1
|
|
2005
|
-
else
|
|
2006
|
-
labelintv = (ntn-1) / 5 + 1
|
|
2007
|
-
end
|
|
2008
|
-
end
|
|
2009
|
-
if labelintv <= 0
|
|
2010
|
-
no_label = true
|
|
2011
|
-
labelintv = 1
|
|
2012
|
-
else
|
|
2013
|
-
no_label = false
|
|
2220
|
+
labelintv = (ntn - 1) / (portrait ? 9 : 5) + 1
|
|
2014
2221
|
end
|
|
2222
|
+
no_label = (labelintv <= 0)
|
|
2223
|
+
labelintv = 1 if no_label
|
|
2015
2224
|
|
|
2016
2225
|
tickintv = opt["tickintv"]
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
tickintv = labelintv
|
|
2020
|
-
else
|
|
2021
|
-
no_tick = false
|
|
2022
|
-
end
|
|
2226
|
+
no_tick = (tickintv <= 0)
|
|
2227
|
+
tickintv = labelintv if no_tick
|
|
2023
2228
|
|
|
2024
2229
|
eps = 1e-5
|
|
2025
2230
|
dummy = -9.9e-38
|
|
@@ -2095,23 +2300,12 @@ module NumRu
|
|
|
2095
2300
|
end
|
|
2096
2301
|
end
|
|
2097
2302
|
|
|
2303
|
+
DCLExt.color_bar_title_units(vxmin, vxmax, vymin, vymax, portrait, voff,
|
|
2304
|
+
opt['title'], opt['units'], opt['title_voff'], opt['units_voff'])
|
|
2098
2305
|
if portrait
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
vxlabel = vxmax+DCL::uzrget('pad1')*DCL::uzrget('rsizel1')
|
|
2103
|
-
# title
|
|
2104
|
-
DCL::sgtxzr(vxmin-(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), (vymin+vymax)/2.0+opt['title_voff'], opt['title'], DCL::uzrget('rsizel1'), 90, 0, charindex) if opt['title']
|
|
2105
|
-
# units
|
|
2106
|
-
DCL::sgtxzr(vxmax+DCL::uzrget('pad1')*DCL::uzrget('rsizel1'), vymax+2.6*DCL::uzrget('rsizel1')+opt['units_voff'], opt['units'], DCL::uzrget('rsizel1'), 0, -1, charindex) if opt['units']
|
|
2107
|
-
else
|
|
2108
|
-
cent = 1
|
|
2109
|
-
vxlabel = vxmin-DCL::uzrget('pad1')*DCL::uzrget('rsizel1')
|
|
2110
|
-
# title
|
|
2111
|
-
DCL::sgtxzr(vxmax+(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), (vymin+vymax)/2.0-opt['title_voff'], opt['title'], DCL::uzrget('rsizel1'), -90, 0, charindex) if opt['title']
|
|
2112
|
-
# units
|
|
2113
|
-
DCL::sgtxzr(vxmin-DCL::uzrget('pad1')*DCL::uzrget('rsizel1'), vymax+2.6*DCL::uzrget('rsizel1')+opt['units_voff'], opt['units'], DCL::uzrget('rsizel1'), 0, 1, charindex) if opt['units']
|
|
2114
|
-
end
|
|
2306
|
+
cent = ((voff > 0) ? -1 : 1)
|
|
2307
|
+
spacer = DCL::uzrget('pad1') * rsizel1
|
|
2308
|
+
vxlabel = (voff > 0) ? (vxmax + spacer) : (vxmin - spacer)
|
|
2115
2309
|
|
|
2116
2310
|
ilbl_ud = 0
|
|
2117
2311
|
for i in 0..nlev-1
|
|
@@ -2119,7 +2313,7 @@ module NumRu
|
|
|
2119
2313
|
if !no_label && (i % labelintv) == offs_label
|
|
2120
2314
|
if labels_ud
|
|
2121
2315
|
char = labels_ud[ilbl_ud]
|
|
2122
|
-
DCL::sgtxzr(vxlabel,vy[i],char,
|
|
2316
|
+
DCL::sgtxzr(vxlabel, vy[i], char, rsizel1, 0, cent, charindex)
|
|
2123
2317
|
ilbl_ud += 1
|
|
2124
2318
|
else
|
|
2125
2319
|
begin
|
|
@@ -2128,9 +2322,9 @@ module NumRu
|
|
|
2128
2322
|
else
|
|
2129
2323
|
char = sprintf_level(levels[i],lvmx,lvmn,dlv)
|
|
2130
2324
|
end
|
|
2131
|
-
DCL::sgtxzr(vxlabel,vy[i],char,
|
|
2325
|
+
DCL::sgtxzr(vxlabel, vy[i], char, rsizel1, 0, cent, charindex)
|
|
2132
2326
|
rescue
|
|
2133
|
-
DCL::sgtxzr(vxlabel,vy[i],levels[i].to_s,
|
|
2327
|
+
DCL::sgtxzr(vxlabel, vy[i], levels[i].to_s, rsizel1, 0, cent, charindex)
|
|
2134
2328
|
end
|
|
2135
2329
|
end
|
|
2136
2330
|
end
|
|
@@ -2141,19 +2335,10 @@ module NumRu
|
|
|
2141
2335
|
end
|
|
2142
2336
|
|
|
2143
2337
|
else ## landscape ##
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
# units
|
|
2149
|
-
DCL::sgtxzr(vxmax+2.6*DCL::uzrget('rsizel1')+opt['units_voff'], vymax+(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), opt['units'], DCL::uzrget('rsizel1'), 0, -1, charindex) if opt['units']
|
|
2150
|
-
else
|
|
2151
|
-
vylabel = vymin-(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1')
|
|
2152
|
-
# title
|
|
2153
|
-
DCL::sgtxzr((vxmin+vxmax)/2.0+opt['title_voff'], vymax+(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), opt['title'], DCL::uzrget('rsizel1'), 0, 0, charindex) if opt['title']
|
|
2154
|
-
# units
|
|
2155
|
-
DCL::sgtxzr(vxmax+2.6*DCL::uzrget('rsizel1')+opt['units_voff'], vymin-(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), opt['units'], DCL::uzrget('rsizel1'), 0, -1, charindex) if opt['units']
|
|
2156
|
-
end
|
|
2338
|
+
spacer = (0.5 + DCL::uzrget('pad1')) * rsizel1
|
|
2339
|
+
tmpvy = [vymin - spacer, vymax + spacer]
|
|
2340
|
+
tmpvy = [tmpvy[1], tmpvy[0]] if voff <= 0
|
|
2341
|
+
vylabel = tmpvy[1]
|
|
2157
2342
|
|
|
2158
2343
|
ilbl_ud = 0
|
|
2159
2344
|
for i in 0..nlev-1
|
|
@@ -2161,7 +2346,7 @@ module NumRu
|
|
|
2161
2346
|
if !no_label && (i % labelintv) == offs_label
|
|
2162
2347
|
if labels_ud
|
|
2163
2348
|
char = labels_ud[ilbl_ud]
|
|
2164
|
-
DCL::sgtxzr(vx[i],vylabel,char,
|
|
2349
|
+
DCL::sgtxzr(vx[i], vylabel, char, rsizel1, 0, 0, charindex)
|
|
2165
2350
|
ilbl_ud += 1
|
|
2166
2351
|
else
|
|
2167
2352
|
begin
|
|
@@ -2170,9 +2355,9 @@ module NumRu
|
|
|
2170
2355
|
else
|
|
2171
2356
|
char = sprintf_level(levels[i],lvmx,lvmn,dlv)
|
|
2172
2357
|
end
|
|
2173
|
-
DCL::sgtxzr(vx[i],vylabel,char,
|
|
2358
|
+
DCL::sgtxzr(vx[i], vylabel, char, rsizel1, 0, 0, charindex)
|
|
2174
2359
|
rescue
|
|
2175
|
-
DCL::sgtxzr(vx[i],vylabel,levels[i].to_s,
|
|
2360
|
+
DCL::sgtxzr(vx[i], vylabel, levels[i].to_s, rsizel1, 0, 0, charindex)
|
|
2176
2361
|
end
|
|
2177
2362
|
end
|
|
2178
2363
|
end
|
|
@@ -2185,8 +2370,7 @@ module NumRu
|
|
|
2185
2370
|
|
|
2186
2371
|
else ### opt["constwidth"] == false ###
|
|
2187
2372
|
|
|
2188
|
-
inner_bk =
|
|
2189
|
-
uz_set_params('inner'=>1)
|
|
2373
|
+
inner_bk = DCLExt.uz_set_params('inner' => 1)
|
|
2190
2374
|
|
|
2191
2375
|
tick1 = Array.new
|
|
2192
2376
|
tick2 = Array.new
|
|
@@ -2198,183 +2382,76 @@ module NumRu
|
|
|
2198
2382
|
end
|
|
2199
2383
|
end
|
|
2200
2384
|
|
|
2385
|
+
fmt = opt['chval_fmt'] || (opt["log"] ? "b" : DCLExt.level_chval_fmt(lvmx, lvmn, dlv))
|
|
2386
|
+
rsizet12_bk = DCLExt.uz_set_params('rsizet1' => no_tick ? 0.0 : vwidth, 'rsizet2' => 0.0)
|
|
2387
|
+
|
|
2201
2388
|
if portrait
|
|
2202
2389
|
|
|
2203
|
-
if
|
|
2204
|
-
before = uz_set_params(
|
|
2390
|
+
if no_label
|
|
2391
|
+
before = DCLExt.uz_set_params(Hash[*(%w(xt xb yl yr).map{|zs| ["label#{zs}", false]}.flatten)])
|
|
2205
2392
|
else
|
|
2206
|
-
before = uz_set_params('labelyl'=>
|
|
2393
|
+
before = DCLExt.uz_set_params('labelyl' => (voff <= 0),
|
|
2394
|
+
'labelyr' => (voff > 0),
|
|
2395
|
+
'icentyr' => ((voff > 0) ? -1.0 : 1.0))
|
|
2207
2396
|
end
|
|
2208
2397
|
|
|
2209
2398
|
# draw frame, tick lines, and labels
|
|
2210
2399
|
cfmt_bk = DCL::uyqfmt
|
|
2211
|
-
if opt["log"]
|
|
2212
|
-
fmt = opt['chval_fmt'] || "b"
|
|
2213
|
-
else
|
|
2214
|
-
fmt = opt['chval_fmt'] || level_chval_fmt(lvmx,lvmn,dlv)
|
|
2215
|
-
end
|
|
2216
2400
|
DCL::uysfmt(fmt)
|
|
2217
2401
|
|
|
2218
|
-
rsizet1_bk = DCL::uzrget("rsizet1")
|
|
2219
|
-
rsizet2_bk = DCL::uzrget("rsizet2")
|
|
2220
|
-
uz_set_params('rsizet1'=>vwidth,'rsizet2'=>0.0)
|
|
2221
|
-
if no_label
|
|
2222
|
-
nl_labelxt = DCL::uzlget('labelxt')
|
|
2223
|
-
nl_labelxb = DCL::uzlget('labelxb')
|
|
2224
|
-
nl_labelyl = DCL::uzlget('labelyl')
|
|
2225
|
-
nl_labelyr = DCL::uzlget('labelyr')
|
|
2226
|
-
uz_set_params('labelxt'=>false,'labelxb'=>false,'labelyl'=>false,'labelyr'=>false)
|
|
2227
|
-
end
|
|
2228
|
-
if no_tick
|
|
2229
|
-
nt_rsizet1 = DCL::uzrget('rsizet1')
|
|
2230
|
-
DCL::uzrset("rsizet1",0.0)
|
|
2231
|
-
end
|
|
2232
|
-
|
|
2233
2402
|
if labels_ud
|
|
2234
2403
|
if labels_ud.size != tick2.size
|
|
2235
2404
|
raise ArgumentError, "'labels_ud' must be an Array of length==#{tick2.size} in this case"
|
|
2236
2405
|
end
|
|
2237
2406
|
nc = labels_ud.collect{|c| c.size}.max
|
|
2238
|
-
DCL::uyaxlb(
|
|
2239
|
-
DCL::uyaxlb("r",tick1,tick2,labels_ud,nc)
|
|
2407
|
+
["l", "r"].each{|cs| DCL::uyaxlb(cs, tick1, tick2, labels_ud, nc)}
|
|
2240
2408
|
else
|
|
2241
|
-
DCL::uyaxnm(
|
|
2242
|
-
DCL::uyaxnm("r",tick1,tick2)
|
|
2409
|
+
["l", "r"].each{|cs| DCL::uyaxnm(cs, tick1, tick2)}
|
|
2243
2410
|
end
|
|
2244
2411
|
DCL::uxaxdv("b",1,index) if !inf0
|
|
2245
2412
|
DCL::uxaxdv("t",1,index) if !inf1
|
|
2246
2413
|
|
|
2247
|
-
if no_tick
|
|
2248
|
-
DCL::uzrset("rsizet1",nt_rsizet1)
|
|
2249
|
-
end
|
|
2250
|
-
if no_label
|
|
2251
|
-
uz_set_params('labelxt'=>nl_labelxt,'labelxb'=>nl_labelxb,'labelyl'=>nl_labelyl,'labelyr'=>nl_labelyr)
|
|
2252
|
-
end
|
|
2253
|
-
DCL::uzrset("rsizet1",rsizet1_bk)
|
|
2254
|
-
DCL::uzrset("rsizet2",rsizet2_bk)
|
|
2255
|
-
|
|
2256
2414
|
DCL::uysfmt(cfmt_bk)
|
|
2257
2415
|
|
|
2258
|
-
if voff > 0
|
|
2259
|
-
# title
|
|
2260
|
-
DCL::sgtxzr(vxmin-(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), (vymin+vymax)/2.0+opt['title_voff'], opt['title'], DCL::uzrget('rsizel1'), 90, 0, charindex) if opt["title"]
|
|
2261
|
-
# units
|
|
2262
|
-
DCL::sgtxzr(vxmax+DCL::uzrget('pad1')*DCL::uzrget('rsizel1'), vymax+2.6*DCL::uzrget('rsizel1')+opt['units_voff'], opt['units'], DCL::uzrget('rsizel1'), 0, -1, charindex) if opt['units']
|
|
2263
|
-
else
|
|
2264
|
-
# title
|
|
2265
|
-
DCL::sgtxzr(vxmax+(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), (vymin+vymax)/2.0-opt['title_voff'], opt['title'], DCL::uzrget('rsizel1'), -90, 0, charindex) if opt["title"]
|
|
2266
|
-
# units
|
|
2267
|
-
DCL::sgtxzr(vxmin-DCL::uzrget('pad1')*DCL::uzrget('rsizel1'), vymax+2.6*DCL::uzrget('rsizel1')+opt['units_voff'], opt['units'], DCL::uzrget('rsizel1'), 0, 1, charindex) if opt['units']
|
|
2268
|
-
end
|
|
2269
|
-
|
|
2270
|
-
uz_set_params(before)
|
|
2271
|
-
|
|
2272
2416
|
else ## landscape ##
|
|
2273
2417
|
|
|
2274
|
-
if
|
|
2275
|
-
before = uz_set_params(
|
|
2418
|
+
if no_label
|
|
2419
|
+
before = DCLExt.uz_set_params(Hash[*(%w(xt xb yl yr).map{|zs| ["label#{zs}", false]}.flatten)])
|
|
2276
2420
|
else
|
|
2277
|
-
before = uz_set_params('labelxt'=>
|
|
2421
|
+
before = DCLExt.uz_set_params('labelxt' => (voff > 0), 'labelxb' => (voff <= 0))
|
|
2278
2422
|
end
|
|
2279
2423
|
|
|
2280
2424
|
# draw frame, tick lines, and labels
|
|
2281
2425
|
cfmt_bk = DCL::uxqfmt
|
|
2282
|
-
if opt["log"]
|
|
2283
|
-
fmt = opt['chval_fmt'] || "b"
|
|
2284
|
-
else
|
|
2285
|
-
fmt = opt['chval_fmt'] || level_chval_fmt(lvmx,lvmn,dlv)
|
|
2286
|
-
end
|
|
2287
2426
|
DCL::uxsfmt(fmt)
|
|
2288
2427
|
|
|
2289
|
-
rsizet1_bk = DCL::uzrget("rsizet1")
|
|
2290
|
-
rsizet2_bk = DCL::uzrget("rsizet2")
|
|
2291
|
-
uz_set_params('rsizet1'=>vwidth,'rsizet2'=>0.0)
|
|
2292
|
-
if no_label
|
|
2293
|
-
nl_labelxt = DCL::uzlget('labelxt')
|
|
2294
|
-
nl_labelxb = DCL::uzlget('labelxb')
|
|
2295
|
-
nl_labelyl = DCL::uzlget('labelyl')
|
|
2296
|
-
nl_labelyr = DCL::uzlget('labelyr')
|
|
2297
|
-
uz_set_params('labelxt'=>false,'labelxb'=>false,'labelyl'=>false,'labelyr'=>false)
|
|
2298
|
-
end
|
|
2299
|
-
if no_tick
|
|
2300
|
-
nt_rsizet1 = DCL::uzrget('rsizet1')
|
|
2301
|
-
DCL::uzrset("rsizet1",0.0)
|
|
2302
|
-
end
|
|
2303
|
-
|
|
2304
2428
|
if labels_ud
|
|
2305
2429
|
if labels_ud.size != tick2.size
|
|
2306
2430
|
raise ArgumentError, "'labels_ud' must be an Array of length==#{tick2.size} in this case"
|
|
2307
2431
|
end
|
|
2308
2432
|
nc = labels_ud.collect{|c| c.size}.max
|
|
2309
|
-
DCL::uxaxlb(
|
|
2310
|
-
DCL::uxaxlb("b",tick1,tick2,labels_ud,nc)
|
|
2433
|
+
["t", "b"].each{|cs| DCL::uxaxlb(cs, tick1, tick2, labels_ud, nc)}
|
|
2311
2434
|
else
|
|
2312
|
-
DCL::uxaxnm(
|
|
2313
|
-
DCL::uxaxnm("b",tick1,tick2)
|
|
2435
|
+
["t", "b"].each{|cs| DCL::uxaxnm(cs, tick1, tick2)}
|
|
2314
2436
|
end
|
|
2315
2437
|
DCL::uyaxdv("l",1,index) if !inf0
|
|
2316
2438
|
DCL::uyaxdv("r",1,index) if !inf1
|
|
2317
2439
|
|
|
2318
|
-
if no_tick
|
|
2319
|
-
DCL::uzrset("rsizet1",nt_rsizet1)
|
|
2320
|
-
end
|
|
2321
|
-
if no_label
|
|
2322
|
-
uz_set_params('labelxt'=>nl_labelxt,'labelxb'=>nl_labelxb,'labelyl'=>nl_labelyl,'labelyr'=>nl_labelyr)
|
|
2323
|
-
end
|
|
2324
|
-
DCL::uzrset("rsizet1",rsizet1_bk)
|
|
2325
|
-
DCL::uzrset("rsizet2",rsizet2_bk)
|
|
2326
|
-
|
|
2327
2440
|
DCL::uxsfmt(cfmt_bk)
|
|
2328
|
-
|
|
2329
|
-
if voff > 0
|
|
2330
|
-
# title
|
|
2331
|
-
DCL::sgtxzr((vxmin+vxmax)/2.0+opt['title_voff'], vymin-(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), opt['title'], DCL::uzrget('rsizel1'), 0, 0, charindex) if opt["title"]
|
|
2332
|
-
# units
|
|
2333
|
-
DCL::sgtxzr(vxmax+2.6*DCL::uzrget('rsizel1')+opt['units_voff'], vymax+(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), opt['units'], DCL::uzrget('rsizel1'), 0, -1, charindex) if opt['units']
|
|
2334
|
-
else
|
|
2335
|
-
# title
|
|
2336
|
-
DCL::sgtxzr((vxmin+vxmax)/2.0+opt['title_voff'], vymax+(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), opt['title'], DCL::uzrget('rsizel1'), 0, 0, charindex) if opt["title"]
|
|
2337
|
-
# units
|
|
2338
|
-
DCL::sgtxzr(vxmax+2.6*DCL::uzrget('rsizel1')+opt['units_voff'], vymin-(0.5+DCL::uzrget('pad1'))*DCL::uzrget('rsizel1'), opt['units'], DCL::uzrget('rsizel1'), 0, -1, charindex) if opt['units']
|
|
2339
|
-
end
|
|
2340
|
-
|
|
2341
|
-
uz_set_params(before)
|
|
2342
|
-
|
|
2343
2441
|
end
|
|
2442
|
+
DCLExt.color_bar_title_units(vxmin, vxmax, vymin, vymax, portrait, voff,
|
|
2443
|
+
opt['title'], opt['units'], opt['title_voff'], opt['units_voff'])
|
|
2344
2444
|
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
if
|
|
2350
|
-
|
|
2351
|
-
DCL::grstrn(itrsv)
|
|
2352
|
-
elsif itrsv <= 9
|
|
2353
|
-
DCL::sgssim(simfacsv,vxoffsv,vyoffsv)
|
|
2354
|
-
DCL::grstrn(itrsv)
|
|
2355
|
-
### TENTATIVE WORKAROUND (2012/2/9)
|
|
2356
|
-
elsif itrsv <= 34
|
|
2357
|
-
DCL::grswnd(ux1sv, ux2sv, uy1sv, uy2sv)
|
|
2358
|
-
DCL.sgstrn(itrsv)
|
|
2359
|
-
DCL.umpset('lglobe', lglobesv)
|
|
2360
|
-
DCL::grstxy(*grstxysv)
|
|
2361
|
-
DCL.umscnt(plxsv,plysv,plrotsv)
|
|
2362
|
-
DCL.umpfit
|
|
2363
|
-
###
|
|
2364
|
-
DCL.sgssim(simfacsv,vxoffsv,vyoffsv)
|
|
2365
|
-
#DCL.sgsmpl(plxsv,plysv,plrotsv)
|
|
2366
|
-
end
|
|
2367
|
-
DCL::grstrf
|
|
2368
|
-
|
|
2369
|
-
uz_set_params('inner'=>inner_bk)
|
|
2445
|
+
# RESTORE PARAMS
|
|
2446
|
+
DCLExt.restore_proj_params(proj_params)
|
|
2447
|
+
DCLExt.uz_set_params(before) ### labelzs
|
|
2448
|
+
DCLExt.uz_set_params(rsizet12_bk)
|
|
2449
|
+
DCLExt.uz_set_params(labelxbyl_bk) if labelxbyl_bk
|
|
2450
|
+
DCLExt.uz_set_params(inner_bk)
|
|
2370
2451
|
end
|
|
2371
2452
|
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
DCL::uziset("indexl1",indexl1_bk)
|
|
2375
|
-
DCL::uzrset("rsizel1",rsizel1_bk)
|
|
2376
|
-
|
|
2377
|
-
DCL::sglset("lclip", lclip_bk)
|
|
2453
|
+
DCLExt.uz_set_params(axparam_bk)
|
|
2454
|
+
DCLExt.sg_set_params(lclip_bk)
|
|
2378
2455
|
nil
|
|
2379
2456
|
end
|
|
2380
2457
|
|
|
@@ -2399,29 +2476,23 @@ module NumRu
|
|
|
2399
2476
|
def legend(str, type, index, line=false, size=nil,
|
|
2400
2477
|
vx=nil, dx=nil, vy=nil, first=true, mark_size=nil)
|
|
2401
2478
|
|
|
2402
|
-
size
|
|
2403
|
-
mark_size
|
|
2479
|
+
size ||= DCL::uzrget("rsizel1") * 0.95
|
|
2480
|
+
mark_size ||= size
|
|
2404
2481
|
|
|
2405
2482
|
vpx1,vpx2,vpy1,vpy2 = DCL.sgqvpt
|
|
2406
|
-
if first
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
elsif vy < 0
|
|
2410
|
-
vy = ( vpy2 - 0.04 ) + vy
|
|
2411
|
-
end
|
|
2412
|
-
@vy = vy
|
|
2483
|
+
if first || (!@vy)
|
|
2484
|
+
vy ||= vpy2 - 0.04
|
|
2485
|
+
vy += vpy2 - 0.04 if vy < 0
|
|
2413
2486
|
else
|
|
2414
|
-
vy
|
|
2487
|
+
vy ||= @vy - 1.5 * size
|
|
2415
2488
|
end
|
|
2489
|
+
@vy = vy
|
|
2416
2490
|
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
elsif vx < 0
|
|
2420
|
-
vx = (vpx2 + 0.015) + vx
|
|
2421
|
-
end
|
|
2491
|
+
vx ||= vpx2 + 0.015
|
|
2492
|
+
vx = (vpx2 + 0.015) + vx if vx < 0
|
|
2422
2493
|
|
|
2423
2494
|
if line
|
|
2424
|
-
dx
|
|
2495
|
+
dx ||= 0.06
|
|
2425
2496
|
vx2 = vx + dx
|
|
2426
2497
|
DCL::sgplzv([vx,vx2],[vy,vy],type,index)
|
|
2427
2498
|
DCL.sgtxzv(vx2+0.01,vy,str,size,0,-1,3)
|
|
@@ -2561,17 +2632,63 @@ if $0 == __FILE__
|
|
|
2561
2632
|
#xdegc[-1] += 360
|
|
2562
2633
|
xx = x.newdim(1)
|
|
2563
2634
|
yy = y.newdim(0)
|
|
2564
|
-
|
|
2635
|
+
#p exp(-0.1*(yy+xx)).to_a
|
|
2636
|
+
z = ( (cos(4*yy)-1)*sin(2*xx) - 2*cos(2*yy) ) * exp(0.4*yy)
|
|
2565
2637
|
u = - Derivative.cderiv(z,y,1,Derivative::CYCLIC_EXT)
|
|
2566
2638
|
v = Derivative.cderiv(z,x,0,Derivative::CYCLIC_EXT) / cos(yy)
|
|
2567
2639
|
u = NArrayMiss.to_nam(u)
|
|
2568
2640
|
#DCL.ugpset('lmissp',true)
|
|
2569
2641
|
u.invalidation(2..6,-5..-2)
|
|
2570
|
-
v[7..10,-5] = 999.0
|
|
2642
|
+
#v[7..10,-5] = 999.0
|
|
2571
2643
|
|
|
2644
|
+
DCL.swpset('iwidth',900)
|
|
2645
|
+
DCL.swpset('iheight',900)
|
|
2572
2646
|
DCL.gropn(1)
|
|
2573
2647
|
DCL.glpset('lmiss',true)
|
|
2574
2648
|
|
|
2649
|
+
DCL.sldiv("y",2,2)
|
|
2650
|
+
DCL.grfrm
|
|
2651
|
+
DCL.grstrn(1)
|
|
2652
|
+
DCL.grsvpt(0.1,0.9,0.1,0.9)
|
|
2653
|
+
DCL.grswnd(xdeg[0],xdeg[-1],ydeg[0],ydeg[-1])
|
|
2654
|
+
DCL.grstrf
|
|
2655
|
+
DCL.usdaxs
|
|
2656
|
+
unit_vect_info = DCLExt.flow_vect(u, v)
|
|
2657
|
+
p unit_vect_info
|
|
2658
|
+
DCLExt.unit_vect( *unit_vect_info )
|
|
2659
|
+
|
|
2660
|
+
DCL.grfrm
|
|
2661
|
+
DCL.grstrn(1)
|
|
2662
|
+
DCL.grsvpt(0.1,0.9,0.1,0.9)
|
|
2663
|
+
DCL.grswnd(xdeg[-1],xdeg[0],ydeg[0],ydeg[-1])
|
|
2664
|
+
DCL.grstrf
|
|
2665
|
+
DCL.usdaxs
|
|
2666
|
+
unit_vect_info = DCLExt.flow_vect(u[-1..0,true], v[-1..0,true])
|
|
2667
|
+
p unit_vect_info
|
|
2668
|
+
DCLExt.unit_vect( *unit_vect_info )
|
|
2669
|
+
|
|
2670
|
+
DCL.grfrm
|
|
2671
|
+
DCL.grstrn(1)
|
|
2672
|
+
DCL.grsvpt(0.1,0.9,0.1,0.9)
|
|
2673
|
+
DCL.grswnd(xdeg[0],xdeg[-1],ydeg[-1],ydeg[0])
|
|
2674
|
+
DCL.grstrf
|
|
2675
|
+
DCL.usdaxs
|
|
2676
|
+
unit_vect_info = DCLExt.flow_vect(u[true,-1..0], v[true,-1..0])
|
|
2677
|
+
p unit_vect_info
|
|
2678
|
+
DCLExt.unit_vect( *unit_vect_info )
|
|
2679
|
+
|
|
2680
|
+
DCL.grfrm
|
|
2681
|
+
DCL.grstrn(1)
|
|
2682
|
+
DCL.grsvpt(0.1,0.9,0.1,0.9)
|
|
2683
|
+
DCL.grswnd(xdeg[-1],xdeg[0],ydeg[-1],ydeg[0])
|
|
2684
|
+
DCL.grstrf
|
|
2685
|
+
DCL.usdaxs
|
|
2686
|
+
unit_vect_info = DCLExt.flow_vect(u[-1..0,-1..0], v[-1..0,-1..0])
|
|
2687
|
+
p unit_vect_info
|
|
2688
|
+
unit_vect_info[3] = 0.0
|
|
2689
|
+
DCLExt.unit_vect( *unit_vect_info )
|
|
2690
|
+
|
|
2691
|
+
=begin
|
|
2575
2692
|
DCL.sgpset('lclip',true)
|
|
2576
2693
|
|
|
2577
2694
|
for itr in [10,12]
|
|
@@ -2631,6 +2748,61 @@ if $0 == __FILE__
|
|
|
2631
2748
|
DCLExt.unit_vect_single(vfratio, flenmax)
|
|
2632
2749
|
DCL.umplim
|
|
2633
2750
|
|
|
2751
|
+
## for datetime_ax
|
|
2752
|
+
date_from = DateTime.parse('2005-06-30 17:00')
|
|
2753
|
+
date_to = DateTime.parse('2005-07-01 5:00')
|
|
2754
|
+
date_from2 = DateTime.parse('2005-06-29 17:00')
|
|
2755
|
+
date_to2 = DateTime.parse('2005-07-02 5:00')
|
|
2756
|
+
|
|
2757
|
+
any_offst = 10
|
|
2758
|
+
|
|
2759
|
+
DCL.grfrm
|
|
2760
|
+
DCL.grswnd(0.0, date_to-date_from, any_offst, date_to2-date_from2+any_offst)
|
|
2761
|
+
DCL.grsvpt(0.2, 0.8, 0.2, 0.8)
|
|
2762
|
+
DCL.grstrn(1)
|
|
2763
|
+
DCL.grstrf
|
|
2764
|
+
DCLExt.datetime_ax(date_from, date_to, 'year'=>true)
|
|
2765
|
+
DCLExt.datetime_ax(date_from, date_to, 'cside'=>'t', 'year'=>true)
|
|
2766
|
+
DCLExt.datetime_ax(date_from2, date_to2, 'yax'=>true)
|
|
2767
|
+
DCLExt.datetime_ax(date_from2, date_to2, 'yax'=>true, 'cside'=>'r')
|
|
2768
|
+
DCL.uxsttl('b','TIME AND DATE',0.0)
|
|
2769
|
+
DCL.uysttl('l','TIME AND DATE',0.0)
|
|
2770
|
+
|
|
2771
|
+
DCL.grfrm
|
|
2772
|
+
DCL.grswnd(0.0, date_to-date_from, 0, date_to2-date_from2)
|
|
2773
|
+
DCL.grsvpt(0.2, 0.8, 0.2, 0.8)
|
|
2774
|
+
DCL.grstrn(1)
|
|
2775
|
+
DCL.grstrf
|
|
2776
|
+
DCL.uzpset('inner',-1)
|
|
2777
|
+
DCLExt.datetime_ax(date_from, date_to, 'dtick2'=>2)
|
|
2778
|
+
DCLExt.datetime_ax(date_from, date_to, 'cside'=>'t', 'dtick2'=>2)
|
|
2779
|
+
DCL.uzpset('inner',1)
|
|
2780
|
+
DCLExt.datetime_ax(date_from2, date_to2, 'yax'=>true,
|
|
2781
|
+
'dtick1'=>2, 'dtick2'=>24)
|
|
2782
|
+
DCLExt.datetime_ax(date_from2, date_to2, 'yax'=>true, 'cside'=>'r',
|
|
2783
|
+
'dtick1'=>2, 'dtick2'=>24)
|
|
2784
|
+
DCL.uxsttl('b','TIME AND DATE',0.0)
|
|
2785
|
+
DCL.uysttl('l','TIME AND DATE',0.0)
|
|
2786
|
+
|
|
2787
|
+
## for date_ax
|
|
2788
|
+
date_from = DateTime.parse('1995-06-30 17:00')
|
|
2789
|
+
date_to = DateTime.parse('2000-02-01 5:00')
|
|
2790
|
+
any_offst = 10
|
|
2791
|
+
|
|
2792
|
+
3.times do
|
|
2793
|
+
DCL.grfrm
|
|
2794
|
+
DCL.grswnd(0.0, date_to-date_from, any_offst, date_to-date_from+any_offst)
|
|
2795
|
+
DCL.grsvpt(0.2, 0.8, 0.2, 0.8)
|
|
2796
|
+
DCL.grstrn(1)
|
|
2797
|
+
DCL.grstrf
|
|
2798
|
+
#DCL.uzpset("irotcyl",0)
|
|
2799
|
+
#DCL.uzpset("irotcxb",1)
|
|
2800
|
+
DCLExt.date_ax(date_from, date_to)
|
|
2801
|
+
DCLExt.date_ax(date_from, date_to, "yax"=>true)
|
|
2802
|
+
date_to = date_to >> 15*12
|
|
2803
|
+
end
|
|
2804
|
+
=end
|
|
2805
|
+
|
|
2634
2806
|
DCL.grcls
|
|
2635
2807
|
|
|
2636
2808
|
end
|